第3章 CDN缓存层设计:边缘节点缓存策略、回源规则、缓存失效机制、地理分布设计、成本与命中率权衡

3.1 边界定义

CDN缓存层处于用户终端与源站之间,职责边界为:

  • 入边界:接收来自用户/客户端的 HTTP/S 请求,通过智能 DNS 或 Anycast 路由到最近的边缘节点。
  • 出边界:向用户返回缓存资源(命中)或经回源后返回资源(未命中);同时向源站或上层缓存(如回源层、对象存储)发起回源请求。
  • 管控边界:通过控制台或 API 下发缓存策略、失效规则、预热指令;接收监控指标用于计费和运维。

本层不包含源站存储、用户认证、业务逻辑计算;仅负责静态/半静态资源的加速交付。

3.2 分层结构

边缘节点内部按功能进一步分层:

  1. 接入层:TLS 终结、HTTP/2 协议适配、防 DDoS 清洗。
  2. 路由与负载均衡:基于 URI/Host 将请求分发到对应的缓存引擎实例。
  3. 缓存引擎层:核心存储逻辑,支持 LRU/LFU/混合策略,以及分层缓存(内存SSD→本地磁盘→共享SSD)。
  4. 回源代理层:处理缓存未命中时的回源请求,包括连接复用、重试、超时、限速。
  5. 失效与预热层:接收全局失效指令、主动预热请求,控制缓存逐出和更新。
  6. 监控与日志层:聚合命中率、回源流量、延迟、错误码等指标,上报给控制面。

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 以阻止非法回源。
  • 控制面 ↔ 边缘节点:使用预共享密钥或证书认证,防止伪造失效指令。
CDN缓存层架构示意 CDN缓存层架构(边缘节点内部) 用户 GeoDNS 反向代理 缓存引擎 回源代理 源站 失效广播器 控制面 监控与日志 预热控制器 说明:用户经GeoDNS路由至最近边缘节点;命中直接返回;未命中经回源代理拉取并写入缓存; 控制面通过失效广播器逐出陈旧条目,预热控制器主动回源填充热点资源。 未命中 失效指令 指标 预热

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 落地步骤

  1. 节点部署:在目标区域分配边缘服务器,安装反向代理与缓存引擎(如 Varnish / Nginx + 共享缓存)。
  2. DNS 配置:启用 GeoDNS 或 Anycast,配置 CNAME 指向 CDN 服务域名,TTL 设为 60 秒以便快速切换。
  3. 缓存规则下发:通过控制面定义每条缓存路径的 cache-control 覆盖策略、TTL、vary 规则、stale-while-revalidate 窗口。
  4. 回源配置:设置源站地址、权重、超时(连接 5s,读取 30s)、重试次数(2 次)、回源限速(100 Mbps/节点)。
  5. 失效机制上线:先使用惰性失效(资源带上版本号),稳定后再开启全局广播逐出;监控失效延迟。
  6. 预热与预热窗口:对每日亿级请求的热点资源提前 1 小时预热,限制同时预热资源数不超过 100。
  7. 灰度切流:将 5% 的用户流量引至新 CDN,对比回源率、延迟、错误率,稳定后逐步提升至 100%。

3.8 验收标准

指标目标值检测方式
边缘节点命中率≥ 90%从监控系统观测缓存命中计数 / 总请求数
用户 P99 延迟≤ 60 ms (国内) / ≤ 200 ms (跨洲)集成 RUM 或人工探测节点延迟
回源带宽峰值不超过源站总带宽的 30%源站出口流量监控
失效传播延迟P95 ≤ 5s控制面下发失效指令到边缘节点逐出日志时间差
预热完成率每次预热任务 99% 资源在 5 分钟内被缓存预热控制器记录完成状态
月度成本符合预算,无超支告警财务监控看板
注意:验收期间需持续运行 72 小时压力测试,模拟真实用户流量模式,并故意注入部分失效指令以检验缓存一致性。