工程 · 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 怎麼選後端)。
我排除的三個嫌疑
- Query string:cache key 只保留一個參數,載入 HTML 的 script 也不帶 query string。
- 上傳介面:介面只上傳資料夾和存紀錄。HTML 要等頁面顯示時,browser 才去 fetch。
- HTML 專屬規則:property 對所有檔案類型只有一條 cache 規則(Akamai property:一份 edge 設定)。
一開始沒人懷疑 script,因為整體數字很健康。原因是 Type 1 佔了絕大部分的 script 流量,又走 bucket 路線。拆開來看,Type 5 和 HTML 一樣糟。
平均值會把問題藏起來。拆到路線這一層,答案才浮出來。
延伸閱讀:CDN 名詞一頁表、Load balancer 怎麼選後端、Bypass header 只在有規則的地方有效。或回到系列總覽。