背景
CDN 在静态资源的加速场景中是将资源缓存在距离客户端较近的CDN 节点上,客户端访问该资源可以直接获取CDN节点的缓存资源,避免再通过较长的链路回源获取。因此 CDN的缓存命中率的高低直接影响客户体验。提高命中率还可以减少回源带宽,降低源站带宽成本,减小源站压力。下面我们一起探讨 CDN 缓存命中率的概念、影响因素以及优化策略。
概念:
流量命中率就是CDN 缓存命中 Response 的字节数除以 CDN所有请求响应的字节数,从控制台就可以看到命中率的实际情况:
影响因素:
一、预热和刷新
预热功能是将URL提前拉到CDN的中间源层,下次访问的时候就不需要回源站再拉取资源了,因此预热是没有直接导致边缘的命中率升高,但提升了CDN的命中率,减少了回源带宽。
刷新功能是将CDN节点上缓存的URL或目录purge掉,使缓存失效,下次访问的时候直接回源获取,会降低命中率。
刷新、预热都有限额,注意刷新、预热失败的时候是不是超过了限额。
优化点:切量前对TOP URL进行预热,慎用刷新功能。
刷新预热地址:https://console.cloud.tencent.com/cdn/refresh
二、忽略参数缓存
url 在带参数,全部参数或某些参数不影响业务的情况下,可以开启过滤参数功能
例如:http://www.qq.com/a.jpg?time=1 和http://www.qq.com/a.jpg?time=2 标识的是同一份资源http://www.qq.com/a.jpg,那么就可以开启过滤参数缓存;如果http://www.qq.com/a.jpg?h=666, h表示的是a.jpg的尺寸的话,就不能忽略该参数。因为忽略后的资源与原资源不是同一份资源。
过滤参数包括【不保留】和【保留指定参数】这两个功能。
不保留:忽略所有参数。
保留指定参数:多个参数之间用英文分号 ; 隔开,未指定的参数将被忽略。
优化点:将不影响文件内容的参数忽略
官网说明:https://cloud.tencent.com/document/product/228/41553
三、Range 回源
开启range回源配置能够有效提高大文件分发效率,提升响应速度,降低源站压力。
Range回源原理:
1)、带了range请求:会先发起该range的首字节,探测文件大小,比如:请求range:10000-30000,那么会发起range:10000-10000,探测文件大小
2)、不带range请求:会先发起一个文件首字节range:0-0探测文件大小,再判断资源是否大于4M,如果大于按1M一个分片回源,如果小于,直接请求整个文件,响应200
优化点:针对大文件开启range回源
官网说明:https://cloud.tencent.com/document/product/228/7184
这里需要注意一点:开启了range回源如果多个源站文件的last_modify不统一,业界有两种处理方式:一、腾讯CDN会响应200然后 rst请求被重置,请求失败。 二、阿里CDN会认为缓存失效,重新回源拉取,命中率下降、回源带宽增加;
四、设置缓存时间
源站服务器可以针对于资源配置其缓存规则。当源站配置了以下response头其中一种时CDN将不会对该文件进行缓存:
Cache-Control:max-age=0
Cache-Control:no-cache
Cache-Control:no-store
Cache-Control:private
而且上述的response头在CDN缓存规则中优先级最高(高于CDN上的缓存配置),因此上述的这些响应头并不适合于配置于源站的静态资源的。
另外当CDN上没有配置缓存规则时,资源的缓存规则将按照源站的Cache-Control或者Expires头进行缓存(Cache-Control优先级高于Expires),因此建议客户设置合理的Cache-Control或Expires头。
CDN上是可以针对于目录或者后缀名设置缓存配置的。而在CDN和源站同时配置缓存规则时是会以CDN上的缓存规则优先的(除非源站设置了不允许缓存的规则),因此建议用户在CDN控制台中设置合理的缓存规则,避免走默认的缓存规则导致频繁回源。另外特别注意CDN控制台上配置的缓存时间为0秒时,就是CDN不缓存,透传回源。
优化点:设置合理的缓存时间
官网说明:https://cloud.tencent.com/document/product/228/41540
五、资源过冷,触发了淘汰机制
CDN节点作为所有使用CDN的用户公用的节点资源,因此CDN配置的缓存规则表示了该资源在CDN上的缓存最长时间,如果用户在CDN上的缓存资源的热度较低的话是有可能被提前踢出CDN节点的缓存的。因此可以理解为缓存按照热度属性采取末尾淘汰制,所谓热度就是该文件在该节点上被访问的频率,文件热度不够即被提前剔除。
优化点:
1、对于流量较低的域名可以提前定期将TOP URL预热到CDN节点上,避免影响业务使用。
2、建议用户加量观察。