提高命中率或者降低回源带宽,在CDN业务是最常见的问题。本文结合多年CDN实战经验,梳理总结如何提高业务缓存命中率。
1.命中率意味什么?
- 终端用户。命中率越高,意味的响应时间越短,下载资源速度越快。
- 业务方。命中率越高,回源带宽越低,成本越低。(源站带宽相对于CDN是5-7倍价格)
- CDN服务商。边缘节点命中率越高,中间回源带宽越低,成本越低。
2.命中率有哪些统计方法?
- 流量命中率(字节命中率):命中率={ (请求总流量-回源流量)/请求总流量 }
- 请求数命中率:命中率={ (用户总请求数-回源请求数)/用户总请求数 }
3.命中率有哪些优化套路?
1)实际业务模型
- 动态业务。同一个域名同时包含静态和动态业务,建议对业务进行拆分。腾讯云解决方案:静态业务使用CDN,动态业务使用DSA产品。
- 请求量较少。如果业务请求量较为分散,基于CDN节点缓存内容策略,缓存内容很容易被快速淘汰。具体详见之前学习系列:https://cloud.tencent.com/developer/article/1446659
- 请求量突增。这类业务带来回源带宽突增,对源站成本以及性能冲击较大。类似突增业务,在业务低谷期建议对资源做预热,来较低回源带宽
- 业务缓存头部。请求响应头部cathe_control存在no store或者no cache情况,该资源不会被缓存,会影响命中率,该类业务建议使用DSA产品。
2) 缓存配置
- 缓存时间配置是否合理?静态资源缓存时间较短,甚至缓存时间是0情况。腾讯云默认静态资源缓存30天。
- 缓存优先级是否合理?静态资源存在多条缓存策略,策略优先级策略理解有误导致。腾讯云缓存优先级策略是配置项列表底部优先级高于顶部优先级。
- 去参数缓存是否开启?业务URL对应的资源与参数本身无关,建议开启去参数缓存。如果该功能不开启,根据URL不同的参数,分别进行缓存,影响命中率。
- 多个加速域名能否共享缓存?多个加速域名相同URI对应的资源相同,可以配置共享缓存,提高命中率。共享缓存,顾名思义,多个域名相同的URI对应资源CDN节点只缓存一份,多个域名共享。解决域名不同URI资源相同场景下,CDN仅缓存一个域名资源,其他域名访问这个资源直接响应缓存内容,降低回源带宽。
- 高级缓存是否开启?高级缓存功能,用户请求响应的header里有cache-control,对应值是maxage情况。这类情况如果源站响应头部没有Mtime(last-modify-time), CDN节点响应默认添加mtime头部,10分钟变一次,这样判断资源过期,会频繁的回源拉取资源,增加回源带宽。
3)平台功能
- 合并回源。在一定时间内,多条相同的URL向同一个CDN节点请求新资源,CDN节点只回源一次拉取资源,提高命中率,降低回源带宽。主流CDN服务厂家都支持该功能。
- Range回源。常规一条URL请求,CDN节点没有缓存,透传该请求只回源一次拉取。为了提高响应速度,CDN节点这条URL,拆分成若干个range请求,并行回源。这里存在一个问题,每次range请求,都需要判断Mtime与之前面range请求是否一致,如果不一样就会reset重新请求,如果多个源站Mtime不一致或者更新频繁,会出现回源带宽突增情况。
4) 异常状态码
- 请求命中率来讲,如果命中率较低,可以查看异常状态码占比是否异常。
- 流量命中率来讲,该情况影响较小。