工程 · 2 min read
我學到的:cache 不是一個方塊,是一條鏈
Cache 不是一個方塊,是一條鏈。追完一個 CDN cache 迴圈後的三個收穫,以及在 request 經過的每一層都要問的三個問題。
面試時我只會說「加一層 CDN 就會變快」。追完這個問題,我看得懂一個 request 經過的每一層 cache。
我現在懂的三件事
- 每個元件都有自己的 cache 設定:TTL 從 storage 一路傳到 client,途中只會被壓低。IaC 裡沒寫,不代表沒有設定,預設值一直都在(三個地方都在設定 TTL)。
- Tiered cache 和 LB cache 是兩回事:tiered cache 是 CDN 內部的第二層。LB cache 在我們自己的 origin 上,CDN 跳不過,purge 也清不到(CDN 名詞一頁表、兩層 cache:我原本以為的樣子)。
- 自訂 header 只在有規則的地方有效:
X-Cache-Bypass和 proxy header 都不是 HTTP 標準。沒有規則讀它的元件,會直接忽略它(Cache header:誰設定,誰讀取、Bypass header 只在有規則的地方有效)。
這次追查帶來什麼
- 我把這次的發現整理成一個方向:降低成本,同時提升 serving 效能。
- 我把這個方向提案給團隊。少掉重複的 cache 和失敗的 refresh,origin 收到的 request 變少,使用者載入也變快。
- 成本降低、載入變快,對團隊和公司的營收都有幫助。
最大的收穫不是找到一個 bug,而是學會跟著一個 request 走完整條路(五個零件串成一個迴圈)。每到一層,我都會問三個問題:
- 這裡有沒有 cache?
- 它讀哪些 header?
- Purge 清得到它嗎?
Cache 不是一個方塊。它是一條鏈,每一節都有自己的規則。
延伸閱讀:CDN 名詞一頁表、Cache header:誰設定,誰讀取、兩層 cache:我原本以為的樣子、三個地方都在設定 TTL、Bypass header 只在有規則的地方有效、五個零件串成一個迴圈。或回到系列總覽。