阅读视图

发现新文章,点击刷新页面。

为什么全国人民都能秒开同一个视频?

为什么你在北京打开一个视频,加载只要1秒?你的朋友在新疆,打开同一个视频,也是1秒?服务器难道全国各地都放了?

今天,用**"快递"**的故事,来讲讲CDN的原理。


原文地址

墨渊书肆/为什么全国人民都能秒开同一个视频?


没有CDN时,网络请求是怎么跑的?

你在北京,想从上海寄一箱苹果。

没有CDN的情况下:

你(北京)→ 上海工厂 → 快递翻山越岭 → 你收到苹果

耗时:3-5天。

网络请求同理:

你在北京 → 请求到上海服务器 → 上海服务器返回资源 → 你收到响应

耗时:100-300ms(物理距离决定)。

如果服务器在上海,你在新疆,延迟可能高达500ms。

更严重的是——100万人同时看这个视频,上海服务器直接崩溃


CDN是怎么解决这个问题的?

CDN的核心思想:把内容复制到离用户最近的地方

快递公司在全国建了很多仓库:

你在北京 → 北京仓库有货 → 当天到达

网络请求同理:

你在北京 → 北京CDN节点有缓存 → 10ms到达

这就是CDN(Content Delivery Network,内容分发网络)的核心:就近访问


CDN的工作原理

1. DNS智能解析

当你输入网址,DNS会解析到离你最近的CDN节点:

# 传统DNS(固定IP)
你(北京)→ dns.example.com  123.125.115.110(上海源站)

# CDN智能DNS
你(北京)→ dns.example.com  GSLB判断位置  返回1.2.3.4(北京节点)
你(新疆)→ dns.example.com  GSLB判断位置  返回5.6.7.8(新疆节点)

GSLB(Global Server Load Balance,全局负载均衡)根据地理位置返回最近节点IP。

2. 边缘节点就近响应

CDN节点称为PoP(Point of Presence,边缘节点),分布在全国各地:

┌─────────────────────────────────────────────────────────────┐
                      CDN全国节点分布                          
                                                              
   东北区PoP        华北区PoP         华东区PoP              
   (沈阳)           (北京)             (上海)                  
                                                              
   西南区PoP        华中区PoP         华南区PoP              
   (成都)           (武汉)             (广州)                  
                                                              
                    ┌─────────────────┐                       
                        源站服务器                            
                       (上海自建)                          
                    └─────────────────┘                       
└─────────────────────────────────────────────────────────────┘

3. 缓存命中与回源

CDN节点会缓存源站内容:

缓存未命中:
用户  CDN节点  源站服务器  返回内容并缓存

缓存命中:
用户  CDN节点  (直接返回缓存,不回源)

深入了解CDN 🔬

CDN缓存策略

CDN通过HTTP响应头控制缓存行为:

# 缓存有效期(秒)
Cache-Control: public, max-age=86400

# 不缓存(直接回源)
Cache-Control: no-cache, no-store
响应头 作用
Expires 过期时间点(绝对时间)
Cache-Control: max-age 缓存有效期(相对时间)
Cache-Control: private 仅浏览器可缓存,CDN不可缓存
Cache-Control: no-store 禁止缓存

缓存失效机制

源站内容更新后,CDN可能仍返回旧缓存。解决方案:

方案 原理 适用场景
缓存预热 发布前主动推送新内容到CDN节点 大促、热更新
缓存刷新 手动删除指定URL的缓存 紧急更新
版本化URL URL携带hash如app.js?v=2.1.0 静态资源(推荐)
短TTL 牺牲性能换取新鲜度 频繁更新

CDN判断缓存状态

CDN返回时会携带自定义头,标识缓存命中状态:

X-Cache: HIT    # 命中缓存
X-Cache: MISS   # 未命中,回源

X-Cache-Status: HIT
X-Cache-Status: REVALIDATED  # 缓存过期但内容未变,验证通过

Anycast与DNS劫持

大型CDN使用Anycast技术:多个节点共享同一IP,路由器自动把请求路由到最近节点。

# Anycast示意
北京节点、上海节点、广州节点  都使用IP 1.2.3.4
用户请求  路由器自动选择物理距离最近的节点

国内CDN的特殊性

由于国内ICP备案制度,CDN需要域名已备案才能接入。正规CDN服务商会对域名备案状态进行校验。


为什么CDN能"秒开"?

1. 就近访问——物理距离近

访问路径 单程延迟 往返延迟(RTT)
北京 → 上海(无CDN) 100-150ms 200-300ms
北京 → 北京CDN节点 1-5ms 2-10ms

快了20-100倍。

2. 骨干网络直连

CDN服务商自建骨干网络,像高铁专线:

# 公网路由(多跳)
北京  西安中转  成都中转  上海服务器
(每跳增加10-50ms延迟)

# CDN骨干网络
北京PoP ←→ 上海PoP ←→ 源站服务器
(少跳数、低延迟)

3. 边缘计算能力

现代CDN不只是缓存,还能做边缘计算:

CDN边缘节点能力:
├── 静态资源缓存
├── 动态请求加速(路由优化)
├── TLS/SSL终止(加解密在边缘完成)
├── 图片压缩/格式转换(WebP/AVIF)
├── A/B测试分流
├── 防DDoS攻击
└── Edge Functions(边缘函数)

CDN服务架构

┌─────────────────────────────────────────────────────────────┐
                         用户请求                              
└─────────────────────────┬───────────────────────────────────┘
                          
                          
┌─────────────────────────────────────────────────────────────┐
                      DNS智能解析                              
               (GeoDNS:根据地理位置返回节点)                 
└─────────────────────────┬───────────────────────────────────┘
                          
                          
┌─────────────────────────────────────────────────────────────┐
                    GSLB全局负载均衡器                        
                     (健康检查 + 就近调度)                   
└───────┬─────────┬─────────┬─────────┬─────────┬───────────┘
                                            
                                            
   ┌────────┐┌────────┐┌────────┐┌────────┐┌────────┐
   │北京PoP ││上海PoP ││广州PoP ││成都PoP ││新疆PoP 
   └────┬───┘└────┬───┘└────┬───┘└────┬───┘└────┬───┘
                                            
        └─────────┴────┬────┴─────────┴─────────┘
                        缓存未命中时回源
                       
              ┌─────────────────┐
                  源站服务器     
                 (上海自建)   
              └─────────────────┘

CDN服务商选择

服务商 特点 适用场景
Cloudflare 免费额度大,全球Anycast 个人博客、中小型网站
Akamai 全球最大,节点最多 大型企业、国际化
阿里云CDN 国内节点密集 国内业务
腾讯云CDN 与微信生态集成 游戏、直播
AWS CloudFront 与AWS生态深度集成 AWS用户
自建CDN 完全可控 超大型企业

选型考量

因素 说明
节点分布 用户群体地理位置
价格模型 按流量、按带宽、按请求数
缓存命中率 命中率越高,源站压力越小
HTTPS支持 免费证书、自动续期
附加功能 防DDoS、边缘计算、HTTP/3支持

CDN的常见问题

1. 缓存生效延迟

更新网站内容后,CDN仍在返回旧缓存:

你更新了CSS → CDN节点仍有旧版本 → 用户看到错位页面

解决方案:使用版本化URL(style.css?v=2.0.0)、发布后手动刷新缓存。

2. 缓存穿透

恶意请求大量不存在URL,直接打到源站:

攻击者 → 随机URL → CDN无缓存 → 回源 → 源站崩溃

解决方案:CDN安全配置、源站防护、使用BloomFilter判断存在性。

3. HTTPS证书管理

CDN节点需配置SSL证书,更新时需同步到所有节点:

证书过期 → TLS握手失败 → 用户无法访问

解决方案:使用CDN自带免费证书、配置自动续期、监控证书状态。


总结:CDN核心知识点

概念 说明
PoP/边缘节点 离用户最近的CDN服务器
回源 缓存未命中时,向源站请求内容
GSLB 全局负载均衡,根据位置返回最近节点
GeoDNS 根据用户地理位置返回不同解析结果
缓存命中率 缓存命中请求占总请求的比例,越高越好
Anycast 多节点共享IP,路由自动选最近节点

写在最后

现在应该明白了:

  • CDN = 在全国各地建仓库,就近发货
  • PoP/边缘节点 = 离你最近的仓库
  • 回源 = 仓库没货,去工厂拿
  • GSLB = 智能调度,看你在哪就分配哪个仓库
  • 秒开 = 物理距离近 + 骨干网络 + 缓存复用

下次视频加载飞快,记得——背后是数千个CDN节点在为你"跑腿"。

技术不复杂,但让"全国人民秒开同一个视频"成为可能。

❌