提高CDN缓存命中率

更新时间:
复制 MD 格式

CDN缓存命中率低会导致源站压力大,静态资源访问效率低。您可以根据导致CDN缓存命中率低的具体原因,选择对应的优化策略来提高CDN的缓存命中率。

背景信息

CDN通过将静态资源缓存在CDN节点上实现资源访问加速。当客户端访问某资源时,如果CDN节点上已经缓存了该资源,用户请求会命中CDN节点上的缓存,直接从缓存中获取资源返回给用户,可避免通过较长的链路回源,提高资源的响应速度和降低源站的带宽压力。如果CDN缓存命中率低,会影响用户体验和增加源站的带宽压力。

CDN缓存字节命中率:

  • 字节命中率=(L1的边缘节点响应流量-回源的边缘节点响应流量)/L1的边缘节点响应流量

    说明

    字节命中率越低,回源流量越大,源站的流出流量越大,源站的带宽资源以及其他的负载越大,因此回源流量代表了源站服务器接收到的负载压力,在业务使用中主要关心字节命中率。

  • 请求命中率=CDN缓存命中的请求数÷CDN所有的请求数

    重要

    range分片回源情况下,命中率指标建议参考字节命中率。

查看CDN缓存命中率

方式一:通过控制台查看

CDN控制台提供的缓存命中率监控为字节命中率,详细信息如下:

  • 通过资源监控功能查询

    可查询数据的时间范围较大,适合查看较长周期(例如30天)内的命中率情况。时间粒度为5分钟的情况下,数据延迟15分钟左右。详细信息,请参见资源监控命中率

  • 通过实时监控功能查询

    可查询数据的时间范围较小,适合查看较短周期(例如1小时)内的实时命中率情况。时间粒度为1分钟的情况下,数据延迟3分钟左右。详细信息,请参见实时监控质量监控

方式二:调用API查看

提高CDN缓存命中率

下表列出了影响CDN缓存命中率的因素和提高CDN缓存命中率的方法。

策略

影响因素与应用场景

配置方法

业务高峰前预热热门资源

影响因素:运营大型活动或新版本安装包发布前,没有提前将资源预热到CDN节点,大量资源需要从源站获取,导致CDN缓存命中率低。

应用场景:

  • 运营活动

    运营一个大型活动时,提前将活动页涉及到的静态资源预热至CDN节点,活动开始后用户访问的所有静态资源均已缓存至CDN加速节点,由加速节点直接响应。

  • 安装包发布

    新版本安装包或升级包发布前,提前将资源预热至CDN加速节点,产品正式上线后,海量用户的下载请求将直接由CDN加速节点响应,提升下载速度,大幅度降低源站压力,提升用户体验。

刷新和预热资源

合理配置缓存过期时间:

  • 不常更新的静态文件(例如,图片类型、应用下载类型等),建议设置1个月以上。

  • 频繁更新的静态文件(例如,JS、CSS等),根据实际业务情况设置。

  • 动态文件(例如,PHP、JSP、ASP等),建议设置为0s,即不缓存。

影响因素:

  • CDN上未配置缓存策略,所有用户请求都需要回源站。

  • CDN上配置的缓存过期时间过短,缓存资源频繁过期,导致缓存命中率低。

应用场景:用户在源站发布了静态资源,CDN节点没有将资源缓存下来,或者CDN节点上缓存的资源很快就失效了。

配置CDN缓存过期时间

去除URL中问号后的参数缓存

影响因素:当URL请求中带有queryString或其他可变参数时,访问同一个资源的不同URL(URL携带的参数不同)会重新回源,导致CDN缓存命中率低。

应用场景:希望通过不同的URL(URL携带的参数不同),可以访问到同一个资源。

忽略参数

大文件设置分片回源策略

影响因素:用户下载安装包可能下载一半就停止下载,或者观看视频只看了一部分就停止观看,即用户只需要访问资源文件指定范围内的部分内容,但是CDN节点会向源站请求整个文件,从而使得CDN节点从源站下载的内容大于响应给用户的内容,导致缓存命中率低。

应用场景:用户下载应用安装包或者观看视频资源。

配置Range回源

处理源站不缓存标头

影响因素:源站返回了不缓存的响应头(如 Cache-Control: max-age=0、Cache-Control: no-cache、Cache-Control: private 等),CDN 会遵循源站指示不对该资源进行缓存,导致所有请求都回源到源站,缓存命中率降低。典型场景:源站为静态文件(图片、JS、CSS 等)配置了 Cache-Control: max-age=0 或 Cache-Control: no-cache 响应头,导致 CDN 节点无法缓存这些静态资源。

方法一(推荐):修改源站服务器配置,去掉静态资源响应头中的 Cache-Control: max-age=0 或 Cache-Control: no-cache 等不缓存标头,为静态资源配置合理的缓存时长(如 Cache-Control: max-age=2592000)。

方法二:在**域名管理**页面,单击目标加速域名,进入**缓存配置**页签,在**缓存过期时间****添加**缓存规则,开启**忽略源站不缓存标头**选项。开启后,CDN 将忽略源站返回的不缓存标头,按照 CDN 自身配置的缓存策略进行缓存。

说明

「忽略源站不缓存标头」功能开启后,CDN 将会忽略源站响应的不缓存标头(例如 Cache-Control: no-cache 等),按照您在 CDN 控制台配置的缓存过期时间规则进行缓存。该选项在缓存过期时间配置弹窗中与「优选遵循源站缓存策略」「客户端跟随CDN缓存策略」「强制内容重新验证」等选项并列。过期时间最多可设置为 3 年。

说明

为进一步提升缓存命中率,建议在**回源配置**中将 Range 回源设置为「跟随客户端 Range 请求」,避免全量回源影响命中率。

其他命中率优化策略

除了以上几种常用的命中率优化措施以外,阿里云CDN还有其他的优化措施,这些措施可以根据不同的业务场景来配置,例如:中心302调度、边缘302调度、合并回源、共享缓存等。其中,**共享缓存**功能允许同账号下的多个加速域名共用 CDN 节点上的缓存资源。当您有多个域名需要同名的 JS/CSS 文件且各源站内容完全一致时,可通过共享缓存功能让这些域名共用同一份缓存,从而提升缓存命中率。新增网站时,只需确保其资源路径与现有加速域名的资源结构对齐,无需重复配置 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"

您也可以调用查询离线日志下载地址接口,获取加速域名的日志信息。