一文帮你了解 CDN

49 阅读8分钟

CDN

内容分发网络(content delivery network)是一种分布式计算和网络服务系统,其主要目标是通过在全球范围内分布的服务器群集(通常称为边缘服务器或边缘节点)来提高网络内容的传输性能、可用性和安全性。CDN通过在离用户更近的位置缓存和交付内容,减少了数据传输的时延和网络拥塞,从而改善用户体验。

边缘CDN

边缘CDN(Edge CDN)是CDN(内容交付网络)的一种特殊形式, 边缘CDN通过在全球范围内分布的边缘节点(也称为边缘服务器)来加速内容交付。这些边缘节点位于互联网服务提供商(ISP)网络中,接近终端用户。每个边缘节点都存储网站或应用程序的一部分静态资源,并能够处理用户请求。

虚拟CDN

Virtual CDN 这一术语并没有一个标准的定义,但它通常指的是一种基于虚拟化技术的内容交付网络(CDN)解决方案。虚拟CDN的概念涉及使用利用云计算资源来部署和管理CDN节点。这样的设计使得CDN能够更灵活地扩展和调整,根据需求动态分配资源。,而不是传统的硬件设备和物理网络基础设施。

CDN 可以分发哪些内容

静态内容 静态内容是不会因用户而异的网站数据。网站标题图像、徽标和字体样式对于所有用户都保持不变,并且企业不会经常更改它们。静态数据无需修改、处理或生成,非常适合存储在 CDN 上。

动态内容 诸如社交媒体新闻推送、天气报告、登录状态和聊天消息等动态内容因网站用户而异。这些数据会根据用户的位置、登录时间或用户首选项而变化,并且网站必须为每个用户和每次用户交互生成数据。

CDN 工作原理

多个地理位置建立一个入网点(PoP)或一组边缘服务器来工作。分布在不同地理位置的网络基于缓存、动态加速、边缘逻辑计算的原则来工作。

缓存

来自边缘用户的网络请求时,首次会通过边缘节点中转到原服务器,根据缓存策略,将资源配置在该服务节点,下次再请求时,直接由节点服务器返回资源,无需再到达原服务器。

缓存命中

是否命中cdn缓存,通常会采用 x-cache 或 x-cache-lookup 字段来描述:hit/Miss

缓存策略

CDN 节点缓存为服务端缓存,各服务商间的实现有所不同,但都遵循 HTTP 协议,一般通过响应头信息 expires 及 cache-control 中 max-age 字段来控制其缓存时间。需要注意,当源站服务器响应头包含 cache-control 时,CDN 缓存时长遵循源站缓存规则。

缓存流程

  • 浏览器第一次向CDN边缘节点通信请求资源,服务器在响应头返回资源携带缓存控制参数,Expires/Cache-Control 字段 及 Last-Modified/ETag 字段
  • 再次请求,查看是否命中强缓存。
  • 否则访问cdn边缘节点,该节点是否命中 X-Cache/X-Cache-Lookup。
  • 否则请求cdn中心节点,如若资源缓存,则将资源返回给边缘节点,否则回源到服务器。
  • CDN 中心节点向源站发起回源校验请求,请求头信息附加 If-Modified-Since/If-None-Match 字段,源站服务器根据前后 Last-Modified/ETag 字段进行对比,倘若一致,说明资源未进行修改,返回 304 ,CDN 节点会保留当前的缓存,并将该文件设置为未过期,而且在文件缓存时间到期前不会再次回源校验;
  • 倘若不一致,说明资源已经修改,返回 200 ,CDN 节点会删除旧的缓存内容,从源服务器上同步新的资源并缓存。

回源

a. 当资源未命中 CDN 缓存,即 HTTP 响应头信息中 x-cache 或 x-cache-lookup 字段为 MISS 时,资源会发起回源请求。回源率越高,加速效果越不明显 b. CDN 控制台配置回源地址及回源 HOST ,否则会导致回源失败。两者区别如下:

  • 回源地址指预先在 CDN 服务商处配置的源站服务器 IP 或 域名,用于无缓存资源、缓存过期或非缓存资源时,回溯至源站获取资源
  • 回源 HOST 指当源站服务器存在众多站点时,由回源 HOST 决定访问源站服务器上具体站点。需要注意,当回源 HOST 未配置时,默认会将其加速域名( 以上述 cdn-static.snowball.site 为例 )作为 回源 HOST;当回源 HOST 配置不正确时,会导致回源失败
  • 回源host:指CDN回源请求头中携带的HOST字段值,决定了回源请求访问到该IP地址上的具体站点。外链

cdn节点资源刷新操作

当源站服务器更新后,如果 CDN 节点上资源未完全同步,先前缓存还未过期,那访问到的资源依旧是过期资源,此时需要手动刷新 CDN 资源,分为如下两种方式:

主动刷新:指将源站资源更新后,将资源从源站分发至 CDN 各节点的缓存中这个过程,这种主动分发技术称为 PUSH( 分发 )。CDN 服务商通常会提供 URL 刷新、目录刷新及 URL 预热三个可选项: a. URL刷新(少量):强制将 CDN 缓存节点上的指定资源文件设置为过期,致使其回源拉取最新资源。 b. 目录刷新(批量):强制将 CDN 缓存节点上的指定文件目录中的文件设置为过期,致使其回源拉取最新资源。 c. URL预热(提前缓存):将指定资源文件提前缓存到全网 CDN 节点,当用户请求 CDN 节点时,无需回源直接获取资源。这个过程是怎样的? 1. 运营活动 运营一个大型活动时,提前将活动页涉及到的静态资源预热至CDN节点,活动开始后用户访问的所有静态资源均已缓存至CDN加速节点,由加速节点直接响应。

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

被动刷新: a. 被动刷新是指当资源在 CDN 节点缓存中过期后,该 CDN 节点服务器从源站或其他节点拉取资源这个过程,这种被动分发技术称为 PULL( 回源 )。整个过程由 CDN 自动完成,无需手动操作。

注意:从更新效率来看,通常会选择主动刷新 CDN 缓存操作,全网刷新生效时长为 10 分钟左右

缓存时间的字段如下:

  • x-swift-savetime: 资源在cdn上缓存的时间
  • x-swift-cachetime: cdn默认缓存时间,以秒为单位
  • age: 资源在cdn上已缓存的时间,以秒为单位

动态加速

动态加速是指通过在 Web 应用程序和客户端之间设置中间 CDN 服务器,从而加快对动态 Web 内容请求的服务器响应。

缓存不适用于动态 Web 内容,因为内容因用户请求而异。CDN 服务器必须针对每个动态请求重新连接原始服务器,但它们通过优化自己与原始服务器之间的连接加速了该过程。

如果客户端通过互联网直接向 Web 服务器发送动态请求,则该请求可能会由于网络延迟而丢失或延迟。此外,可能还需要花费时间打开和关闭连接以进行安全验证。另一方面,如果附近的 CDN 服务器将请求转发到原始服务器,它们就已经建立了一个持续的、受信任的连接。例如,以下功能可以进一步优化它们之间的连接:

  • 边缘节点部署
  • 智能路由算法
  • 地理位置靠近原始服务器
  • 能够处理客户端请求,缩减其大小
  • 边缘计算: 一些CDN提供商采用边缘计算技术,允许在边缘节点上运行一些动态生成内容所需的计算任务。这可以减少对源服务器的请求,提高响应速度。

参考链接

  1. 大漠CDN缓存
  2. how is the cdn work