> 為什麼你在北京打開一個影片,載入只要1秒?你的朋友在新疆,打開同一個影片,也是1秒?伺服器難道全國各地都放了?
今天,用 "快遞" 的故事,來講講 CDN 的原理。
你在北京,想從上海寄一箱蘋果。
沒有 CDN 的情況下:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你(北京)→ 上海工廠 → 快遞翻山越嶺 → 你收到蘋果
耗時:3–5 天。
網路請求同理:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你在北京 → 發出請求到上海伺服器 → 上海伺服器回傳資源 → 你收到回應
耗時:100–300 ms(由物理距離決定)。
如果伺服器在上海,你在新疆,延遲可能高達 500 ms。
更嚴重的是——100 萬人同時看這個影片,上海伺服器直接當掉。
CDN 的核心思想:把內容複製到離使用者最近的地方。
快遞公司在全國蓋了很多倉庫:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你在北京 → 北京倉庫有貨 → 當天到達
網路請求同理:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你在北京 → 北京 CDN 節點有快取 → 10 ms 到達
這就是 CDN(Content Delivery Network,內容傳遞網路)的核心:就近存取。
當你輸入網址,DNS 會解析到離你最近的 CDN 節點:
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你(北京)→ dns.example.com → 123.125.115.110(上海源站)
你(北京)→ dns.example.com → GSLB 判斷位置 → 返回 1.2.3.4(北京節點)
你(新疆)→ dns.example.com → GSLB 判斷位置 → 返回 5.6.7.8(新疆節點)
GSLB(Global Server Load Balancer,全球負載平衡)會根據地理位置回傳最近的節點 IP。
CDN 節點稱為 PoP(Point of Presence,邊緣節點),分佈在全國各地:
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
┌─────────────────────────────────────────────────────────────┐
│ CDN 全國節點分佈 │
│ │
│ 東北區 PoP 華北區 PoP 華東區 PoP │
│ (瀋陽) (北京) (上海) │
│ │
│ 西南區 PoP 華中區 PoP 華南區 PoP │
│ (成都) (武漢) (廣州) │
│ │
│ ┌─────────────────┐ │
│ │ 源站伺服器 │ │
│ │ (上海自建) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
CDN 節點會快取源站內容:
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
快取未命中:
使用者 → CDN 節點 → 源站伺服器 → 回傳內容並快取
快取命中:
使用者 → CDN 節點 → (直接回傳快取,不回源)
CDN 透過 HTTP 回應標頭控制快取行為:
<div><div><div></div><span>http</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
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 回應時會帶自訂標頭,標示快取命中狀態:
<div><div><div></div><span>http</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
X-Cache: HIT # 命中快取
X-Cache: MISS # 未命中,回源
X-Cache-Status: HIT
X-Cache-Status: REVALIDATED # 快取過期但內容未變,驗證通過
大型 CDN 使用 Anycast 技術:多個節點共用同一個 IP,路由器會自動把請求導到最近的節點。
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
北京節點、上海節點、廣州節點 → 都使用 IP 1.2.3.4
使用者請求 → 路由器自動選擇物理距離最近的節點
由於國內的 ICP 備案制度,CDN 需要網域已備案才能接入。正式的 CDN 服務商會檢查網域的備案狀態。
存取路徑單程延遲與往返延遲(RTT)比較:
北京 → 上海(無 CDN)單程 100–150 ms,往返 200–300 ms
北京 → 北京 CDN 節點 單程 1–5 ms,往返 2–10 ms
快了 20–100 倍。
CDN 服務商自建骨幹網路,像高鐵專線:
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
北京 → 西安中轉 → 成都中轉 → 上海伺服器
(每跳增加 10–50 ms 延遲)
北京 PoP ←→ 上海 PoP ←→ 源站伺服器
(跳數少、延遲低)
現代 CDN 不只是快取,還能做邊緣運算:
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
CDN 邊緣節點能力:
├── 靜態資源快取
├── 動態請求加速(路由優化)
├── TLS/SSL 終止(加解密在邊緣完成)
├── 圖片壓縮/格式轉換(WebP/AVIF)
├── A/B 測試分流
├── 防 DDoS 攻擊
└── Edge Functions(邊緣函數)
<div><div><div></div><span>yaml</span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
┌─────────────────────────────────────────────────────────────┐
│ 使用者請求 │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ DNS 智能解析 │
│ (GeoDNS:根據地理位置返回節點) │
└─────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ GSLB 全域負載平衡器 │
│ (健檢 + 就近調度) │
└───────┬─────────┬─────────┬─────────┬─────────┬───────────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┐┌────────┐┌────────┐┌────────┐┌────────┐
│北京 PoP ││上海 PoP││廣州 PoP││成都 PoP││新疆 PoP│
└────┬───┘└────┬───┘└────┬───┘└────┬───┘└────┬───┘
│ │ │ │ │
└─────────┴────┬────┴─────────┴─────────┘
│ 快取未命中時回源
▼
┌─────────────────┐
│ 源站伺服器 │
│ (上海自建) │
└─────────────────┘
| 服務商 | 特點 | 適用場景 |
|---|---|---|
| Cloudflare | 免費額度大,全球 Anycast | 個人部落格、中小型網站 |
| Akamai | 全球最大、節點最多 | 大型企業、國際化業務 |
| 阿里雲 CDN | 國內節點密集 | 國內業務 |
| 騰訊雲 CDN | 與微信生態整合 | 遊戲、直播 |
| AWS CloudFront | 與 AWS 生態深度整合 | AWS 使用者 |
| 自建 CDN | 完全可控 | 超大型企業 |
| 因素 | 說明 |
|---|---|
| 節點分佈 | 使用者群體的地理位置 |
| 價格模型 | 按流量、按頻寬、按請求數等 |
| 快取命中率 | 命中率越高,源站壓力越小 |
| HTTPS 支援 | 免費憑證、自動續期 |
| 附加功能 | 防 DDoS、邊緣運算、HTTP/3 支援 |
更新網站內容後,CDN 仍在回傳舊快取:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
你更新了 CSS → CDN 節點仍有舊版本 → 使用者看到排版錯位頁面
解決方案:使用版本化 URL(style.css?v=2.0.0)、發布後手動刷新快取。
惡意請求大量不存在的 URL,直接打到源站:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
攻擊者 → 隨機 URL → CDN 無快取 → 回源 → 源站當掉
解決方案:CDN 安全配置、源站防護、使用布隆過濾器(Bloom Filter)判斷資源是否存在。
CDN 節點需配置 SSL 憑證,更新時需同步到所有節點:
<div><div><div></div><span></span></div><div><div> <span>體驗AI程式助理</span></div><div> <span>程式碼解讀</span></div><div>複製程式碼</div></div></div>
憑證過期 → TLS 握手失敗 → 使用者無法存取
解決方案:使用 CDN 內建免費憑證、設定自動續期、監控憑證狀態。
| 概念 | 說明 |
|---|---|
| PoP / 邊緣節點 | 離使用者最近的 CDN 伺服器 |
| 回源 | 快取未命中時,向源站請求內容 |
| GSLB | 全域負載平衡,根據位置返回最近節點 |
| GeoDNS | 根據使用者地理位置返回不同解析結果 |
| 快取命中率 | 快取命中請求佔總請求的比例,越高越好 |
| Anycast | 多節點共用 IP,路由自動選最近節點 |
現在應該明白了:
下次影片載入飛快時,記得——背後有數千個 CDN 節點在為你「跑腿」。
技術不複雜,但讓「全國人民秒開同一個影片」成為可能。