Computer NetworkNotes

第 22 章:CDN 与边缘网络

zjc 于 2026-01-22 发布

这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 CDN 把静态资源、动态请求和计算能力放到离用户更近的边缘节点,目标是降低延迟、减少回源、提升可用性和吸收攻击流量。CDN 的效果取决于缓存命中率、内容可缓存性、刷新策略、回源控制和监控。

22.1 CDN 架构

用户
  -> Local DNS /智能调度
     -> 边缘节点 Edge
        -> 中间层 Mid
           -> 源站 Origin

边缘节点:

  1. 就近缓存内容;
  2. 终止 TLS;
  3. 压缩和优化;
  4. 回源;
  5. 防护攻击;
  6. 记录访问日志。

22.2 调度方式

方式 说明
DNS 调度 根据 Local DNS 位置返回边缘 IP
HTTP DNS 客户端直接请求调度服务,减少运营商劫持
Anycast 同一 IP 广播到多个地域,按路由就近接入
302 调度 先返回调度中心,再跳转边缘

Local DNS 位置可能不等于用户真实位置,因此调度结果不总是最优。

22.3 缓存命中

请求到达边缘:

命中缓存 -> 直接返回
未命中 -> 中间层或源站

指标:

指标 含义
命中率 命中请求占比
回源率 需要请求源站的比例
回源带宽 源站压力
边缘响应时间 用户侧首包
源站响应时间 回源耗时
状态码分布 4xx / 5xx / 304

命中率低的原因:

  1. URL 参数变化;
  2. Cache-Control 不允许缓存;
  3. Cookie 影响缓存 key;
  4. 资源版本变化;
  5. 边缘节点容量不足;
  6. 用户分布太散;
  7. 频繁刷新;
  8. 动态接口被误判为静态。

22.4 缓存策略

静态资源:

Cache-Control: public, max-age=31536000, immutable

文件名使用内容哈希:

app.a1b2c3.js
style.d4e5f6.css

HTML:

Cache-Control: no-cache

接口:

Cache-Control: private, no-store

CDN 可能支持忽略或包含 query string,但必须与业务语义一致。带用户 ID、时间戳或随机数的资源不能被公共缓存错误复用。

22.5 刷新与预热

刷新:让边缘缓存失效。

URL 刷新:指定资源立即失效
目录刷新:批量失效
预热:发布前主动拉取到边缘

发布流程:

1. 上传新静态资源,文件名带新 hash
2. 验证新资源可访问
3. 发布新 HTML 引用新资源
4. 按需预热热门资源
5. 观察命中率和错误率
6. 保留旧资源一段时间

不要依赖“发布后刷新全部目录”作为常规流程,容易造成回源风暴。

22.6 回源控制

配置:

  1. 回源 Host;
  2. 回源协议;
  3. 回源超时;
  4. 回源重试;
  5. 回源跟随 301 / 302;
  6. 回源认证;
  7. 回源Range;
  8. 源站 IP 或负载均衡。

常见问题:

  1. 回源 Host 错误,源站返回 404;
  2. 源站证书不匹配;
  3. 回源超时小于源站处理时间;
  4. 重试放大源站压力;
  5. 回源带错 Cookie;
  6. 源站限速;
  7. 源站只允许部分 CDN 网段;
  8. 源站响应 no-store 但期望 CDN 缓存。

22.7 动态加速

动态接口不能被缓存,但 CDN 仍可通过优化链路改善:

  1. 就近接入;
  2. CDN 内部骨干网回源;
  3. 连接复用;
  4. TCP/TLS 优化;
  5. HTTP/2 或 HTTP/3;
  6. 智能路由;
  7. 请求压缩。

注意:

  1. 动态请求收益需实测;
  2. 敏感数据要评估代理点;
  3. POST 和请求体大小有限制;
  4. WebSocket 支持视 CDN 而定;
  5. 响应流式传输需要验证。

22.8 安全与防护

CDN 可以隐藏源站 IP、吸收流量攻击、配合 WAF 过滤请求。

措施:

  1. 源站只允许 CDN 回源网段;
  2. 配置回源鉴权;
  3. URL 防盗链;
  4. 时间戳签名;
  5. 频率限制;
  6. Bot 治理;
  7. WAF 规则;
  8. DDoS 清洗;
  9. 敏感路径禁缓存;
  10. 访问日志脱敏。

仅靠隐藏源站 IP 不等于安全,仍需源站防火墙和证书治理。

22.9 多 CDN 策略

原因:

  1. 不同地区性能差异;
  2. 单供应商故障;
  3. 成本谈判;
  4. 特定能力差异;
  5. 合规要求。

调度:

全局流量调度
  |-- CDN A:主要地区
  |-- CDN B:备份
  +-- 源站直连:降级

要求:

  1. 统一域名和证书管理;
  2. 配置一致性验证;
  3. 双方缓存和刷新能力;
  4. 监控对比;
  5. 自动切流阈值;
  6. 定期演练。

22.10 排障

用户访问慢:

1. 确认用户地区和运营商
2. 解析 CDN 域名
3. curl 测边缘响应
4. 查看命中状态
5. 对比源站响应
6. 检查回源耗时
7. 查看资源大小和压缩

访问 404:

1. 确认源站资源存在
2. 检查回源 Host 和路径
3. 检查重写规则
4. 检查缓存 key
5. 检查源站路由

新旧内容混杂:

  1. HTML 缓存策略错误;
  2. hash 引用未更新;
  3. 部分节点刷新未完成;
  4. 用户本地缓存;
  5. 浏览器或中间代理缓存。

本章小结

CDN 通过边缘缓存、就近接入和回源控制降低用户延迟和源站压力。静态资源应使用内容哈希和长缓存,动态接口要谨慎设置 no-store,发布时优先新文件名而不是频繁刷新。CDN 治理重点是命中率、回源带宽、刷新预热、回源 Host、安全防护和多 CDN 切流演练。

思考题

  1. CDN 为什么能降低用户访问延迟?
  2. 哪些响应不适合公共边缘缓存?
  3. 如何安全发布静态资源并避免回源风暴?
  4. 回源 Host 错误会导致什么问题?
  5. 设计一个多 CDN 故障切换方案。