CDN優化和latency緩解
1)目標及延誤圖
Latency=DNS+TCP/TLS+TTFB (服務器/orijin/緩存)+內容交付(RTT ×卷)+客戶端渲染。
優化=減少RTT數量,減少字節並將計算/緩存傳遞到更接近用戶的位置。
2) CDN體系結構
Anycast POP是通過BGP路由的近端節點。
Tiered caching/Origin Shield是「傘形」中間層,可減少Orijin上的暴風雨。
Geo -/Regional routing-綁定tenant/管轄權(數據主權、許可證)。
Failover-備用橙色/區域,健康樣本和快速開關。
3)現金: 鑰匙,標題,策略
3.1緩存密鑰(緩存密鑰)
默認值為「scheme+host+path+?query」。
僅添加所需的參數('?v=','?lang=','?tenant=')。其余的是ignore-params。
「Vary」是最小值:「Accept-Encoding」,「Accept-Language」(如果確實需要),「授權」通常會破壞緩存。
3.2個政策
公共靜態:'Cache-Control:public,max-age=31536000,immutable'+rev(名稱中的hash)。
半動力學(目錄,規則,FAQ):'s-maxage=300,stale-wile-revalidate=600,stale-if-error=86400'。
API-GET:使用ETag/Last-Modified, 「SWR/SIE」,啟用coalescing(一個熱鍵請求)。
私有:個人響應-通過邊緣計算(ESI/kv)或per tenant緩存在周邊。
3.3反風暴
要求coalescing-捕捉並發小姐查詢。
Serve-stale-在橙色發生故障時放棄過時的對象。
Background revalidation-在背景中更新。
4)HTTP/2-3,TCP/TLS和早期回報
HTTP/2:多路復用,標題壓縮;限制主要標題「max concurrent streams」。
HTTP/3 (QUIC):TTFB因移動/高損耗而大幅下降;留意起始閾值和返回。
TLS 1.3: 1-RTT handshake;OCSP stapling;HSTS.
0-RTT:僅適用於等效的「GET」,如果考慮了重播風險。
103 Early Hints:用於關鍵資源的早期「Link: rel=preload」。
Preconnect / DNS-prefetch: ``.
5)邊緣計算和「精細個性化」
在邊緣:頭條新聞普查,地理/特南特固定,A/B標記,易於個性化而無需查詢奧裏金。
規則:不將PII存儲在POP節點上;僅緩存單元/公共數據。
6)優化媒體和格式
圖像:自動轉換為WebP/AVIF,重新調整邊緣,'srcset/sizes'和'lazyload'。
壓縮: Brotli for text (HTML/CSS/JS/JSON), gzip fallback.
視頻:HLS/DASH,CDN-segment教練,「preload=metadata」,海報。
字體:subset+'font display:swap';以長緩存主持。
關鍵CSS:在線第一屏幕;其余的是async。
7) API模式和緩存
Idempotent GET-通過查詢密鑰(包括數據版本)緩存。
ETag:強有效載荷哈希+「If-None-Match」。
Surrogate-Control(CDN特征)可與客戶的「Cache-Control」區分開。
Signed URL-用於私有靜態/媒體。
GraphQL:通過操作/變量規範化鍵鍵;使用分區緩存/resolver緩存。
WebSockets:對於real-time-縮減消息、壓縮(permessage-deflate),將WS shards放在更靠近用戶的位置。
8)配置示例
8.1 NGINX (Orijin:緩存API-GET)
nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}
8.2 Fastly VCL (SWR, coalescing, ignore cookies)
vcl sub vcl_recv {
set req. hash_ignore_busy = true; # coalescing if (req. url. qs ~ "^(?!.(lang v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}
sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}
8.3 Cloudflare (Transform Rules, Cache Rules, Early Hints — псевдо)
json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}
9)移動網絡和「不穩定」互聯網
積極使用HTTP/3;減小關鍵路徑的大小(HTML+critical CSS <14 KB)。
優先H2/H3:優先排序(HTML→CSS→JS→media稍後)。
Retray policy with jitter, idempotency for API。
Size-budgets和bandling:代碼分割,deferred JS,刪除未使用的CSS/JS。
10)可觀察性和SLO
RUM:按地區/ASN/tenant分列的TTFB,LCP,INP,CLS;分布p95/p99。
合成:POP am上的控制路線「/health/cdn」。
緩存度量: 重讀和按鍵;origin fetch rate;coalescing savings.
Alerts:命中率下降,起源的增長,H3葉降解,5xx在盾牌上。
11) iGaming/財務細節
遊戲目錄/系數: 簡短的「最大」+SWR;region-aware ключ (`tenant|region|lang`).
事件高峰(比賽,抽簽):高速緩存(戰前)加熱,重度個性化「凍結」,鏡子來源。
付費/櫃:不緩存私人,但通過H3+edge-TLS和近距離區域加速。
轄區:按區域劃分的域/路徑;「Vary:X-Region」控制。
12)反模式
'Vary:'連續所有;緩存密鑰取決於額外的cookie/標頭。
缺少SWR/SIE →短暫的橙色故障中的「黑屏」。
清除緩存「遍歷」而不是按標簽/鍵進行點障礙。
沒有名稱修訂和「max-age=0」的資源。
「授權」的全局deny-cache,即使在公共場合也是如此。
缺乏coalescing →奧裏金風暴。
POP上過早的「沈重」個性化。
13)準備就緒支票清單
[] Anycast POP + tiered/shield;健康檢查和起源失敗。
- 緩存密鑰最小;忽略多余的查詢/cookie;「Surrogate-Control」。
- SWR/SIE已啟用,coalescing處於活動狀態;錯誤時的serve-stale。
- HTTP/3包括在內;TLS 1.3;103 Early Hints專為關鍵資源而定制。
- 圖像:AVIF/WebP,邊緣重塑;Brotli用於歌詞。
[] API-GET с ETag/Last-Modified;等效性/恢復性;不要緩存私有配置文件。
- Preconnect到靜態域;關鍵CSS入口。
- 度量標準:按地區/特南特分列的hit-ratio、origin-egress、TTFB/LCP p 95、H3份額。
- 事件前緩存預熱計劃;點障礙(標簽)。
- Vary/keys/TTL文件;事件花花公子(命中率下降)。
14) TL;DR
將徒步旅行減少到最低限度:tiered/shield+正確的cache-keys+SWR/SIE+coalescing。打開HTTP/3/TLS 1。3、使用103 Early Hints和preconnect。在邊緣壓縮和轉換媒體,在關鍵的CSS上線。對於API,是ETag,整潔的「Vary」,相容性和明智的「GET」緩存。測量熱值、TTFB/LCP p 95、起源egress和預熱快取。