Optymalizacja opóźnień sieci
Krótkie podsumowanie
Opóźnienie = suma małych opóźnień wzdłuż łańcucha. Poprawa jest osiągnięta systemowo: zmniejszenie „chmielu” (Anycast/CDN), zmniejszenie RTT (trasy/QoS), zmniejszenie „śruby” (DNS/TLS/TCP), utrzymanie krótkich kolejek (AQM/ECN), zminimalizowanie bajtów (kompresja/pamięć podręczna) i ciągle mierzyć p95/p99. Każda optymalizacja bez pomiarów jest wróżeniem.
Budżet opóźnienia: jakie opóźnienie obejmuje
Uprośćmy rozkład TTFB (Time To First Byte):
TTFB ≈ t_DNS + t_connect + t_TLS + t_queue + t_routing + t_app + t_first_byte
Ubi:
- t_DNS - rozdzielczość nazwy.
- t_connect - Zakład L4 (TCP/QUIC).
- t_TLS - Uścisk dłoni TLS.
- t_queue/t_routing - kolejki/przejścia (buforowanie, przeciążenia, NAT).
- t_app - przetwarzanie serwera do pierwszego bajtu.
Celem jest ustalenie SLO dla każdej kadencji i regularne sprawdzanie.
SLO/mierniki
DNS p95: lokalnie ≤ 20-30 ms, globalnie ≤ 80-120 ms.
TCP połączyć p95: ≤ 80-120 ms regionalnie, ≤ 200-250 ms międzyregionalnie.
Uścisk dłoni TLS p95: ≤ 80-120 мz.
TTFB p95 (statyczny): ≤ 120-150 ms regionalnie.
TTFB p95 (API): ≤ 200-300 ms.
Jitter p95 (UDP/RT): ≤ 15-30 сто; strata ≤ 0. 1–0. 3%.
Alerty: wzrost p95/p99, wzrost „SYN wznawia”, spadek „wznowienie”, wzrost „ECN CE” lub „strata pakietu”.
Szybki start DNS
Anycast władze + zamknięte rekursje (DoH/DoT w razie potrzeby).
Krótki TTL (60-300 s) dla nazw dynamicznych; ujemny TTL pod kontrolą.
Pamięć podręczna DNS obok aplikacji; „prefetch” gorących rekordów.
Wyklucz zbędne ruchy CNAME → CNAME → A/AAAA.
TLS/HTTP: mniej uścisków dłoni, szybsze sesje
Włącz TLS 1. 3, zszywanie OCSP, krótkie łańcuchy CA.
Wznowienie sesji (bilety/ID) pole ALPN ('h2', 'h3').
HTTP/2: multipleksowanie, mniej połączeń → poniżej p95.
HTTP/3 (QUIC): 0-RTT (tylko idempotent), lepsza odporność na straty/jitter.
Preconnect/Prewarm (krawędź/klient): z góry otwarte połączenia dla gorących domen.
Transport: TCP vs QUIC i stos jądra
TCP
Nowoczesna kontrola zatorów: BBR v2 (lub CUBIC, jeśli konserwatywny).
RACK/TLP do szybkiego retransmisji; Włącz SACK.
ECN + AQM (CoDel/FQ_CoDel): redukuje blok buforowy i jitter.
TCP Fast Open - unikać zmieniających się żądań państwa; korzyść jest kontrowersyjna.
KWIC (HTTP/3)
Mniej „blokady głowy” w porównaniu do TCP + TLS + HTTP/2.
Odporny na ponowne zamawianie/straty; Aktualizacja implementacji (na przykład Wysłannik/HAProxy z H3).
Monitoruj UDP/443 i MTU/fragmentację.
MTU/PMTUD i fragmentacja
Pojedyncze MTU typu end-to-end; w przypadku tuneli (IPsec/WireGuard/VXLAN) należy rozważyć koszty ogólne.
Włącz PMTUD i ICMP „Fragmentacja potrzebna”.
Dla QUIC - monitorować maks. Datagram i nie przeciąć ICMP na obwodzie.
Routing i fizyka ścieżki
Anycast dla publicznych API IP/krawędzi frontów.
Geo/Latency routing (GSLB) + kontrole zdrowotne.
ECMP i BFD w fabryce (Leaf-Spine) w celu wyeliminowania złych szlaków w <1 s.
Wyrównać aplinki/uczty (IX) w regionach koncentracji użytkowników.
Kolejki i QoS: Trzymaj bufory krótkie
Klasy: w czasie rzeczywistym (RT/VoIP), interaktywny (API), luzem (kopie zapasowe/ETL).
LLQ/WRR, priorytety API/płatności luzem.
ECN (oznakowanie CE) + AQM (CoDel/FQ_CoDel) w kolejkach krawędzi.
Wyciąć/przenieść kopie zapasowe i duże siniaki z „szczytowych minut”.
NAT, proxy i middleboxy
Zminimalizuj kaskadę NAT/filtra.
Statywny middlebox jest krytyczny dla asymetrii ścieżki: równowaga nad 5-krotką, ningi pin-ning.
Utrzymanie trwałego wsparcia i rozsądnych terminów bezczynności dla długotrwałych połączeń (gRPC/WebSocket).
Umieszczenie pamięci podręcznej i danych
CDN/origin-shield/level-cache - mniej wycieczek do pochodzenia.
Aktywa wersjonowane (niezmienne, 1 rok).
Krótki TTL + „stale-while-revalidate” dla pół-dynamiki.
Geo-umieszczenie: gorące dane są bliżej użytkownika (odczyt-replika/krawędź-KV), a pisanie do „źródła prawdy”.
Optymalizacja poziomu aplikacji
Zmniejszyć liczbę żądań (push bundling/HTTP/2 nie są już w modzie - prefetch/preconnect jest lepiej).
Redukcja ładunku: kompresja (Brotli), formaty obrazu internetowego, protokoły binarne (gRPC).
Poproś o idempotencję → bezpieczne przekaźniki i agresywne timeouts.
Async/streaming (SSE/gRPC streaming) w celu zmniejszenia TTFB.
Obserwowalność: co mierzyć
Telemetria kliencka (RUM): DNS/connect/TLS/TTFB, Geo/ASN, urządzenie.
Sieć: RTT, strata, jitter, ECN CE/ECT (0/1), kolejki interfejsów, błędy/przepełnienia.
Транстора: retransmits, out-of-order, cwnd/BBR state, handshake stats, wznowienie.
L7: p50/p95/p99, częstość błędów, wielkość ładunku, histogramy drogi/PoP.
Metryka segmentu według regionu/ASN/przewoźnik - tutaj ukrywają się hotspoty.
Mini playbooks
1) Szybki audyt p95
1. Zbuduj budżet opóźnienia (DNS/TLS/connect/TTFB) z RUM.
2. Mapa do mierników sieci (RTT/loss/ECN) przez PoP/ASN.
3. Jeśli 'connnect' i 'TLS' dominują → włącz preconnect/resumption/HTTP/3.
4. Jeśli 'TTFB' jest wysoki → pamięci podręcznej/krawędzi/repliki i optymalizacji aplikacji.
2) Strata/jitter spike
1. Sprawdź uplink/interfejsy (krople/kolejki).
2. Włącz/złagodzić AQM (FQ_CoDel), zmniejszyć klasę luzem.
3. Sprawdź ścieżkę BFD/ECMP, wyłącz łącze klap.
4. Dla klientów, tymczasowo podnieść przekaźniki i skrócić czas między.
3) Degradacja regionalna
1. Przełącz GSLB na sąsiedni PoP; wycofać Anycast/32 po zdegradowaniu.
2. Zmniejszyć TTL, aktywować „stale-while-revalidate”.
3. Wyślij status na stronę stanu, uruchom RCA.
4) Migracja do HTTP/3
1. Otwórz UDP/443, włącz H3/ALPN 'h3'.
2. Conduct A/B: porównaj p95 TTFB i wskaźnik błędów.
3. Obserwuj 'udp loss '/aktywnych klientów/cwnd oscylacje.
Łóżeczko Config
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 (sieć Linuksa: podsystem jądra ECN/SACK/RACK - przybliżone parametry)
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 (w stylu Cisco, koncepcja)
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
Procesy i praktyki operacyjne
Planowanie zdolności: margines wydajności ≥ 30% w godzinach szczytu.
Zmiana kontroli: kanaryjskie zmiany tras/PoR/bramy.
Regularny test PMTUD i kontrola ICMP.
Dokumentacja ścieżki: gdzie jest NAT/proxy/AQM/QoS, które MTU, który jest właścicielem.
Umowa Timeout między L7 a przekaźnikami sieci.
iGaming/specyficzne dla fintechu
Czas zdarzenia (mecze/turnieje): ocieplenie CDN/PoP, wstępne połączenie z domenami krytycznymi, tymczasowy wzrost puli wznowienia, szare trasy dla botów.
Etapy płatności: dedykowane klasy QoS, punkty końcowe Anycast, krótkie łańcuchy TLS i ścisłe wersje/szyfry; rekolekcje są tylko idempotentne.
Ograniczenia regionalne/PSP: geo-routing + whitelist ASN/IP; stałe baseny wyjściowe.
Sieci mobilne: preferencje dla ChaCha20-Poly1305 (słabe AES-NI u klientów), agresywna kompresja i HTTP/3.
Lista kontrolna implementacji
- Budżet opóźnienia (DNS/TLS/connect/TTFB) i SLO na łącze.
- Anycast/Geo-routing dla publicznych API/edge, backup PoP.
- TLS 1. 3, zszywanie OCSP, wznowienie ≥ 70%, w tym HTTP/2/3.
- BBR + FQ_CoDel, ECN, SACK; PMTUD działa, ICMP nie jest blokowany.
- Pojedynczy MTU wzdłuż łańcucha, odpowiadający za napowietrzne tunele.
- QoS: w czasie rzeczywistym/interaktywny/luzem, klasy AQM dotyczące interfejsów przeciążania.
- CDN/Tiered-cache/Origin-shield; aktywa wersjonowane i SWR.
- Metryki sieci RUM + Geo/ASN; wpisy do p95/p99/ECN/losses.
- Playbooks: degradacja regionu, wzrost strat, transfer ruchu.
Częste błędy
Blokowanie ICMP/PMTUD → fragmentacja/odsprzedaż i wysoka p95.
„Grube” bufory bez AQM → blok buforowy i jitter.
Długie łańcuchy CA i bez zszywania OCSP → drogie TLS.
Etapy NAT i asymetria dla filtrów stacjonarnych → retras/timeouts.
Nadmierne 'zróżnicowanie '/aktywa bez weryfikacji → niski współczynnik trafienia CDN.
Brak segmentacji QoS → API konkuruje z kopiami zapasowymi na szczycie.
Razem
Optymalizacja opóźnień jest połączeniem inżynierii sieci, odpowiedniego transportu i oszczędności „śruby” na DNS/TLS/pamięci podręcznej. Wdrożenie Anycast/Geo-routing, TLS 1. 3 + wznowienie, HTTP/3, BBR + FQ_CoDel/ECN, negocjować MTU, ustawić QoS i SLO, zmierzyć p95/p99 i zautomatyzować playbooks. Wtedy użytkownicy otrzymają szybką odpowiedź nawet w najbardziej „palących” minutach, a platforma - przewidywalność i margines bezpieczeństwa.