参考以下步骤,排查缓存命中率不高的原因。
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步的原因。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。