CDN系列学习文章(八)——如何提高命中率

2019-06-22 12:52:37 浏览数 (2)

提高命中率或者降低回源带宽,在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) 异常状态码

  • 请求命中率来讲,如果命中率较低,可以查看异常状态码占比是否异常。
  • 流量命中率来讲,该情况影响较小。

0 人点赞