Loading Light/Dark Toggle
CDN 如何工作?边缘缓存与内容新鲜度

CDN 是如何工作的?

Scrapeless 代理允许应用程序为区域性网页请求选择受支持的出口位置。

CDN(内容分发网络)是一组分布式服务器,它通过更接近用户或与用户连接更佳的网络位置来传递内容。CDN 通常会缓存符合条件的响应,并将其他请求转发到源站服务。它可以减少源站的重复工作,但其行为取决于路由和缓存配置。

对于数据收集者来说,实际后果是:相同的 URL 并不一定意味着来自源站的最新响应。一次请求可能会收到一个已存储的表述、一个新获取的表述,或者一个会随地区和请求头而变化的响应。理解这些路径有助于解释为何观测结果会有所不同。

起源与边缘是什么?

源站是位于 CDN 背后的源服务,而边缘节点则在 CDN 的传输网络中处理请求。 内容分发网络模型 在多个位置之间分发交付,而不是要求每个客户端都与同一个源位置进行通信。

边缘节点可以从存储中提供响应、转发请求、终止 TLS,或应用已配置的逻辑。并非每个 CDN 在每个请求上都执行所有功能。因此,一个有用的解释应将网络的能力与在特定主机名上启用的策略区分开来。

源站可以是一个 Web 应用、对象存储或其他服务端点。它本身也可能使用负载均衡和多台服务器。CDN 和源站是内容传输路径中的逻辑角色;它们并不意味着整个网站只有一台源机器和一个缓存。

请求如何到达 CDN?

请求通过站点配置的路由到达 CDN,这个过程可能涉及 DNS 和网络路由决策。主机名会引导客户端指向一个 CDN 端点,网络则将连接传输到一个合适的分发位置。所选的位置不一定是地理位置上最近的机房。

网络拓扑、服务策略和当前路由都会影响路径。因此,位于一个国家的客户端和位于另一个国家的代理出口可能会看到不同的传输行为。结果应在应用程序连接层面进行测量,而不是根据采集器的物理办公地点来推断。

边缘节点接收到请求后,会对主机名、路径、方法、标头以及适用的配置进行评估。即使属于同一网站,静态资源和已认证的账户页面也可以遵循不同的处理规则。仅仅存在 CDN 并不能决定某个特定响应是否可被缓存。

缓存命中或未命中时会发生什么?

当缓存中存在其规则允许提供的合适已存响应时,就会发生一次命中(cache hit)。当请求所需的内容无法由任何符合条件的已存响应满足时,就会发生一次未命中(miss)。此时边缘节点通常会从上游服务获取内容,上游服务可能是源站,也可能是另一层缓存。

  1. 边缘节点根据请求和配置的规则派生出一个缓存键。
  2. 它会查找与该键和相关变体相匹配的已存储响应。
  3. 它会评估新鲜度以及是否需要联系上游服务的任何要求。
  4. 它提供符合条件的响应或获取适当的上游响应。
  5. 仅当响应和缓存策略允许存储时,它才会存储新的响应。

未命中并不一定意味着 CDN 出现故障。新内容、已过期的条目、刻意不缓存的页面以及不常见的变体,都可能需要向上游请求。只有在为相关用户和请求提供的内容是正确的情况下,高命中率才有意义。

不同的边缘位置可能存储不同的对象。在某个位置成功获取并不能证明每个位置都已经存有相同的缓存响应。内容分发系统可能会使用多个缓存层级,因此具体路径取决于服务提供商和站点配置。

缓存键由什么决定?

缓存键决定了哪些请求可以复用同一个已存储的表述。它通常包含目标资源的标识,并且可以通过标准语义和特定站点配置,将额外的请求特征纳入其中。

The HTTP Vary 字段 标识影响表示选择的请求字段。如果内容因可接受的编码或语言而不同,那么在选择已存储的响应时,这些维度可能很重要。忽略重要变体的缓存可能会返回错误的表示形式。

查询字符串需要一项明确的策略。一些应用程序使用它们来标识不同的资源,而另一些则将其用于跟踪。如果将每个查询参数都视为无关紧要,可能会把原本不同的内容合并在一起。如果将每个参数都视为唯一键,又可能会使缓存碎片化并降低复用率。

对于一个假设的地区产品页面,需要决定货币和市场信息是通过 URL、页眉,还是通过 Cookie 来表达。这个决定会同时影响应用程序和缓存配置。缓存键应当反映表示形式的真实身份,而不是仅根据路径进行推测。

新鲜度、验证和存储是不同的

新鲜度决定了存储的响应是否可以在不检查上游的情况下被重用,而验证则检查该存储响应是否仍然适用。存储策略则决定该响应是否可以被保存。 HTTP 缓存规则 区分这些决策。

带有 no-cache 的响应仍然可以被存储,但在适用规则下成功验证之前不得被重用。带有 no-store 的响应指示缓存不要存储它。私有响应在通常未加限定的情况下被限制存入共享缓存。不能将这些指令视为用于禁用所有缓存的可互换拼写。

诸如实体标签之类的验证器可以让上游服务器确认某个已存储的表述仍然可用。条件请求可以在表述未发生变化时避免再次传输完整消息体。验证仍然需要与上游进行检查;这与立即提供新鲜的已存储响应是不同的。

Age 字段描述的是响应在缓存和相关传输路径中驻留的大致时间估计。它不是底层业务事实本身的“年龄”。即使响应是最近生成的,产品价格也可能已经数天未发生变化;或者在缓存的响应被创建之后,源头处的价格可能已经发生变动。

内容更新如何到达边缘节点?

内容更新通过过期、重新验证、显式失效或新的资源标识传递给用户。适用哪种机制取决于网站的部署方式和缓存策略。已发布的源站变更并不自动意味着每个已存储的边缘响应都已经被移除。

带版本号的资产 URL 为已更改的文件提供了清晰的标识。当一次部署指向一个新的文件名时,缓存可以保留旧对象,而不会将其与新对象混淆。这种方法对于那些在同一 URL 下内容应保持稳定的资产非常有用。

经常变更的文档需要不同的时效性策略。即使同样是通过 HTML 提供,公共公告页面和账户余额页面的需求也不同。缓存的存活时间应当与内容可接受的陈旧程度以及该表示形式的隐私属性相匹配。

在调查一次更新时,将 URL、响应头和正文版本一起进行比较。cache-status 头可以作为有用的证据,但其字段名称和解释因提供方而异。避免将某个厂商的头字段用语视为通用的 HTTP 标准。

TLS 终止会带来哪些变化?

终止 TLS 的 CDN 会解密客户端连接,并可能与源站建立单独的安全连接。 TLS 连接模型 分别适用于每个安全连接。

边缘节点需要访问 HTTP 请求才能应用内容感知路由和缓存。它与源站之间的连接有单独的信任和传输设置。公共主机名上的有效证书本身并不能验证面向源站连接的配置。

对于采集器来说,公共证书是在客户端的信任规则下,用于验证预期端点的身份。它并不能确定响应主体是否来自缓存、是由哪个内部服务生成的,或页面是否包含所需的记录。这些问题需要通过对响应和内容进行检查来解决。

为什么区域检查会产生不同的内容

区域检查可能会有所不同,因为网站和交付系统接收到的请求上下文不同。出口位置、解析器行为、语言头信息以及存储的会话偏好都可能影响所观察到的呈现结果。在将差异描述为 CDN 不一致之前,应先对其进行调查。

The 无抓取代理位置设置 支持选择可用的出口位置。在一次对比中保持所选地理位置稳定,并在观测结果中记录预期的市场。网关的区域并不会自动成为目的地所使用的出口区域。

无抓取代理解决方案 可以为这些检查提供网络视角,而你的应用程序负责内容验证。相关的 云代理架构 文章解释了中介角色。请参阅 无抓取定价 在估算区域资产和页面检查的带宽时。

有用的观测记录应包括请求的 URL、最终 URL、采集上下文、响应时间,以及在适当情况下的内容标识符或哈希值。哈希证明的是被比较字节的相等性,而不是用户体验的相等性;动态脚本仍然可能从相似的初始文档中生成不同的渲染行为。

如何解读 CDN 症状

通过将连接性、缓存行为和内容正确性分开来理解 CDN 的症状。如果某个资源能够加载但页面无法加载,比较它们的策略和上游服务。如果响应是陈旧的,在更改采集客户端之前,先检查新鲜度和验证的证据。

快速返回的响应可能是在边缘存储或生成的错误页面。较慢返回的响应可能仍然是正确的,并且是刚从源站获取的。仅凭延迟无法对结果进行分类。请使用应用程序所需的字段和页面标记。

同样,成功通过 CDN 交付某个资源并不能证明经过认证的应用视图能够正确渲染。该资源可能是公开的,而视图则需要凭证、脚本和其他依赖项。当真实需求是如此时,应验证完整的面向用户的操作。

结论

CDN 根据显式缓存规则路由请求并复用符合条件的内容。在解释响应之前,先理解缓存键、新鲜度策略以及 TLS 边界。对于区域性数据处理,请保留采集上下文,并以返回的表示结果来衡量成功,而不仅仅是传输速度。

跨区域检查内容

选择受支持的代理出口位置,并比较返回的页面以及其缓存和请求上下文。

今天注册即可获得 5 美元的免费额度 — 无需信用卡.

领取你的 $5 赠金 →

常见问题

CDN 会缓存每一个页面吗?

CDN 不一定会缓存每一个页面。存储和复用取决于请求属性、响应指令以及站点配置的规则。

no-cache 会阻止存储吗?

no-cache 指令本身并不禁止存储。它要求在根据适用的 HTTP 缓存规则重新使用之前进行验证,而 no-store 则直接针对存储问题。

边缘服务器在地理位置上一定是离用户最近的服务器吗?

所选的边缘节点在地理位置上并不总是离用户最近的服务器。网络路由和交付策略会影响由哪个位置来处理连接。

缓存命中是否意味着内容是最新的?

缓存命中表示响应是从一个符合条件的已存储表示中提供的。它是否满足业务对新鲜度的要求,取决于缓存策略以及内容的更新行为。

代理是否可以帮助检查区域性的 CDN 行为?

代理可以为区域性检查提供选定的网络视角。需要对请求头、Cookie 和请求资源进行控制,这样内容差异才能在上下文中被正确理解。

参考资料