Skip to content
所有文章 ‹ Part 18 of 18 · Cache 不是方塊,是一條鏈
工程 · 2 min read

我學到的:cache 不是一個方塊,是一條鏈

Cache 不是一個方塊,是一條鏈。追完一個 CDN cache 迴圈後的三個收穫,以及在 request 經過的每一層都要問的三個問題。

面試時我只會說「加一層 CDN 就會變快」。追完這個問題,我看得懂一個 request 經過的每一層 cache。

以前:clientCDNserver 現在:clientedgetiered cacheload balancerLB cachestorage /compute CDN 內部 我們自己的 origin 每一層:自己的 TTL、自己讀哪些 header、purge 清不清得到
以前畫成一個 CDN 方塊的地方,其實是一串 cache 層,每一層都有自己的 TTL、讀的 header 和 purge 範圍。

我現在懂的三件事

  1. 每個元件都有自己的 cache 設定:TTL 從 storage 一路傳到 client,途中只會被壓低。IaC 裡沒寫,不代表沒有設定,預設值一直都在(三個地方都在設定 TTL)。
  2. Tiered cache 和 LB cache 是兩回事:tiered cache 是 CDN 內部的第二層。LB cache 在我們自己的 origin 上,CDN 跳不過,purge 也清不到(CDN 名詞一頁表、兩層 cache:我原本以為的樣子)。
  3. 自訂 header 只在有規則的地方有效:X-Cache-Bypass 和 proxy header 都不是 HTTP 標準。沒有規則讀它的元件,會直接忽略它(Cache header:誰設定,誰讀取、Bypass header 只在有規則的地方有效)。

這次追查帶來什麼

  • 我把這次的發現整理成一個方向:降低成本,同時提升 serving 效能。
  • 我把這個方向提案給團隊。少掉重複的 cache 和失敗的 refresh,origin 收到的 request 變少,使用者載入也變快。
  • 成本降低、載入變快,對團隊和公司的營收都有幫助。

最大的收穫不是找到一個 bug,而是學會跟著一個 request 走完整條路(五個零件串成一個迴圈)。每到一層,我都會問三個問題:

  1. 這裡有沒有 cache?
  2. 它讀哪些 header?
  3. Purge 清得到它嗎?

Cache 不是一個方塊。它是一條鏈,每一節都有自己的規則。

延伸閱讀:CDN 名詞一頁表、Cache header:誰設定,誰讀取、兩層 cache:我原本以為的樣子、三個地方都在設定 TTL、Bypass header 只在有規則的地方有效、五個零件串成一個迴圈。或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉