CDN缓存命中率低会导致源站压力大,静态资源访问效率低。您可以根据导致CDN缓存命中率低的具体原因,选择对应的优化策略来提高CDN的缓存命中率。
背景信息
CDN通过将静态资源缓存在CDN节点上实现资源访问加速。当客户端访问某资源时,如果CDN节点上已经缓存了该资源,用户请求会命中CDN节点上的缓存,直接从缓存中获取资源返回给用户,可避免通过较长的链路回源,提高资源的响应速度和降低源站的带宽压力。如果CDN缓存命中率低,会影响用户体验和增加源站的带宽压力。
CDN缓存命中率包括字节命中率和请求命中率:
- 字节命中率=CDN缓存命中响应的字节数÷CDN所有请求响应的字节数 说明 字节命中率越低,回源流量越大,源站的流出流量越大,源站的带宽资源以及其他的负载越大,因此回源流量代表了源站服务器接收到的负载压力,在业务使用中主要关心字节命中率。
- 请求命中率=CDN缓存命中的请求数÷CDN所有的请求数
查看CDN缓存命中率
查看CDN缓存命中率的方式如下:
- 方法一:通过控制台查看
- 方法二:调用API查看
- 资源监控功能对应的API
API 描述 DescribeDomainHitRateData 获取加速域名的字节命中率数据,支持获取最近90天的数据。 DescribeDomainReqHitRateData 获取加速域名的请求命中率数据,支持获取最近90天的数据。 - 实时监控功能对应的API
API 描述 DescribeDomainRealTimeByteHitRateData 获取加速域名1分钟粒度的字节命中率数据,支持查询7天内的数据。 DescribeDomainRealTimeReqHitRateData 获取加速域名1分钟粒度的请求命中率数据,支持查询7天内的数据。
- 资源监控功能对应的API
提高CDN缓存命中率
下表列出了影响CDN缓存命中率的因素和提高CDN缓存命中率的方法。
策略 | 影响因素与应用场景 | 配置方法 |
---|---|---|
业务高峰前预热热门资源 | 影响因素:运营大型活动或新版本安装包发布前,没有提前将资源预热到CDN节点,大量资源需要从源站获取,导致CDN缓存命中率低。 应用场景:
| 预热资源 |
合理配置缓存过期时间:
| 影响因素:
应用场景:用户在源站发布了静态资源,CDN节点没有将资源缓存下来,或者CDN节点上缓存的资源很快就失效了。 | 配置缓存过期时间 |
去除URL中问号后的参数缓存 | 影响因素:当URL请求中带有queryString或其他可变参数时,访问同一个资源的不同URL(URL携带的参数不同)会重新回源,导致CDN缓存命中率低。 应用场景:希望通过不同的URL(URL携带的参数不同),可以访问到同一个资源。 | 忽略参数 |
大文件设置分片回源策略 | 影响因素:用户下载安装包可能下载一半就停止下载,或者观看视频只看了一部分就停止观看,即用户只需要访问资源文件指定范围内的部分内容,但是CDN节点会向源站请求整个文件,从而使得CDN节点从源站下载的内容大于响应给用户的内容,导致缓存命中率低。 应用场景:用户下载应用安装包或者观看视频资源。 | 配置Range回源 |
其他命中率优化策略 | 除了以上几种常用的命中率优化措施以外,阿里云CDN还有其他的优化措施,这些措施可以根据不同的业务场景来配置,例如:中心302调度、边缘302调度、合并回源、共享缓存等。 | 由阿里云售后工程师在后台配置。 |
查看缓存命中状态日志
在CDN的请求日志中,记录了所有CDN请求的缓存命中状态。详细日志格式,请参见下载日志。
缓存命中状态字段说明:日志示例:
- HIT:表示命中缓存。
- MISS:表示未命中缓存。
说明 命中状态仅表示CDN L1节点的命中状态。例如,CDN L1节点未命中缓存,L2节点命中缓存,日志中仍显示MISS。
26/Jun/2019:10:38:19 +0800] 192.168.53.146 - 1542 "-" "GET http://example.aliyundoc.com/index.html" 200 191 2830 MISS "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://example.com/robot/)" "text/html"
您也可以调用DescribeCdnDomainLogs接口,获取加速域名的日志信息。