Web Cache & CDN(Web 缓存与内容分发网络)

Definition

Web Cache(Web 缓存/代理)CDN(Content Distribution Network) 是应用层与网络边缘用于加速 Web 内容交付、降低链路拥堵与源服务器负载的分布式缓存基础设施。

它规定 / 它负责:

  • Web Cache:代表源服务器(Origin Server)响应客户端请求,通过就近存储与条件 GET 校验机制减少重复网络传输。
  • CDN:通过在多个网络位置部署边缘节点服务器(PoPs),结合 DNS、Anycast 或其他调度技术,将大吞吐量内容(如视频流媒体)分发到较接近用户或网络条件较合适的边缘位置。

简单理解:

Web 缓存解决“局部重复请求的快取与脏数据校验”,CDN 解决“全球海量并发与跨网低时延交付”。


核心内容

1. Web 缓存 / 代理 (Web Cache & Proxy)

Web 缓存(通常部署于机构网或 ISP 接入网边缘)的核心价值:

  1. 降低响应时延:客户端从本地/局域网内的 Web 缓存获取数据,免去跨公网传输时延。
  2. 缓解接入链路拥堵:减少机构接入网到 Internet 骨干网的比特流量,降低流量强度 ,预防丢包与高排队时延。

2. 条件 GET 校验机制 (Conditional GET)

为了解决缓存副本过期与源服务器内容修改(脏数据)的问题,HTTP 提供了条件 GET 校验机制:

flowchart TD
    Client["客户端 (Client)"] -- "(1) 发起 HTTP GET 请求" --> Cache["Web 缓存 / 代理 (Web Cache)"]

    Cache -- "(2) 校验请求 (条件 GET)<br/>Header: If-Modified-Since: <Date>" --> Server["源服务器 (Origin Server)"]

    Server -- "(3a) 副本未修改: 返回 304 Not Modified<br/>(不包含响应内容)" --> Cache
    Server -- "(3b) 副本已修改: 返回 200 OK<br/>(包含最新响应内容 + 新 Last-Modified)" --> Cache

    Cache -- "(4) 将有效/最新内容响应给客户端" --> Client

校验首部对照:

  • 基于时间戳
    • 响应首部:Last-Modified: <Date>(源服务器发给缓存)
    • 条件请求首部:If-Modified-Since: <Date>(缓存发给源服务器)
    • 304 Not Modified 优势:不传输响应内容,极大地节省了骨干网带宽。
  • 基于内容哈希 (现代扩展)
    • 响应首部:ETag: "<hash_value>"
    • 条件请求首部:If-None-Match: "<hash_value>"(解决秒级精度不足或改动时间变化但内容未变的问题)。

3. 内容分发网络 (CDN)

当站点扩展至全球海量并发访问时(如 YouTube、Netflix、Bilibili),单一源服务器或独立 Web 缓存可能成为容量、距离或可用性瓶颈,由此引入 CDN 架构。


3.1 CDN 部署哲学 (Deployment Philosophies)

根据服务器机房的选址与分布密度,存在两种经典路线:

  • Enter Deep(深入网络 / 接入网下沉)
    • 核心思想:与全球各大本地 ISP 深度合作,把 CDN 服务器机房直接塞进成千上万个本地 ISP 接入网内部。
    • 优缺点:通常更接近接入用户,可能降低时延;但节点数量和运维成本较高(典型代表:Akamai 早期架构)。
  • Bring Home(邀请做客 / 枢纽汇聚)
    • 核心思想:不在无数的小 ISP 里建集群,而是在少数核心骨干网交叉点——**互联网交换中心(IXP)**建造少数几个超大型超级数据中心,邀请各大 ISP 通过高速光纤到 IXP 互联。
    • 优缺点:机房数量少、集中维护成本较低;但部分用户到机房的网络路径可能更长(典型代表:Limelight)。

3.2 CDN 操作全流程与 CNAME 重定向 (CDN Operation)

客户端请求大型媒体文件时,通过 DNS CNAME 别名重定向将解析权转移给 CDN 的调度系统:

flowchart TD
    Client["客户端 (Client)"] -->|"1. 请求视频 URL"| LDNS["本地 DNS (LDNS)"]
    LDNS -->|"2. 递归查询域名"| OriginDNS["源站权威 DNS"]
    OriginDNS -->|"3. 返回 CNAME 别名"| LDNS
    LDNS -->|"4. 解析 CNAME 域名"| CDNDNS["CDN GSLB / 权威 DNS"]
    CDNDNS -->|"5. 选择合适的 PoP IP"| LDNS
    LDNS -->|"6. 返回边缘节点 IP"| Client
    Client -->|"7. 发起 HTTP GET 拉取切片"| PoP["CDN 边缘集群 (PoP)"]

关键步骤剖析:

  1. URL 分离:Web 页面 HTML 与静态音视频资源分离,媒体链接指向特定子域名(如 video.netcinema.com/movie.mp4)。
  2. CNAME 别名重定向:源站权威 DNS 不直接返回 IP,而是返回一个指向 CDN 域名的 CNAME 记录(如 video.kingcdn.com)。
  3. CDN 智能决策 (GSLB):本地 DNS(LDNS)转向 CDN 专有权威 DNS 发起查询,CDN 调度系统根据位置、网络路径、负载和健康状态等信息,返回一个较合适的 CDN 边缘节点(PoP)IP。
  4. 边缘服务与回源:客户端直接向选定的 CDN 边缘服务器建立连接拉取数据;若边缘节点未命中缓存(Cache Miss),由该节点向上级缓存或源站拉取并本地缓存。

3.3 集群选择策略 (Cluster Selection Strategies / Policies)

CDN GSLB 在接收到 DNS 查询时,通过以下策略决定返回哪一个机房的 IP:

1. 地理就近策略 (Geographically Closest)

  • 实现原理:维护 IP 地理位置数据库(Geo-IP),根据请求来源估计用户区域,再选择物理位置较近或网络条件较合适的 CDN 集群。
  • 局限与缺陷
    • Local DNS 偏差:权威 DNS 看到的源 IP 是客户端配置的 Local DNS (LDNS) 而非用户终端。若用户手动配置了公共 DNS(如 8.8.8.8),会导致调度发生严重的地域偏离。
    • 物理距离 网络拓扑距离:物理直线距离近的两个节点可能属于不同运营商,流量需绕行跨网交换中心,导致高时延与拥堵;物理距离更远但同网同省的节点时延往往更低。

2. 实时测量策略 (Real-Time Measurement)

  • 实现原理
    • 主动探测 (Active Probing):部分 CDN 会结合网络探针或其他测量手段估计 RTT、丢包率与网络抖动;ICMP、SYN 或 UDP 探测的可用性取决于网络设备和防火墙策略。
    • 被动遥测 (Passive Telemetry / Client SDK):通过播放器 SDK(如 Dash.js)埋点,将切片实际下载速率与首帧耗时实时回传给 CDN 调度中心。
    • 动态负载均衡:当就近机房带宽跑满或 CPU 过载时,自动将新增流量分流至次优但空闲的邻近机房。
  • 设计权衡 (Trade-off):高频全网探测会产生巨大的网络流量开销,且部分中间路由和防火墙会直接丢弃 ICMP/Ping 探针报文。

3.4 现代调度优化方案

  1. EDNS Client Subnet (ECS, RFC 7871)
    • LDNS 在向 CDN 权威 DNS 转发查询时,附带用户客户端的前缀网段(如截断后的 /24 客户端 IP 子网)。
    • CDN 权威 DNS 可以参考客户端子网而非仅依赖 LDNS 位置,从而减轻跨区解析偏差;实际效果取决于解析器是否支持 ECS 以及隐私策略。
  2. IP Anycast(任播)
    • 全球多个地域的 CDN 边缘机房配置相同的 IP 地址,通过 BGP 路由协议向全网广播。
    • 互联网路由器依据 BGP 路由策略选择到某个 PoP 的路径;该路径通常有助于就近接入,但不保证对应物理距离最近的 PoP,也不能完全替代应用层调度。

Summary

Web 缓存通过条件 GET (If-Modified-Since / 304 Not Modified) 在局部节点实现高效防脏数据复用;CDN 则通过分布式边缘节点、DNS CNAME 重定向与动态集群选择策略(地理就近与实时遥测),将高吞吐内容分发至网络边缘,二者共同构成了现代 Web 的加速基石。


Related Concepts(关联概念)