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 接入网边缘)的核心价值:
- 降低响应时延:客户端从本地/局域网内的 Web 缓存获取数据,免去跨公网传输时延。
- 缓解接入链路拥堵:减少机构接入网到 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)"]
关键步骤剖析:
- URL 分离:Web 页面 HTML 与静态音视频资源分离,媒体链接指向特定子域名(如
video.netcinema.com/movie.mp4)。 - CNAME 别名重定向:源站权威 DNS 不直接返回 IP,而是返回一个指向 CDN 域名的
CNAME记录(如video.kingcdn.com)。 - CDN 智能决策 (GSLB):本地 DNS(LDNS)转向 CDN 专有权威 DNS 发起查询,CDN 调度系统根据位置、网络路径、负载和健康状态等信息,返回一个较合适的 CDN 边缘节点(PoP)IP。
- 边缘服务与回源:客户端直接向选定的 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),会导致调度发生严重的地域偏离。 - 物理距离 网络拓扑距离:物理直线距离近的两个节点可能属于不同运营商,流量需绕行跨网交换中心,导致高时延与拥堵;物理距离更远但同网同省的节点时延往往更低。
- Local DNS 偏差:权威 DNS 看到的源 IP 是客户端配置的 Local DNS (LDNS) 而非用户终端。若用户手动配置了公共 DNS(如
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 现代调度优化方案
- EDNS Client Subnet (ECS, RFC 7871):
- LDNS 在向 CDN 权威 DNS 转发查询时,附带用户客户端的前缀网段(如截断后的
/24客户端 IP 子网)。 - CDN 权威 DNS 可以参考客户端子网而非仅依赖 LDNS 位置,从而减轻跨区解析偏差;实际效果取决于解析器是否支持 ECS 以及隐私策略。
- LDNS 在向 CDN 权威 DNS 转发查询时,附带用户客户端的前缀网段(如截断后的
- IP Anycast(任播):
- 全球多个地域的 CDN 边缘机房配置相同的 IP 地址,通过 BGP 路由协议向全网广播。
- 互联网路由器依据 BGP 路由策略选择到某个 PoP 的路径;该路径通常有助于就近接入,但不保证对应物理距离最近的 PoP,也不能完全替代应用层调度。
Summary
Web 缓存通过条件 GET (
If-Modified-Since/304 Not Modified) 在局部节点实现高效防脏数据复用;CDN 则通过分布式边缘节点、DNS CNAME 重定向与动态集群选择策略(地理就近与实时遥测),将高吞吐内容分发至网络边缘,二者共同构成了现代 Web 的加速基石。