优化网络延迟
简短摘要
潜伏期=链条上的小延迟之和。系统上可以实现改进:减少"跳跃"(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并自动化花花公子。然后用户即使在最"燃烧"的分钟也会得到快速响应,平台是可预测性和安全边际。