背景说明
网站使用CDN加速以后,大部分静态文件都将会被离用户较近的CDN边缘节点缓存,由此起到访问加速效果。如果用户访问的文件由CDN节点直接响应,无需回源,则称之为缓存命中。CDN缓存命中率越高,也就意味着加速效果越好,相应的回源量也会极大减少。
天翼云CDN控制台上【数据分析】模块,可以看到缓存流量命中率和请求命中率数据。缓存命中的流量除以总流量称之为流量命中率,缓存命中的请求数除以总请求数称之为请求命中率。只要在CDN边缘节点,或是在中间节点命中,均统计为缓存命中(CDN用户请求流向为:用户客户端->CDN边缘节点->CDN中间节点->源站)。如果命中率低,则较多用户的请求都会从CDN节点回源,不仅访问效果不佳,还会给源站造成较大压力。本文将介绍产生此类情况的可能原因。
可能原因
- 如果域名刚接入天翼云CDN加速,则用户首次访问文件时CDN节点均需要回源获取,此时缓存命中率较低,需要经过一段时间后才能逐步把大部分文件缓存至CDN节点,这个时间往往要经过两三天至一周左右。
- 如果域名已接入天翼云CDN较长时间,仍命中率较低,则可排查是否存在如下情况:
是否用户请求量过低导致
如果域名请求数总量较少,则即使有少量URL未命中,仍会对总体命中率影响较大。例如,5分钟内仅100个URL请求,其中20个是访问同个URL,但因为该URL在CDN设置了不缓存或缓存时间为0(等同于不缓存),导致每次请求都回源,则此时CDN缓存命中率最高不会超过80%。此外,因为CDN节点磁盘缓存空间有限,一般会有基于文件热度淘汰冷文件机制。如果该域名访问的资源热度极低,例如第一次访问后,下次用户访问同个资源是在一周以后,则在此期间该文件可能因为热度过低被淘汰掉,也会导致命中率较低。
是否用户请求确实比较分散,热度较低导致
域名总请求数和访问量居中,但用户请求确实比较分散,即不同地区不同用户访问的内容都不一样,没有集中请求热点资源,这种用户访问特性也会导致命中率较低。该情况可以结合CDN控制台上【数据分析】模块的“热门URL”数据来进行确认,例如按天统计的热门URL排名TOP10的访问次数很少,访问占比不到1%,则该域名整体命中率较低是正常情况。
是否因缓存设置不合理导致
CDN控制台上有推荐的缓存规则设置,客户可以基于该规则进行适当调整。如果缓存规则设置不合理,也会导致缓存命中率较低。可以结合CDN控制台上【数据分析】模块中“热门URL(回源)”数据进行确认。例如,回源请求次数排名TOP的URL,是否存在实际是可缓存的,或是否存在加速URL中携带问号后参数但实际指向同个文件,因未设置去问号缓存导致重复回源(详情请见:CDN缓存key携带问号后参数导致缓存命中率低)。如存在上述情况,可通过CDN控制台【域名管理】模块中“缓存配置”-“缓存过期时间设置”进行调整优化,例如将实际可缓存的URL,设置为强制缓存一段时间,或将相应URL设置为去问号缓存。
注意CDN缓存规则分为不缓存、强制缓存、遵循源站缓存三种,其中如果选择遵循源站缓存,则可能因为源站返回Cache-Control头值为no-cache、no-store、private等不缓存头而导致CDN节点不缓存,此时如果确认对应URL实际是可缓存的,可将缓存规则调整为强制缓存,此时CDN节点将忽略源站的不缓存头,强制进行缓存。
完成以上检查后,如发现回源较多的URL确实是不能缓存的URL,即设置了不缓存或缓存时间为0的URL,例如php、jsp文件等,则命中率较低是正常情况。
检查是否与分片回源设置有关
通常情况下,针对较大文件,开启分片回源功能有助于提升回源效率,降低因回源链路网络拥塞造成的下载速度慢等问题。开启分片回源后,CDN节点将按照固定的分片大小以Range请求方式回源。但如果源站文件实际较小,例如大多小于10MB,则开启分片回源反而会降低回源效率,造成多次回源,命中率下降。
注意请在新增域名时明确是否开启分片回源,以及开启分片回源的具体分片大小;一旦域名CNAME至我司产生流量后,建议不要轻易变更分片回源功能的分片大小,否则过渡期间可能会产生较高回源,命中率下降;如确实有调整需求,请提交工单联系天翼云客服处理,详情请见:分片回源。
源站是否设置了多副本缓存
多副本缓存是指源站响应头中包含vary头,且值为Accept-Encoding或User-Agent等时,以值为Accept-Encoding为例,意味着源站针对Accept-Encoding请求头值不同时,会给出不同的响应体,因此要求CDN节点缓存成不同份文件,即多副本的方式来缓存。这样会导致同个URL请求,CDN节点将回源多次,造成命中率降低。
是否存在频繁刷新
在CDN控制台上操作刷新文件或目录时,会造成所有CDN节点回源,也会导致命中率下降。