开发者社区> 问答> 正文

CDN命中率低,怎么办?

行者武松 2018-02-02 14:38:14 1630

CDN命中率低,怎么办?

CDN
分享到
取消 提交回答
全部回答(1)
  • 元芳啊
    2019-07-17 21:57:48

    解决方案

    控制台统计的命中率仅仅统计的是CDN L1的命中率,实际情况是L2命中也是从CDN节点拿去数据的,并不会回源,所以真实的CDN命中率是略高于控制台显示的CDN命中率的。(CDN数据流向:客户端->CDN L1层->CDNL2层->源站)

    查看用户所提交CDN加速域名的流量情况,加速域名的流量不高的情况下,即便MISS的URL不多,但是对命中率的统计计算是影响很大的。

    例如,某CDN加速域名一共对外提供了10个可以访问的URL,其中有一个URL源站上设置了no-cache导致不缓存,其他所有URL访问都命中的情况下,命中率也仅有90%。

    CDN加速域名的流量带宽查询可以在控制台获取到:

    image.png | center | 1408x758

    如果第1和第2都确认OK的情况下,下面有几种可能导致命中率低的情况,请逐一对照排查:

    源站上缓存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也会导致不缓存,具体哪几种情况会导致不缓存,可以参考download: 判断CDN不缓存某文件的方法.docx。

    控制台设置了不缓存的规则(比如某目录或者某种后缀的文件设置缓存时间为0秒),查询方法可以在CDN控制台查看。

    image.png | center | 1582x297

    源站动态内容居多,目前CDN主要是加速静态资源(css、js、html、图片、txt、视频等),针对动态资源(php、jsp、包含内部逻辑处理甚至cookie等)基本都是回源。

    CDN的访问URL中带有可变参数(举例:http://dccdn.pier39.cn/1.txt?timestamp=14378923](http://dccdn.pier39.cn/1.txt?timestamp=14378923,其中timestamp表示时间戳,每次访问均会不同)。这里CDN针对第一次访问的URL(之前未预热),无论该URL是否符合CDN的缓存规则,第一次访问肯定都是MISS的(因为节点上还没有这个文件),因为后面的参数可变,所以每次访问都是一个全新的URL,则每次都会MISS,从而影响命中率。

    刷新操作频繁,有定时刷新的操作,每次刷新都会导致所有已经在CDN上缓存的URL失效,那么下次访问同样的URL,自然就会MISS,从而影响命中率。

    文件热度不够,不经常被客户访问到,导致虽然符合上面的所有规则,但是经常有被节点下掉缓存。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,所谓热度就是该文件在该节点上被访问的频率,文件热度不够,其实一定程度上跟这个域名本身的流量不高有关联关系(排查点2)。

    0 0
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章
相似问题
推荐课程