CDN 是一群地理上分散的伺服器,專門遞送靜態內容(圖片、影片、CSS、JavaScript)。核心直覺很簡單:使用者離節點愈近,內容就來得愈快——所以把靜態資源推到離人最近的邊緣。
🧠 Core Ideas
TIP
CDN 本質是放在使用者附近的一層快取。靜態資源改由最靠近使用者的 CDN 節點回傳,而不是每次都回 Web 伺服器抓——效能更好,Web 層與資料庫的負載也一起減輕。
- 快取對象是靜態資源:圖片、影片、CSS、JavaScript。
- 資源的 URL 掛在 CDN 廠商的網域下,例如
https://mysite.cloudfront.net/logo.jpg。 - 動態內容快取是另一回事(依路徑、查詢字串、cookie、標頭快取 HTML),這頁只談靜態內容。
🔁 工作流程
一張圖片第一次與第二次被要求時發生什麼
- 使用者 A 用圖片 URL 要
image.png,該網域指向 CDN。 - CDN 節點快取裡沒有這張圖 → 向來源 (origin) 請求,來源可能是 Web 伺服器或 Amazon S3 這類雲端儲存。
- 來源回傳圖片,並可選擇性附上 HTTP 標頭 TTL (Time-to-Live),描述這張圖該快取多久。
- CDN 把圖片快取下來並回給使用者 A,圖片會一直留在 CDN,直到 TTL 過期。
- 使用者 B 要同一張圖片。
- 只要 TTL 還沒過期,就直接從快取回傳,不再回源。
⚖️ 使用注意事項 (Tradeoffs)
成本
- CDN 由第三方廠商營運,傳入與傳出都計費。
- 很少被存取的資源快取下來幫助有限,可以考慮把它們從 CDN 移除。
快取過期時間 (TTL)
- 對時效性內容,設定合適的過期時間很重要。
- 太長:內容不夠新鮮;太短:頻繁回源重新拉取,失去快取意義。
CDN 故障備援
- 要預想 CDN 掛掉時怎麼辦。
- 若 CDN 暫時故障,客戶端應能偵測到並改向來源直接請求資源。
失效檔案 — 在過期前主動移除
- 透過 CDN 廠商提供的 API 讓該物件失效。
- 用物件版本控制:在 URL 後附上版本號參數,例如
image.png?v=2,讓不同版本走不同 URL。
🔑 Takeaways
- CDN = 把靜態資源推到離使用者最近的邊緣節點,快取回傳;Web 層與 DB 負載一起降。
- 流程重點:快取 miss 回源 → origin 附 TTL → 命中就直接回,直到 TTL 過期。
- 四個要顧的點:成本(少用的就別快取)、TTL 拿捏、CDN 掛掉要能回源、失效(API 失效或 URL 版本號)。
No notes yet — jot your takeaways or Q&A here.