客户问题:
阿里云CDN控制台上显示的缓存命中率一直不高,且源站收到较多来自CDN的回源请求,对源站造成一定的负载压力。现需要排查缓存命中率不高的原因。
凯铧互联技术回复:
参考以下步骤,排查阿里云CDN缓存命中率不高的原因。
阿里云CDN控制台统计的缓存命中率仅仅是CDN L1层的命中率,实际情况L2层的缓存数据也是从CDN节点获取,并不会从源站获取数据,所以真实的CDN命中率是略高于CDN控制台显示的命中率。
说明:CDN数据流向为客户端>CDN的1级节点>CDN的2级节点>源站。
查看用户提交的CDN加速域名流量情况,在加速域名流量不高的情况下,即便MISS状态的URL不多,但是对命中率的统计计算影响很大。例如,某CDN加速域名一共对外提供了10个可以访问的URL,其中有一个URL源站上设置了no-cache,导致不缓存,在其他URL访问都命中的情况下,命中率也仅有90%。
说明:CDN加速域名的流量带宽可以在CDN控制台获取。
在之前检查正常的情况下,有如下几种可能导致命中率低的情况,请逐一进行排查:
源站上缓存Header设置不当,或者缺少必要的Header,如果CDN的缓存规则是不缓存,那么每次访问都是MISS状态,影响命中率:
缓存Header设置不当,主要是Cache-Control或者Pragma配置,即源站上设置了Cache-Control为no-cache、no-store、max-age=0、private,或者Pragma设置为no-cache等情况下,均会被CDN当做最高优先级执行不缓存操作。
缺少必要的Header,指源站的Response头部信息中不包含Etag和Last-modified,这种情况也会导致不进行缓存。
CDN控制台设置了不缓存的规则,即某目录或者某种后缀的文件设置的缓存时间为0秒,相关信息可以在CDN控制台查看。
源站动态内容较多,目前CDN主要是加速静态资源,例如CSS、JS、HTML、图片、txt、视频等资源,针对动态资源PHP、JSP、包含内部逻辑处理甚至Cookie等资源都会回源数据。
CDN的加速URL中带有可变参数。例如URL地址为http://XXX.XXX.cn/1.txt?timestamp=14378923,其中timestamp值为时间戳,每次访问此值均不同。CDN针对第一次访问的URL,即之前未预热的URL,无论该URL是否符合CDN的缓存规则,由于节点上还没有这个文件,第一次访问肯定都是MISS状态。但是timestamp参数会变化,所以每次访问都是一个全新的URL,则每次都返回MISS状态,从而影响命中率。
刷新操作频繁。CDN控制台有定时刷新功能,每次刷新都会导致所有已经在CDN上缓存的URL失效,所以在刷新之后访问同样的URL时,就是MISS状态,从而影响命中率。
文件热度不够。不经常被用户访问到的URL,即使符合所有缓存规则,但是经常有被节点去除缓存的风险。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,热度就是该文件在该节点上被访问的频率,文件热度不够,其实一定程度上跟这个域名本身的流量不高有关系,即第2步的原因。
本文适用于
阿里云CDN缓存命中率较低
阿里云代理商凯铧互联:享受购买价格更优惠!2021年6.18活动请戳 http://www.alibjyun.com/process.html 云产品通用代金券,限量抢!!
享受更多阿里云代理折扣或 领取更多阿里云优惠券联系我司客服QQ:3287819116; 3398234753;2550856134
阿里云业务网站:www.alibjyun.com
联系电话:158-0160-3153(微信同号)