解锁CDN效率:如何提高CDN缓存命中率

EdgeOne-Product Team
15 分钟阅读
Mar 12, 2025

CDN(内容分发网络)缓存命中率,也称为CDN缓存命中比率,是衡量CDN向最终用户交付内容效率的关键指标。它表示直接从CDN缓存提供的请求百分比,而不是从源服务器获取的请求。缓存命中率直接影响客户体验,确保高命中率已成为CDN用户的核心诉求。在本文中,我们将讨论CDN缓存命中率的概念、影响因素和优化策略。

什么是缓存命中?

在典型的CDN访问路径中,角色通常包括:用户 -> 浏览器 -> CDN节点 -> 源服务器。浏览器和CDN节点都可以作为资源的缓存。

CDN Access Path示意图展示了 user, browser, CDN nodes当用户在浏览器中输入地址时,会发生以下步骤:

  1. 浏览器首先检查本地是否有符合条件且未过期的资源。如果找到,它将返回该资源给用户,而无需发起请求。
  2. 如果浏览器找到本地资源但无法确定其是否过期,它会向服务器发送缓存过期验证请求。如果服务器确认缓存尚未过期,它将返回304状态码,表示浏览器可以直接使用本地缓存资源。
  3. 如果服务器验证缓存已过期,则直接返回新资源并附带200状态码。浏览器根据其策略决定是否将新资源本地缓存,并响应用户。
  4. 如果服务器是CDN节点,在缓存验证过程中,如果发现没有本地资源,它会根据某些策略访问集群内的其他节点或向上游节点请求资源,直到达到源服务器。在将资源返回给用户的同时,每一层节点都会根据预设规则进行本地缓存。

通过上述访问策略,当后续用户访问相同资源时,他们可以直接访问本地或CDN节点上的缓存,而无需请求源服务器。

Content Delivery Network (CDN) process示意图,展示浏览器、CDN节点和源服务器之间的交互,以便用户高效获取资源缓存,减少对源服务器的请求,提高访问速度和性能。

什么是缓存命中率?

如果您熟悉CDN,您可能知道CDN的核心是节点缓存,通过在不同地理区域部署足够数量的节点来提供缓存服务。客户可以通过边缘节点直接访问缓存的资源,避免频繁访问源服务器以实现加速。

衡量缓存性能的主要指标是缓存命中率,包括流量命中率和请求命中率。

  • 流量命中率指的是在单位时间内请求响应中命中的字节总数除以总响应字节数。
  • 请求命中率指的是在单位时间内命中请求的数量除以总请求数量。

这两个指标从不同维度反映了缓存命中情况。缓存命中率越高,越能减少源服务器网络带宽的消耗,缓解源服务器的压力,降低用户访问延迟,加快响应时间。

常见的缓存头是什么?

CDN访问中的缓存策略主要通过HTTP头部实现。通过适当地设置不同的头部,我们可以控制CDN节点和浏览器对各种资源的缓存行为。

响应头

  • Cache-Control:控制CDN节点和浏览器对资源的缓存行为。常见值包括:no-cache、no-store、public、max-age=N。当max-age=0、no-cache、no-store或private时,CDN节点将禁用该资源的缓存行为。
  • Expires:指示资源的有效期。超过此时间后,资源需要标记为过期。
  • Last-Modified:指示资源的最后修改时间。CDN节点在很大程度上依赖于此头部来确定缓存的一致性。
  • ETag:指示资源的唯一标识符。生成和验证规则由服务器确定。
  • Age:资源在节点上的缓存时间。

使用浏览器的调试模式,我们捕获一个响应包来说明上述头部的含义:

上述资源的响应头揭示了很多信息:

  • Age:表示该资源在节点上缓存了518992秒;
  • Cache-Control:通知缓存服务器和浏览器该资源的最大缓存时间为2592000;
  • ETag:表示该资源的唯一标识符为5e7c3f77-a89;
  • Expires:表示该资源在2021-07-03 06:01:19之后过期;
  • Last-Modified:表示该资源的最后修改时间为2020-03-26 05:36:55。

请求头

  • If-Modified-Since:用于与服务器验证缓存版本。如果该资源在此时间之后已更新,服务器需要返回新资源;否则返回304;
  • If-None-Match:与ETag一起使用,通知服务器浏览器缓存的资源标识符。如果有变化,服务器需要返回新资源;否则返回304。

导致低缓存命中率的原因是什么?

当我们发现网站访问速度慢或源服务器回源带宽较大时,排除网站流量增加后,网站的低缓存命中率可能触发了回源行为。在这种情况下,我们可以通过以下方法进行故障排查。

  1. 首先,登录到Tencent EdgeOne 控制台,查看数据洞察 - 分析上的流量命中详情。
  2. 检查带宽和流量趋势曲线,以确定是否流量的突然增加导致了命中率的下降。
  3. 查看流量和请求详情页上的TOP URL统计,检查节点缓存配置规则,以确定TOP资源的访问是否能够命中相应的缓存策略。

如果观察到的命中率下降与预期不符,可以检查域名配置,以确定缓存策略是否合理:

1. 源服务器的缓存头是否配置正确?
如果节点缓存策略配置为遵循源服务器,而源服务器强制将Cache-Control头设置为不缓存资源,则会导致CDN节点缓存功能失败,降低命中率。

2. 源服务器上是否有大量新资源上线?
如果源服务器上有许多新资源,将触发更多请求回源,从而降低流量命中率。

3. 源服务器是否存在异常?
如果源服务器出现故障,导致资源访问中出现大量4xx和5xx错误,每个请求将触发回源行为,降低命中率。

4. 缓存过期时间是否配置正确?
如果CDN缓存时间设置得太短,CDN节点将频繁过期,导致频繁回源行为,从而降低命中率。同时,资源缓存策略具有优先级,实际的命中策略可能与预期不符。

5. 是否启用了过滤参数功能?
如果域名的过滤参数缓存功能被禁用,则缓存将根据完整路径匹配文件。当相同资源携带不同请求参数时,无法命中相同的缓存,从而降低命中率。

如何提高CDN缓存命中率?

在了解了缓存命中率下降的原因后,我们可以通过以下方式提高资源的缓存命中率。在腾讯EdgeOne中,您可以使用强大的规则引擎为域名配置不同的规则,也可以通过全局设置定义全站的全局规则:

设置节点缓存时间

节点缓存时间是指为资源在CDN服务节点上缓存配置的时间。该配置直接影响腾讯EdgeOne上的缓存命中率统计。在站点加速中,点击规则引擎,创建新规则,找到EdgeOne 节点缓存TTL。根据需要为静态和动态资源配置缓存时间。

设置浏览器缓存时间

浏览器缓存时间是指为资源在浏览器中本地缓存配置的时间。尽管该配置不会提高腾讯EdgeOne控制台上的缓存命中率统计,但实际上改善了用户访问的实际命中率。在站点加速页面,单击规则引擎,找到浏览器缓存TTL,根据需要为静态和动态资源配置缓存时间。

合理使用刷新功能

控制无效的刷新行为,特别是目录刷新。对于访问量大且变更不频繁的资源,无需在下一个变更周期之前提交刷新任务。目录刷新将导致大量资源访问失败,触发回源,因此尽量减少使用。如果必须使用,请刷新影响较小且层级较长的目录。

提前预加载

在新版本上线或资源变更之前,提前提取热点资源,并使用CDN预加载功能将资源缓存到节点。尽可能增加CDN访问量,以避免缓存被清除。

腾讯EdgeOne缓存策略

腾讯EdgeOne在改善基本缓存能力的基础上,进一步优化缓存策略,提高访问命中率。主要特点包括:

海量资源储备

腾讯EdgeOne是腾讯推出的全球边缘安全加速平台。凭借2800多个全球边缘节点和20多年安全技术积累,为企业提供集成的边缘服务,包括安全保护、性能加速和相关技术支持。该平台整合了包括DNS解析、第四层代理、站点加速、智能加速、DDoS保护、Web保护、Bot保护和负载均衡等十多项功能。致力于确保企业平台和用户体验的安全性与稳定性,保障全球企业数字化转型及海外扩展。

多级缓存架构

腾讯EdgeOne默认提供增加中间源的架构,以提高缓存命中率。边缘层提供广泛覆盖,中间源则提供更高的存储能力。只要任何CDN节点命中并响应请求,就被视为缓存命中。如有必要,可以配置三层源以进一步增强缓存能力。

合并 + 集群源

在同一层节点上,腾讯EdgeOne还提供合并源和集群内部源功能。在一定时间内,对相同资源的请求合并为一个源请求,并在内部集群内对相同资源进行访问调度。这将合并源请求,提高资源命中率。

底层块存储

在下载大文件时,客户可能不会请求整个文件。腾讯EdgeOne通过在底层将其优化为分片块存储,按需拉取文件,避免在进行片段请求时触发源端检索整个文档。同时,对于任何字节区间的范围请求,节点将从源端检索覆盖请求字节区间的完整片段。后续对同一片段其他字节的请求可以直接命中缓存,从而优化存储和源检索效率。

灵活的缓存规则配置

除了设置常规加速节点缓存外,腾讯EdgeOne控制台还提供多种与缓存相关的功能,如头部缓存、状态码缓存、浏览器缓存和缓存配置。用户可以在控制台自行定义资源缓存规则。

结论

优化CDN缓存命中率对于提高性能、降低成本、增强可扩展性以及提高Web应用程序的整体可靠性和安全性至关重要。

腾讯EdgeOne先进的缓存能力、全球覆盖、对动态内容的支持、可定制政策、实时监控和增强的安全性,使其成为优化CDN缓存和提供卓越内容性能的强大解决方案。如果您有兴趣亲自体验这些好处,请随时联系我们,了解更多关于腾讯EdgeOne及其功能的信息。您也可以点击这里开始免费试用。