跳至主要內容

12. CDN


12. CDN

内容分发网络(Content Delivery Network,简称 CDN)是一种分布式的服务器网络,旨在提高内容传输的效率、可用性和可靠性。CDN 通过在全球范围内分布的节点缓存内容,将数据传递到离用户最近的节点,从而加速用户访问并提升稳定性。

CDN 的工作原理

CDN 的核心机制在客户端(用户)与服务器(源站)之间充当中介,将静态资源从源服务器分发到全球的边缘节点,通过缓存加速资源访问。用户请求时,CDN 会根据用户的位置、服务器负载等因素选择最佳节点提供内容。这种方式显著降低了延迟,并减少了源站的负载。

交互流程

  1. 内容缓存:静态内容(如 HTML 页面、CSS 文件、图片和视频)会预先缓存在边缘节点。

  2. 智能路由:利用 DNS 或 HTTP 重定向技术,将用户请求引导到最优的边缘服务器,而不是直接到达源站。

  3. CDN 边缘节点处理请求:CDN 检查本地缓存,判断是否存在对应资源:

    • 缓存命中(Cache Hit):所需资源已在 CDN 节点缓存,则直接返回缓存内容。
    • 缓存未命中(Cache Miss):边缘节点未缓存所需内容时,它会向源服务器请求(回源机制),并将获取的内容缓存以备后续使用。
  4. 源站响应:如果 CDN 向源站请求资源,源站会根据 HTTP Header 指定的规则返回数据,并附带缓存策略。

  5. 缓存更新与传递:CDN 根据源站返回的 HTTP Header 决定如何缓存、缓存多长时间,以及是否需要立即更新缓存。

关键 HTTP Header

CDN 判断是否缓存内容以及缓存策略的核心依据是 HTTP 响应头中的特定字段:

  1. Cache-Control

    • 定义缓存行为的主要字段。
    • 常见指令:
      • public:内容可被任何缓存节点(包括 CDN 和浏览器)存储。
      • private:内容仅供客户端缓存,CDN 不缓存。
      • no-cache:允许缓存但需每次向源站验证。
      • max-age=seconds:缓存内容的最长有效时间。
      • must-revalidate:缓存到期后必须向源站验证。
  2. Expires

    • 指定内容过期时间的绝对值,优先级低于 Cache-Control
  3. ETag

    • 内容唯一标识符,用于验证缓存内容是否已更改。
    • CDN 可通过比对 ETag 判断是否需要重新缓存。
  4. Last-Modified

    • 内容最后修改时间。
    • If-Modified-Since 结合使用,当内容未更改时,返回 304 状态码,无需重新下载。
  5. Vary

    • 决定缓存内容的多样化。
    • Vary: User-Agent 表示根据用户代理(浏览器类型)存储不同的版本。

缓存交互示例

以下是一次完整的 CDN 缓存交互流程示例:

  1. 首次访问:

    • 客户端请求资源,CDN 缓存未命中。
    • CDN 向源站发起请求,源站返回资源并附加 Cache-Control: max-age=3600
    • CDN 缓存资源,返回给客户端。
  2. 缓存命中:

    • max-age 期限内,客户端请求直接由 CDN 返回缓存内容,无需访问源站。
  3. 缓存验证: 当缓存到期(超过 max-age)或 Cache-Control: no-cache 指定时:

    • CDN 使用 If-None-Match(基于 ETag)或 If-Modified-Since(基于修改时间)向源站验证。
    • 如果内容未更改,源站返回 304 状态码;若已更改,返回新内容并更新缓存。

CDN 的优势

  1. 提高访问速度

CDN 通过减少服务器到用户的物理距离和优化网络路径,显著提升内容加载速度。例如:

  • 静态资源从最近的节点加载。
  • 使用 HTTP/2、多路复用和压缩技术进一步优化传输。
  1. 减轻服务器压力

通过缓存技术,CDN 能将大部分静态内容请求分流到边缘节点,从而降低源服务器的负载。通过在多个服务器之间分配流量,防止单点过载,确保高并发访问时的系统稳定性。

  1. 提升可靠性和可用性

分布式架构能防止单点故障。当某个节点故障时,CDN 可自动将流量切换到其他健康节点,保证服务不中断。

  1. 抗流量攻击

CDN 提供的分布式防护能够有效抵御 DDoS 攻击。它们通过流量分散和智能流量清洗机制保护源服务器。提供额外的安全层,保护源站点不被直接暴露。

CDN 的组件

  1. 边缘节点(Edge):负责缓存并提供内容服务。
  2. 控制中心:管理内容分发策略和节点状态。
  3. 监控系统:实时监控流量、节点健康状况及性能。
  4. 源站(Origin):内容的原始存储地,当缓存过期或未命中时提供内容。