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

兩層 cache:我原本以為的樣子

我讀設定檔畫出的兩層 cache 圖,以及它錯在哪裡。Bypass header 在一條路線上讓 LB cache 讓路,在另一條路線上完全沒用。

Request 會經過兩層 cache。我原本以為,一個 bypass header 就讓 LB cache 永遠讓路。

這是我讀完設定檔後畫的圖。我刻意把它留下來,因為它是錯的。

我原本以為的樣子 Browser Akamai edge(30 天 TTL) 加上:X-Cache-Bypass: yes LB cache(3 天 TTL) 看到 header → 不用自己的副本 storage bucket
我原本以為:一個 bypass header 就讓 LB cache 讓路,所以 Akamai miss 一定會走到 bucket。

我當時的理解

  • Akamai 在每個送往 origin 的 request 加上 X-Cache-Bypass: yes。
  • LB cache 看到這個 header,就跳過自己的 cache。
  • 所以 Akamai miss 的時候,一定會拿到 bucket 上最新的檔案。

我錯在哪裡

我以為 (每條路線都一樣) 實際上 bucket 路線 proxy 路線 Akamai + X-Cache-Bypass LB cache storage 讓路 ✓ 讓路 ✓ 不讀 header ✗ 最新檔 最新檔 回舊副本
Bypass header 只在 bucket 路線有效,因為 proxy 路線的 LB cache 不讀它,直接回舊副本。
我以為實際上
LB cache 看到 X-Cache-Bypass 就讓路只有 bucket 後端的 LB cache 設了規則讀它,proxy 後端的沒有(Bypass header 只在有規則的地方有效)
Akamai miss 一定拿到最新檔proxy 路線拿到的是 LB cache 的舊副本(Stale-while-revalidate:先回舊檔,背景再刷新)
TTL 由 Akamai 決定LB cache 先把 TTL 壓到 3600 秒以下(三個地方都在設定 TTL)
Purge Akamai 一次就夠LB cache 清不到,Akamai 會從它補回舊檔(Akamai 工具:purge 和 CLI)

這張圖是我讀設定檔得出的理解,不是實測的結果。它只對 bucket 路線成立。

讀設定檔得到的是「應該」。打一個 request 下去,才知道「實際」。

延伸閱讀:Akamai property:一份 edge 設定、Akamai 工具:purge 和 CLI、Load balancer 怎麼選後端、三個地方都在設定 TTL、Bypass header 只在有規則的地方有效。或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉