內容遞送網路 (CDN)

★★★★Draft

FromSystem Design Interview

📚 From the Books

內容遞送網路 (CDN)ConceptCaching

CDN 是一群地理上分散的伺服器,專門遞送靜態內容(圖片、影片、CSS、JavaScript)。核心直覺很簡單:使用者離節點愈近,內容就來得愈快——所以把靜態資源推到離人最近的邊緣。

🧠 Core Ideas

TIP

CDN 本質是放在使用者附近的一層快取。靜態資源改由最靠近使用者的 CDN 節點回傳,而不是每次都回 Web 伺服器抓——效能更好,Web 層與資料庫的負載也一起減輕。

🔁 工作流程

一張圖片第一次與第二次被要求時發生什麼
  1. 使用者 A 用圖片 URL 要 image.png,該網域指向 CDN。
  2. CDN 節點快取裡沒有這張圖 → 向來源 (origin) 請求,來源可能是 Web 伺服器或 Amazon S3 這類雲端儲存。
  3. 來源回傳圖片,並可選擇性附上 HTTP 標頭 TTL (Time-to-Live),描述這張圖該快取多久。
  4. CDN 把圖片快取下來並回給使用者 A,圖片會一直留在 CDN,直到 TTL 過期。
  5. 使用者 B 要同一張圖片。
  6. 只要 TTL 還沒過期,就直接從快取回傳,不再回源。

⚖️ 使用注意事項 (Tradeoffs)

成本
  • CDN 由第三方廠商營運,傳入與傳出都計費
  • 很少被存取的資源快取下來幫助有限,可以考慮把它們從 CDN 移除。
快取過期時間 (TTL)
  • 對時效性內容,設定合適的過期時間很重要。
  • 太長:內容不夠新鮮;太短:頻繁回源重新拉取,失去快取意義。
CDN 故障備援
  • 要預想 CDN 掛掉時怎麼辦。
  • 若 CDN 暫時故障,客戶端應能偵測到並改向來源直接請求資源。
失效檔案 — 在過期前主動移除
  • 透過 CDN 廠商提供的 API 讓該物件失效
  • 物件版本控制:在 URL 後附上版本號參數,例如 image.png?v=2,讓不同版本走不同 URL。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading