第3章 CDN缓存层设计:边缘节点缓存策略、回源规则、缓存失效机制、地理分布设计、成本与命中率权衡
3.1 边界定义
CDN缓存层处于用户终端与源站之间,职责边界为:
- 入边界:接收来自用户/客户端的 HTTP/S 请求,通过智能 DNS 或 Anycast 路由到最近的边缘节点。
- 出边界:向用户返回缓存资源(命中)或经回源后返回资源(未命中);同时向源站或上层缓存(如回源层、对象存储)发起回源请求。
- 管控边界:通过控制台或 API 下发缓存策略、失效规则、预热指令;接收监控指标用于计费和运维。
本层不包含源站存储、用户认证、业务逻辑计算;仅负责静态/半静态资源的加速交付。
3.2 分层结构
边缘节点内部按功能进一步分层:
- 接入层:TLS 终结、HTTP/2 协议适配、防 DDoS 清洗。
- 路由与负载均衡:基于 URI/Host 将请求分发到对应的缓存引擎实例。
- 缓存引擎层:核心存储逻辑,支持 LRU/LFU/混合策略,以及分层缓存(内存SSD→本地磁盘→共享SSD)。
- 回源代理层:处理缓存未命中时的回源请求,包括连接复用、重试、超时、限速。
- 失效与预热层:接收全局失效指令、主动预热请求,控制缓存逐出和更新。
- 监控与日志层:聚合命中率、回源流量、延迟、错误码等指标,上报给控制面。
3.3 组件职责
| 组件 | 职责 |
|---|---|
| 反向代理 (Nginx/Envoy) | 终结 TLS,基于 URI 转发,连接池管理,WAF 规则过滤 |
| 缓存存储引擎 | 管理缓存键、存储层次、过期时间、大小限制;支持 Varnish/Squid 或自研内存 + SSD |
| 回源分发器 | 建立与上游的回源连接,支持多源加权、故障转移、range fetch、压缩重编码 |
| 失效广播器 | 接收控制面下发的失效令牌(如 URL 正则、tag),通过 Pub/Sub 同步至所有节点 |
| 预热控制器 | 按优先级队列预热指定资源,限制并发,避免回源风暴 |
| 地理调度器 | 基于 GeoDNS 或 BGP Anycast 将用户路由至最近节点,返回最佳 IP |
关键原则:缓存引擎不信任客户端传来的缓存控制头,必须依据节点配置的 cache-control 覆盖规则、过期时间阈值来决策是否缓存。
3.4 数据流 / 控制流 / 信任链路
3.4.1 用户请求数据流(命中场景)
用户 → GeoDNS解析 → 就近边缘节点IP
→ 反向代理 → 缓存引擎(命中) → 返回资源(HTTP 200)
→ 监控日志记录命中标记
3.4.2 数据流(未命中 + 回源)
用户 → 边缘节点 → 缓存未命中 → 回源代理 → 源站
→ 源站返回 → 写入缓存 → 返回资源给用户
→ 异步发送资源更新通知至失效广播器
3.4.3 控制流(失效指令)
运维控制台 → 失效API → 控制面 → 消息队列/Redis Pub/Sub
→ 各边缘节点失效广播器 → 逐出指定缓存条目
3.4.4 信任链路
- 用户 ↔ 边缘节点:HTTPS 证书由边缘节点提供,源站证书可被节点信任或由节点透传。
- 边缘节点 ↔ 源站:使用源站证书验证;支持双向 TLS 以阻止非法回源。
- 控制面 ↔ 边缘节点:使用预共享密钥或证书认证,防止伪造失效指令。
3.5 选型权衡
| 维度 | 选项A | 选项B | 核心权衡 |
|---|---|---|---|
| 缓存策略 | LRU + TTL 强过期 | LFU + 滑动窗口 + 预热 | LRU 实现简单但冷热点切换慢;LFU 更准但内存开销大 |
| 回源规则 | 按目录/文件类型回源 | 按域名/用户分组回源加权 | 简单策略易运维但灵活性低;精细规则增加配置复杂度 |
| 地理分布 | 全国 5 大区域节点 | 全球 60+ 节点(含 POP) | 节点越多延迟越低,但运维成本、证书管理、同步失效成本翻倍 |
| 缓存容量 vs 命中率 | 单节点 512GB SSD | 单节点 2TB SSD + 内存缓存 64GB | 容量大提升命中率,但存储成本高;需根据资源热度曲线选择合理点 |
| 失效传播方式 | 全局广播逐出 | 基于版本号 + 惰性失效 | 广播实时但回源风暴风险高;惰性失效减少峰值但延迟更新 |
经验值:生产环境中将命中率从 80% 提升至 95%,通常需要存储扩容 3~5 倍,且边际收益递减。建议基于离线流量回放模拟后再确定容量预算。
3.6 风险点
- 回源风暴:大量缓存同时失效或预热高峰导致源站过载,必须设置回源限速、连接池大小、最大并发回源数。
- 缓存不一致:失效指令丢失或延迟导致用户拿到旧数据;需设计版本号校验 + 强制 revalidate。
- 地理调度不均衡:DNS 缓存导致部分用户长期绑定错误节点,引入 BGP Anycast 或健康检查权重动态调整。
- TLS 证书过期:边缘节点维护大量 SSL/TLS 证书,需自动化轮换和监控告警。
- 成本失控:网络流量、存储、回源带宽都可能超预算,建议设置月度告警阈值和自动降级策略。
3.7 落地步骤
- 节点部署:在目标区域分配边缘服务器,安装反向代理与缓存引擎(如 Varnish / Nginx + 共享缓存)。
- DNS 配置:启用 GeoDNS 或 Anycast,配置 CNAME 指向 CDN 服务域名,TTL 设为 60 秒以便快速切换。
- 缓存规则下发:通过控制面定义每条缓存路径的
cache-control覆盖策略、TTL、vary 规则、stale-while-revalidate 窗口。 - 回源配置:设置源站地址、权重、超时(连接 5s,读取 30s)、重试次数(2 次)、回源限速(100 Mbps/节点)。
- 失效机制上线:先使用惰性失效(资源带上版本号),稳定后再开启全局广播逐出;监控失效延迟。
- 预热与预热窗口:对每日亿级请求的热点资源提前 1 小时预热,限制同时预热资源数不超过 100。
- 灰度切流:将 5% 的用户流量引至新 CDN,对比回源率、延迟、错误率,稳定后逐步提升至 100%。
3.8 验收标准
| 指标 | 目标值 | 检测方式 |
|---|---|---|
| 边缘节点命中率 | ≥ 90% | 从监控系统观测缓存命中计数 / 总请求数 |
| 用户 P99 延迟 | ≤ 60 ms (国内) / ≤ 200 ms (跨洲) | 集成 RUM 或人工探测节点延迟 |
| 回源带宽峰值 | 不超过源站总带宽的 30% | 源站出口流量监控 |
| 失效传播延迟 | P95 ≤ 5s | 控制面下发失效指令到边缘节点逐出日志时间差 |
| 预热完成率 | 每次预热任务 99% 资源在 5 分钟内被缓存 | 预热控制器记录完成状态 |
| 月度成本 | 符合预算,无超支告警 | 财务监控看板 |
注意:验收期间需持续运行 72 小时压力测试,模拟真实用户流量模式,并故意注入部分失效指令以检验缓存一致性。