CDN工作原理深度解析:从边缘节点到缓存策略的完整指南

CDN 解决的核心问题

没有CDN时,全国用户都访问同一台源站服务器,北京用户到上海源站的RTT约30ms,而新疆用户可能超过100ms。CDN通过在全国(乃至全球)部署边缘节点,让用户就近获取内容,将延迟降低到5~20ms。

CDN 请求完整流程

当用户访问 cdn.example.com/logo.png 时,发生了什么?

  1. DNS解析:用户的DNS查询被CDN的智能DNS拦截,根据用户IP地理位置和运营商,返回最近的边缘节点IP
  2. 命中检查:边缘节点检查本地缓存中是否有该资源(Cache HIT/MISS)。
  3. 缓存命中(HIT):直接从边缘节点返回缓存内容,无需回源。延迟极低(5~20ms)。
  4. 缓存未命中(MISS):边缘节点向上一级节点或源站发起回源请求,获取内容后缓存并返回给用户。
  5. 缓存存储:边缘节点按照缓存策略存储内容,等待后续请求命中。

缓存控制:最重要的CDN配置

CDN缓存行为由HTTP响应头控制,理解这些头是正确使用CDN的关键:

响应头作用典型配置示例
Cache-Control: max-age资源在CDN缓存的最大时间(秒)静态资源:max-age=31536000(1年)
Cache-Control: no-cache每次使用前需向源站验证动态内容、HTML页面
Cache-Control: no-store禁止任何缓存(CDN和浏览器)敏感数据、实时数据
ETag资源指纹,用于协商缓存验证服务器自动生成
Vary指定哪些请求头影响缓存版本Vary: Accept-Encoding(Gzip/Brotli分缓存)

缓存策略最佳实践

  • 静态资源(图片/字体/JS/CSS):设置超长缓存(1年),通过文件名Hash保证更新(如 main.a3b4c5.js)。
  • HTML页面:通常不缓存或短缓存(5~10分钟),保证内容更新及时生效。
  • API响应:根据数据实时性需求决定,可缓存1~60秒减少源站压力。
  • 用户个性化内容:绝对不能缓存(含Cookie、用户ID的请求),否则会出现”串号”问题。

CDN 命中率优化

缓存命中率(Hit Rate)是衡量CDN效果的核心指标,提升命中率的方法:

  • 忽略无关查询参数:url?_ga=xxx 和 url 应命中同一缓存,在CDN配置中设置忽略追踪参数。
  • 规范化URL:example.com/page 和 example.com/page/ 应映射到同一缓存键。
  • 延长缓存TTL:在合理范围内延长TTL,减少回源次数,提升命中率。
  • 预热缓存(Cache Warming):新内容上线后主动预热,避免冷启动时大量请求穿透到源站。

主流 CDN 服务商对比

服务商节点规模优势适用场景
Cloudflare330+城市免费套餐强大,DDoS防护一流国际业务首选
阿里云CDN2800+节点国内覆盖最广,与阿里云生态深度集成国内业务首选
腾讯云CDN2000+节点视频/游戏加速专长,国内覆盖强媒体/游戏类业务
又拍云/七牛云中等规模图片处理功能强,价格亲民图片/媒体存储分发

CDN 常见问题排查

  • 内容更新了但用户看到的还是旧版本:执行CDN刷新(Purge)操作,或等待缓存TTL过期。
  • CDN命中率很低(<70%):检查Cache-Control配置,排查是否有大量个性化参数导致缓存键分散。
  • HTTPS证书问题:确认CDN域名已正确配置SSL证书,开启HTTPS时回源也建议使用HTTPS。