[Day 29] Caching (二)

erichung0404
2024-08-29 18:18:54

接續前篇提到從硬碟存取資料造成的效能瓶頸, 可以改從 記憶體 存取改善效能
另一個效能的瓶頸會在 網路速度, 可以透過縮短 服務 和 客戶端 的地理距離來改善

將資料放到 Content Delivery Network (CDN) 就是一種

CDN

CDN 的伺服器通常遍佈全球, 並且會根據地理位置自動分配請求到最近的 CDN 伺服器, 所以我們不用像自己設計的分散式系統一樣擔心 可用性 的問題

通常 CDN 會說明哪些國家有伺服器, 如 The Cloudflare global network, Amazon CloudFront Key Features

(題外話: 發現 中華電信也有 CDN 服務 中華電信CDN, 但是資訊有點少XD)

並且和上篇提到的 Read-through 機制類似, 客戶端只需要從 CDN 伺服器請求資源
不同的是 CDN 強調的是 可用性, 所以通常不提供 自動化的同步機制, 需要由我們的服務自己清除 (或等他過期)
並且沒有 "寫入" 的更新機制, 只能 無效化 (Invalidate)

幾種常見的 無效化 CDN 快取的方式

Time to Live (TTL)

CDN 會根據資源的 TTL 設定來決定內容的有效期限, 當 TTL 到期時, CDN 節點會自動將該內容標記為過期, 並在新請求進來時，向我們的服務請求最新的內容, 並更新快取 (Read-through)

主動清除 (Purge/Invalide)

CDN 通常允許我們主動清除或使快取無效, 如果要更新某個資源時, 可以透過 API 或後台發送清除請求, 讓 CDN 節點上的快取內容失效, 下次請求就會重新從我們服務重新取得最新的版本

版控 (Versioning)

我們也可以修改資源的 URL 加入版號, 讓 CDN 視為新的資源, 就可以防止舊的快取繼續被提供

Reference

The Cloudflare global network

Amazon CloudFront Key Features