工程 · 3 min read
兩層 cache:我原本以為的樣子
我讀設定檔畫出的兩層 cache 圖,以及它錯在哪裡。Bypass header 在一條路線上讓 LB cache 讓路,在另一條路線上完全沒用。
Request 會經過兩層 cache。我原本以為,一個 bypass header 就讓 LB cache 永遠讓路。
這是我讀完設定檔後畫的圖。我刻意把它留下來,因為它是錯的。
我當時的理解
- Akamai 在每個送往 origin 的 request 加上
X-Cache-Bypass: yes。 - LB cache 看到這個 header,就跳過自己的 cache。
- 所以 Akamai miss 的時候,一定會拿到 bucket 上最新的檔案。
我錯在哪裡
| 我以為 | 實際上 |
|---|---|
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 只在有規則的地方有效。或回到系列總覽。