優化網絡延遲
簡短摘要
潛伏期=鏈條上的小延遲之和。系統上可以實現改進:減少「跳躍」(Anycast/CDN),減少RTT(路由/QoS),降低「螺栓」(DNS/TLS/TCP),保持隊列短(AQM/ECN),最大限度地減少字節(壓縮/緩存),並不斷測量p95/p99。任何沒有測量的優化都是占蔔。
潛伏預算: 延遲由什麼組成
簡化TTFB分解(Time To First Byte):
TTFB ≈ t_DNS + t_connect + t_TLS + t_queue + t_routing + t_app + t_first_byte
其中:
- t_DNS就是這個名字。
- t_connect-建立L4 (TCP/QUIC)。
- t_TLS是TLS握手。
- t_queue/t_routing-隊列/過渡(緩沖、擁塞、NAT)。
- t_app是第一個字節之前的服務器處理。
目的是為每個項設置SLO並定期進行鉆探。
SLO/度量(基準)
DNS p 95:本地≤ 20-30毫秒,全球≤ 80-120毫秒。
TCP connect p95: ≤ 80-120 ms區域間,≤ 200-250 ms區域間。
TLS handshake p95: ≤ 80–120 мс (с OCSP stapling, resumption).
TTFB p95(靜態):≤ 120-150毫秒的區域性。
TTFB p95(API):≤ 200-300毫秒。
Jitter p95 (UDP/RT): ≤ 15–30 мс;損失≤ 0。1–0.3%.
Alerta:p95/p99的增長,「SYN retries」的激增,「resumption」的下降,「ECN CE」或「packet loss」的增長。
DNS: 快速啟動
Anycast權威人士+近距離招聘人員(必要時為DoH/DoT)。
用於動態名稱的短TTL(60-300 s);negative-TTL受到控制。
應用程序旁邊的DNS鍵;「prefetch」熱記錄。
排除CNAME → CNAME → A/AAAA的額外移動。
TLS/HTTP: 握手更少,會話更快
啟用TLS 1。3、OCSP stapling、CA短鏈。
Session resumption (tickets/IDs) и ALPN (`h2`, `h3`).
HTTP/2:多路復用,連接較少→低於p95。
HTTP/3(QUIC):0-RTT(僅適用於偶數),對損失/抖動的最佳抵抗力。
Preconnect/Prewarm(邊緣/客戶端):提前打開熱域的連接。
傳輸: TCP vs QUIC和核心堆棧
TCP
現代構想控制:BBR v2(或CUBIC,如果保守的話)。
快速中繼的RACK/TLP;啟用SACK。
ECN+AQM(CoDel/FQ_CoDel):減少緩沖液和擠壓。
TCP快速打開-避免進行狀態更改請求;好處是有爭議的。
QUIC (HTTP/3)
與TCP+TLS+HTTP/2相比,「頭鎖」更少。
抵禦重組/損失;更新實現(例如Envoy/HAProxy with H3)。
註意UDP/443和MTU/碎片。
MTU/PMTUD和碎片化
單個MTU終端;對於隧道(IPsec/WireGuard/VXLAN),請考慮越位。
啟用PMTUD和ICMP「需要分段」。
QUIC-監視max datagram並不要在外圍切斷ICMP。
路由和路徑物理學
用於公共IP API/邊緣前端的 Anycast。
Geo/Latency routing (GSLB) + health-checks.
ECMP和BFD在工廠(Leaf-Spine)中排除了<1 s的不良比喻。
在用戶集中區域協調指針/指針(IX)。
隊列和QoS: 保持緩沖區短
類:real-time (RT/VoIP), interactive (API), bulk (becaps/ETL)。
LLQ/WRR,將API/付款優先於散裝。
邊界隊列上的ECN(CE標記)+AQM(CoDel/FQ_CoDel)。
從「峰值分鐘」中切割/攜帶back和大彎曲。
NAT、代理和middleboxes
最小化NAT/過濾器級聯。
Stateful middlebox對路徑不對稱至關重要:5-tuple平衡,pin-ning流。
支持長壽命連接器(gRPC/WebSocket)的keepalive和合理的idle-taymout。
緩存和數據放置
CDN/origin-shield/tiered-cache-減少對起源的遠足。
轉化的刺客(immutable,1年)。
用於半揚聲器的短TTL+「stale-wile-revalidate」。
Geo-placement:熱數據更接近用戶(read-replica/edge-KV),寫入「真相源」。
應用程序級優化
減少請求的數量(bundling/HTTP/2推不再流行,最好是prefetch/preconnect)。
減少加載:壓縮(Brotli)、Web圖像格式、二進制協議(gRPC)。
請求的難度→安全的retrai和最激進的taymout。
Async/streaming(SSE/gRPC streaming)以降低TTFB。
可觀察性: 衡量什麼
客戶端遙測(RUM):DNS/connect/TLS/TTFB,Geo/ASN,設備。
網絡:RTT,損失,jitter,ECN CE/ECT(0/1),接口隊列,錯誤/溢出。
Транспорт: retransmits, out-of-order, cwnd/BBR state, handshake stats, resumption.
L7: p50/p95/p99, error rate, payload size, 路線/RoR直方圖。
按區域/ASN/電信運營商劃分度量-「熱點」隱藏在那裏。
迷你花花公子
1)快速審計p95
1.從RUM構建潛伏預算(DNS/TLS/connect/TTFB)。
2.通過PoP/ASN與網絡指標(RTT/loss/ECN)匹配。
3.如果「連接」和「TLS」占主導地位→則打開preconnect/resumption/HTTP/3。
4.如果「TTFB」高→緩存/邊緣/復制副本和應用程序優化。
2)損失/緊張激增
1.檢查uplink/接口 (drops/隊列)。
2.啟用/修飾AQM (FQ_CoDel),降低散裝類。
3.檢查BFD/ECMP路徑,排除閃爍的鏈接。
4.對於客戶-暫時擡起retrai並減少它們之間的時間。
3)區域退化
1.將GSLB切換到相鄰的PoP;withdraw Anycast/32降級。
2.降低TTL,激活「stale-wile-revalidate」。
3.將狀態發送到狀態頁面,啟動RCA。
4)遷移到HTTP/3
1.打開UDP/443,打開H3/ALPN 「h3」。
2.進行A/B:比較p95 TTFB和錯誤率。
3.觀察「udp loss」/活躍客戶/cwnd振蕩。
Config Spargalki
Nginx (HTTP/2, OCSP, TLS 1.3, Brotli)
nginx server {
listen 443 ssl http2 reuseport;
ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_stapling on; ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000" always;
Compression brotli on; brotli_comp_level 5; gzip on;
Cache static location/static/{
add_header Cache-Control "public, max-age=31536000, immutable" always;
try_files $uri =404;
}
Proxy to API location/api/{
proxy_set_header Connection "";
proxy_http_version 1. 1;
proxy_read_timeout 5s;
proxy_connect_timeout 1s;
proxy_pass https://backend;
}
}
sysctl (Linux網絡: ECN/SACK/RACK內核子系統-大致參數)
bash
SACK/RACK/TLP are typically included in modern cores; specify sysctl -w net for your distribution. ipv4. tcp_sack=1 sysctl -w net. ipv4. tcp_ecn=1 sysctl -w net. ipv4. tcp_fastopen=0 # carefully with TFO sysctl -w net. core. default_qdisc=fq_codel sysctl -w net. ipv4. tcp_congestion_control=bbr
QoS(思科樣式,概念)
class-map match-any REALTIME match dscp ef class-map match-any INTERACTIVE match dscp af31 af21 class-map match-any BULK match dscp cs1 policy-map WAN-QOS class REALTIME priority percent 10 class INTERACTIVE bandwidth percent 50 class BULK bandwidth percent 20 random-detect ecn
流程和操作實踐
容量規劃:在高峰時段,容量庫存≥ 30%。
更改控制:路線/RoR/網關的金絲雀更改。
常規的PMTUD測試和ICMP控制。
路徑文檔:其中NAT/代理人/AQM/QoS,哪些是MTU,誰是所有者。
L7和網絡中繼之間的定時協議。
iGaming/fintech的細節
事件時間(比賽/錦標賽):加熱CDN/PoP,preconnect到關鍵域,暫時的恢復池增加,機器人的「灰色」路線。
支付步驟:專用的QoS類,Anycast尾聲,TLS短鏈和嚴格的版本/密碼;retrai只是偶然的。
區域限制/PSP:geo-routing+白色ASN/IP列表;固定的egress池。
移動網絡:偏愛ChaCha20-Poly1305(客戶的AES-NI較弱),積極壓縮和HTTP/3。
實施支票
- 每個鏈接的潛伏預算(DNS/TLS/connect/TTFB)和SLO。
- Anycast/Geo-routing for public API/edge,備份PoP。
[] TLS 1.3、OCSP stapling, resumption ≥ 70%, HTTP/2/3包括在內。
[] BBR + FQ_CoDel, ECN, SACK;PMTUD正在運行,ICMP沒有鎖定。
- 單個MTU沿鏈,隧道過頭會計。
- QoS: real-time/interactive/bulk類,重載接口上的AQM。
[] CDN/Tiered-cache/Origin-shield;轉化代理和SWR。
- RUM+基於Geo/ASN的網絡指標;p95/p99/ECN/損失。
- 花花公子:區域退化,損失激增,交通轉移。
典型錯誤
ICMP/PMTUD鎖定→碎片/重新編輯和高位p95。
沒有AQM的「厚」緩沖區→緩沖區和jitter。
長的CA鏈和缺乏OCSP鏈→昂貴的TLS。
靜態濾波器→ retrai/taymout的NAT級聯和不對稱性。
過量的「Vary」/不忠實的刺客 →低的CDN命中率。
沒有QoS細分→ API在高峰期與後備隊競爭。
底線
延遲優化是網絡工程,正確傳輸和節省DNS/TLS/緩存上的「螺栓」的組合。實施Anycast/Geo-routing, TLS 1.3+恢復,HTTP/3,BBR+FQ_CoDel/ECN,協調MTU,設置QoS和SLO,測量p95/p99並自動化花花公子。然後用戶即使在最「燃燒」的分鐘也會得到快速響應,平臺是可預測性和安全邊際。