静态 CDN 加速,命中率过低

背景

如下图用户在 CDN 加速的静态业务域名命中率出现低于 50% 甚至更低的情况,众所周知 CDN 起到加速的静态资源的功能,核心是将源站的资源缓存到靠近用户的就近节点。如果发生命中率过低的情况意味用户的每次请求都会通过 CDN 回源,公网链路的不稳定可能导致加速的效果反而变差,如何解决命中率过低的问题,首先要分析原因才能找到对策,我们一起来探讨下。

静态 CDN 加速,命中率过低

启动特殊配置

检查是否开启强制 range 回源

目前各家云 CDN 厂商都支持了 range 强制回源的功能,此功能开启后,用户的所有回源请求将按照各厂商自己设定的 range size 切片回源。 range 的功能也有 2 面性,对于原站是大文件的(超过 50M) 场景,range 分片可以有效的降低大文件下载时遇到的网络拥塞,以及原站为窄带的情况。但如果原站的文件平均 size 相对较小,比如在 10M 以内的文件,开启强制 range 回源没有优化效果,反而降低回源的效率,扩大回源,使命中率降低。

检查是否开启忽略参数缓存

当用户的业务经常在 uri 带变量,并且不同用户请求时都有不同的 parameter 变量时,CDN 会按照 URL hash 后的值存储,每一条不同的 uri 都会触发回源,CDN 就变成透传的组件失去了缓存的意义。遇到这种情况,我们建议可以开启 CDN 忽略参数缓存的功能,将 uri "?" 以后的资源去掉后在 CDN 缓存。但如果原站或者用户对 "?" 后的参数强依赖,建议切换到 全站加速(DCDN) 产品,通过智能选路回源更灵活,CDN 是固定 边缘节点、中心节点 双层回源,对于强依赖 "?" 变量的访问效果略低于全站加速(DCDN),智能选路是动态的网络质量检测来规划回源路径,可能是 边缘节点直接回源,也可以是边缘节点回到中心节点再回源。

检查源站是否开启多副本缓存

多副本缓存,是服务端(源站) 针对用户请求带有不同 Accept-Encoding 头,源站能响应不同的 Vary 头,且 CDN 会按按照不同的 Vary 头进行缓存。带有不同 vary 头的请求会增加回源的次数,导致命中率降低。

检查缓存配置是否合理

  • 静态资源是否配置了明显的缓存头,比如 cache-control ,max-age ,expire 等
  • 源是否设置过缓存头,CDN 默认按照源站的缓存头优先级缓存,如果源站设置了不合理的缓存头,比如 max-age=0 ,则覆盖 CDN 的缓存。

检查业务 QPS 是否正常

CDN 的缓存规则默认是按照用户配置的缓存时间进行缓存。但节点的磁盘空间是有限的,在高频用户访问的情况下,缓存文件会按照冷文件的冷热程度汰换,访问频率较低的文件会被访问热点的文件汰换掉造成回源。遇到这种情况一般都是只有十几个 QPS 的域名,建议用户定义对自己域名下的资源进行预热,保证是命中在节点的。

上一篇:Ceph 心得分享


下一篇:云服务器 mac 地址是什么