强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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章 缓存策略 →