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

症狀:HTML、CSS、JS 一直跑回 origin

同網域、同 TTL,HTML 離開 CDN edge 的比例卻是圖片的 17 倍。把數字拆到路線這一層,嫌疑一個個排除,最後只剩一個答案。

網域相同、TTL 相同,HTML 離開 edge 的比例卻是圖片的 17 倍。

這是整個追查的起點。

  • 八月的 HTML offload 只有 84%,每天在 59% 到 97% 之間跳動。
  • 換句話說,每 100 個 HTML request 有 16 個跑回我們的 server。

我先比較同網域、同 TTL 的檔案

檔案路線每個檔案的 request 量離開 edge
Type 1(共用 script)bucket極高0.5%
Type 2(圖片)bucket中2.1%
Type 3(樣式檔)proxy中15.4%
Type 4(HTML)proxy中36.1%
Type 5(素材 script)proxy中41.3%
  • 資料來自 CDN 的即時 log,11 分鐘的樣本。
  • 「離開 edge」用首位元組時間 ≥ 50 ms 判斷,因為報表把 refresh hit 也算成 hit(CDN 名詞一頁表)。
  • Type 2 和 Type 5 的 request 量、TTL 都差不多,Type 5 卻多離開 edge 約 20 倍。
  • 差別只剩一個:走哪一條路線(Load balancer 怎麼選後端)。

我排除的三個嫌疑

  1. Query string:cache key 只保留一個參數,載入 HTML 的 script 也不帶 query string。
  2. 上傳介面:介面只上傳資料夾和存紀錄。HTML 要等頁面顯示時,browser 才去 fetch。
  3. HTML 專屬規則:property 對所有檔案類型只有一條 cache 規則(Akamai property:一份 edge 設定)。

一開始沒人懷疑 script,因為整體數字很健康。原因是 Type 1 佔了絕大部分的 script 流量,又走 bucket 路線。拆開來看,Type 5 和 HTML 一樣糟。

平均值會把問題藏起來。拆到路線這一層,答案才浮出來。

延伸閱讀:CDN 名詞一頁表、Load balancer 怎麼選後端、Bypass header 只在有規則的地方有效。或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉