CDN 与 WAF 精讲教程 / 第03章 CDN 架构设计
第03章 CDN 架构设计
本章从架构视角深入 CDN 的网络分层设计,涵盖 L4/L7 代理分层、全局负载均衡(GLB)、Anycast 路由等核心技术。
3.1 CDN 总体架构
3.1.1 分层架构概览
┌────────────────────────────────────────────────────────────────────┐
│ CDN 总体架构 │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Layer 1: DNS 调度层 (Global Traffic Manager) │ │
│ │ ├── GeoDNS ├── ECS ├── Anycast ├── 健康检查 │ │
│ └──────────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────▼───────────────────────────────┐ │
│ │ Layer 2: 边缘接入层 (Edge / L4 Load Balancer) │ │
│ │ ├── TCP/UDP 终止 ├── TLS 卸载 ├── DDoS 防护 │ │
│ └──────────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────▼───────────────────────────────┐ │
│ │ Layer 3: 业务处理层 (L7 Proxy / Application) │ │
│ │ ├── WAF ├── 缓存 ├── 压缩 ├── 路由 ├── 边缘计算 │ │
│ └──────────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────▼───────────────────────────────┐ │
│ │ Layer 4: 中间层 (Shield / Mid-Tier) │ │
│ │ ├── 二级缓存 ├── 回源合并 ├── 区域路由 │ │
│ └──────────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────▼───────────────────────────────┐ │
│ │ Layer 5: 源站接入层 (Origin) │ │
│ │ ├── LB ├── App Server ├── DB ├── Object Storage │ │
│ └──────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────┘
3.2 Layer 4 处理
3.2.1 L4 的职责
Layer 4(传输层)处理 TCP/UDP 连接,主要负责:
| 功能 | 说明 | 典型实现 |
|---|
| 连接终止 | 终结客户端 TCP 连接 | LVS / DPVS / iptables |
| TLS 卸载 | 终结 SSL/TLS 握手 | Nginx / HAProxy / 硬件加速卡 |
| L4 负载均衡 | 基于 IP + 端口分发流量 | LVS DR/TUN 模式 |
| DDoS 防护 | SYN Flood、UDP Flood 清洗 | XDP / eBPF / 专用设备 |
| 连接复用 | 多个客户端连接复用到后端 | Nginx upstream keepalive |
3.2.2 L4 负载均衡模式
模式1: DR (Direct Routing) 模式2: TUN (Tunneling)
┌──────┐ ┌─────────┐ ┌──────┐ ┌─────────┐
│Client│──→│ LVS │──→ │Client│──→│ LVS │
└──────┘ │ (VIP) │ ┌──────┐ └──────┘ │ (VIP) │
└────┬────┘ │ RS-1 │(直接回) └────┬────┘
│ └──────┘ │ IPIP隧道
│ ┌──────┐ ▼
└──────→│ RS-2 │ ┌──────┐
└──────┘ │ RS-1 │(隧道回)
└──────┘
模式3: NAT
┌──────┐ ┌─────────┐ ┌──────┐
│Client│──→│ LVS │──→│ RS-1 │──→ 回包经 LVS
└──────┘ │ (VIP) │ └──────┘
└─────────┘ ┌──────┐
│ RS-2 │──→ 回包经 LVS
└──────┘
| 模式 | 性能 | 瓶颈 | 适用场景 |
|---|
| DR | 最高 | RS 需配置 VIP | 大规模 CDN 边缘 |
| TUN | 高 | IP 封装开销 | 跨机房部署 |
| NAT | 中等 | LVS 是回包瓶颈 | 小规模 / 云环境 |
3.2.3 现代 L4 方案
| 技术 | 特点 | 采用者 |
|---|
| DPVS | 基于 DPDK 的高性能 LVS | 百度、爱奇艺 |
| XDP/eBPF | 内核态高速包处理 | Cloudflare |
| Katran | Facebook 开源 L4 LB | Meta/Facebook |
| Maglev | Google 一致性哈希 L4 LB | Google Cloud |
3.3 Layer 7 处理
3.3.1 L7 的职责
Layer 7(应用层)是 CDN 的核心处理层,所有 HTTP 层面的优化和安全都在此完成:
| 功能 | 说明 | 组件 |
|---|
| HTTP 解析 | 解析请求头、Cookie、查询参数 | Nginx / Envoy / Haproxy |
| WAF 过滤 | 应用层安全规则匹配 | ModSecurity / 自研引擎 |
| 缓存代理 | 缓存查找、回源、存储 | Varnish / Traffic Server |
| 内容压缩 | Brotli / Gzip 压缩 | Nginx brotli 模块 |
| URL 重写 | 规则引擎路由请求 | Nginx rewrite / HAProxy ACL |
| 边缘计算 | 在边缘执行用户逻辑 | Workers / Edge Functions |
| 协议升级 | HTTP/1.1 → HTTP/2 / HTTP/3 | Nginx / Envoy |
3.3.2 L7 请求处理流水线
客户端请求
│
▼
┌───────────────────┐
│ 1. 请求解析 │ 解析 HTTP 头、URL、Cookie
└────────┬──────────┘
▼
┌───────────────────┐
│ 2. Bot 检测 │ UA / 行为分析 / 指纹识别
└────────┬──────────┘
▼
┌───────────────────┐
│ 3. WAF 规则匹配 │ SQL 注入 / XSS / RCE 检测
└────────┬──────────┘
▼
┌───────────────────┐
│ 4. Rate Limiting │ 频率限制、CC 防护
└────────┬──────────┘
▼
┌───────────────────┐
│ 5. 路由决策 │ URL 路由、A/B 测试、灰度
└────────┬──────────┘
▼
┌───────────────────┐
│ 6. 缓存查找 │ HIT → 直接响应(跳到步骤 9)
└────────┬──────────┘
│ MISS
▼
┌───────────────────┐
│ 7. 回源 │ Shield → Origin
└────────┬──────────┘
▼
┌───────────────────┐
│ 8. 响应处理 │ 缓存存储 + 响应头修改
└────────┬──────────┘
▼
┌───────────────────┐
│ 9. 内容压缩 │ Brotli / Gzip
└────────┬──────────┘
▼
┌───────────────────┐
│ 10. 响应返回 │ TLS 加密 → 发送给客户端
└───────────────────┘
3.4 全局负载均衡(GLB)
3.4.1 GLB 概念
GLB(Global Load Balancing,全局负载均衡) 是 CDN 的"大脑",决定每个用户请求由哪个 PoP 处理。与单机房的 L4/L7 负载均衡不同,GLB 工作在 DNS 层面,跨越全球数据中心。
3.4.2 GLB 调度维度
| 维度 | 说明 | 权重 |
|---|
| 地理位置 | 用户到 PoP 的物理距离 | 高 |
| 网络延迟 | 实时探测的 RTT 值 | 高 |
| 节点负载 | CPU、内存、带宽使用率 | 中 |
| 节点健康 | 健康检查通过/失败 | 最高(故障排除) |
| 成本 | 不同区域带宽成本差异 | 低 |
| 用户归属 | 运营商、企业专属节点 | 按需 |
3.4.3 GLB 架构示例
┌──────────────────────────┐
│ GLB 调度系统 │
│ ┌─────────────────────┐ │
│ │ 实时数据采集 │ │
│ │ ├── 节点健康状态 │ │
│ │ ├── 网络延迟探测 │ │
│ │ ├── 节点负载指标 │ │
│ │ └── 流量预测模型 │ │
│ └──────────┬──────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 调度决策引擎 │ │
│ │ ├── Geo → 候选 PoP │ │
│ │ ├── 延迟排序 │ │
│ │ ├── 负载过滤 │ │
│ │ └── 故障剔除 │ │
│ └──────────┬──────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ DNS 响应生成 │ │
│ │ 返回最优 PoP 的 IP │ │
│ └─────────────────────┘ │
└──────────────────────────┘
3.4.4 调度策略对比
| 策略 | 适用场景 | 优点 | 缺点 |
|---|
| 静态 Geo | 一般网站 | 简单可靠 | 不感知实时网络变化 |
| 动态探测 | 低延迟要求业务 | 最优路由 | 系统复杂 |
| 加权轮询 | 多活容灾 | 均匀分布 | 不感知距离 |
| 故障转移 | 高可用架构 | 快速切换 | 需健康检查 |
3.5 Anycast 路由
3.5.1 Anycast 原理
Anycast(任播) 是一种网络寻址方式,多个节点共享同一个 IP 地址,BGP 路由协议自动将用户请求导向最近的节点。
Anycast vs Unicast vs Multicast:
Unicast(单播):1 IP → 1 节点
Client ──→ [节点A] 10.0.0.1
Anycast(任播):1 IP → 多节点(最近者响应)
Client(北京) ──→ [节点A 北京] 10.0.0.1 ← BGP 选最近
Client(上海) ──→ [节点B 上海] 10.0.0.1 ← 同一 IP
Client(广州) ──→ [节点C 广州] 10.0.0.1 ← 不同物理机
Multicast(组播):1 IP → 多节点同时接收
Client ──→ [节点A, 节点B, 节点C] 224.0.0.1
3.5.2 Anycast 在 CDN 中的应用
| 厂商 | Anycast 用途 | 说明 |
|---|
| Cloudflare | 全部流量 | 所有边缘节点共享 Anycast IP |
| Google Cloud CDN | 边缘接入 | 基于 Google 全球骨干网 |
| Fastly | 边缘接入 | 多 Anycast 集群 |
| AWS | 边缘接入 | 部分 Anycast |
3.5.3 Anycast 优缺点
| 优点 | 缺点 |
|---|
| 天然就近访问,无需 DNS 精确调度 | BGP 收敛慢(故障切换可能需数分钟) |
| 天然 DDoS 分散(攻击流量分散到全球) | TCP 会话迁移困难 |
| 配置简单(同一 IP) | 路由不对称问题 |
| 与 BGP 健康检查结合可实现自动故障转移 | 调试困难 |
3.5.4 Anycast + Unicast 混合架构
大型 CDN 混合架构:
┌──────────────────────────────────────────────────────────┐
│ Anycast 层 │
│ ├── DDoS 流量清洗入口 │
│ ├── DNS 权威服务器 │
│ └── 初步流量分发 │
└───────────────────────┬──────────────────────────────────┘
│
┌───────────────────────▼──────────────────────────────────┐
│ Unicast 层 │
│ ├── 各区域 PoP 使用独立 Unicast IP │
│ ├── GLB 精确调度到具体 PoP │
│ └── 支持精细化流量管理 │
└──────────────────────────────────────────────────────────┘
3.6 高可用设计
3.6.1 故障域隔离
故障域层级:
┌────────────────────────────────────────────────┐
│ Region (区域) │
│ ├── Availability Zone (可用区) │
│ │ ├── Cluster (集群) │
│ │ │ ├── Node (节点) │
│ │ │ └── Node (节点) │
│ │ └── Cluster (集群) │
│ └── Availability Zone (可用区) │
└────────────────────────────────────────────────┘
设计原则:
- 同一 PoP 跨至少 2 个可用区
- 同一区域有至少 2 个 PoP
- 关键服务 N+2 冗余
3.6.2 健康检查机制
| 层级 | 检查方式 | 频率 | 故障响应 |
|---|
| L4 | TCP 连接探测 | 1-5s | 标记节点不可用 |
| L7 | HTTP 200 检查 | 5-10s | 从负载均衡池移除 |
| 业务 | 自定义健康接口 | 10-30s | 配合 GLB 调度 |
| 全局 | 综合评分 | 30-60s | DNS 权重调整 |
3.7 注意事项
⚠️ TLS 版本:CDN 边缘应仅支持 TLS 1.2+,禁用 SSLv3、TLS 1.0/1.1。
⚠️ 连接复用率:保持源站连接池高复用率(Keep-Alive),减少 TCP/TLS 握手开销。
⚠️ SNI 一致性:确保 L4 层正确传递 SNI(Server Name Indication),否则多域名 HTTPS 会失败。
3.8 扩展阅读
本章小结
| 主题 | 核心要点 |
|---|
| L4 处理 | TCP 终止、TLS 卸载、DDoS 初步防护 |
| L7 处理 | HTTP 解析、WAF、缓存、压缩的核心层 |
| GLB | 全球调度系统,综合地理位置、延迟、负载决策 |
| Anycast | 多节点共享 IP,BGP 路由实现天然就近 |
| 高可用 | 故障域隔离 + 健康检查 + N+2 冗余 |
下一章:第04章 缓存策略 →