Optimisation des retards réseau
Résumé succinct
Latence = somme des petits retards de la chaîne. L'amélioration se fait de manière systémique : réduire les « sauts » (Anycast/CDN), réduire les RTT (routes/QoS), réduire le « boulon » (DNS/TLS/TCP), garder les files d'attente courtes (AQM/ECN), minimiser les octets (compression/cache) et mesurer constamment p95/p99. Toute optimisation sans mesure est une divination.
Budget de latence : en quoi consiste le retard
Simplifiez la décomposition du TTFB (Time To First Byte) :
TTFB ≈ t_DNS + t_connect + t_TLS + t_queue + t_routing + t_app + t_first_byte
Où :
- t_DNS - résolvant le nom.
- t_connect est l'établissement de L4 (TCP/QUIC).
- t_TLS est une poignée de main TLS.
- t_queue/t_routing - files d'attente/transitions (tampon, surcharges, NAT).
- t_app : Traitement serveur jusqu'au premier octet.
L'objectif est de définir un SLO pour chaque terme et de le vérifier régulièrement.
SLO/métriques (repères)
DNS p95 : local ≤ 20-30 ms, global ≤ 80-120 ms.
TCP connect p95 : ≤ 80-120 ms régionaux, ≤ 200-250 ms interrégionaux.
TLS handshake p95: ≤ 80–120 мс (с OCSP stapling, resumption).
TTFB p95 (statique) : ≤ 120-150 ms par région.
TTFB p95 (API) : ≤ 200-300 ms.
Jitter p95 (UDP/RT): ≤ 15–30 мс; Perte ≤ 0. 1–0. 3%.
Alerts : croissance p95/p99, surtension de 'SYN retries', chute de 'resumption', croissance de 'ECN CE' ou 'packet los'.
DNS : démarrage rapide
Autorité anycast + récursifs proches (DoH/DoT si nécessaire).
Un court TTL (60-300 s) pour les noms dynamiques ; negative-TTL sous contrôle.
Cache DNS à côté de l'application ; 'prefetch' des enregistrements chauds.
Supprimer les déplacements superflus CNAME → CNAME → A/AAAA.
TLS/HTTP : moins de poignées de main, session plus rapide
Allumez TLS 1. 3, stapling OCSP, chaînes courtes CA.
Session resumption (tickets/IDs) и ALPN (`h2`, `h3`).
HTTP/2 : multiplexage, moins de connexions → en dessous de p95.
HTTP/3 (QUIC) : 0-RTT (idempotent uniquement), meilleure résistance à la perte/jitter.
Preconnect/Prewarm (edge/client) : ouvrez les connexions pour les domaines « chauds » à l'avance.
Transport : TCP vs QUIC et pile de noyau
TCP
Contrôle de la congestion moderne : BBR v2 (ou CUBIC si conservateur).
RACK/TLP pour le relais rapide ; allumez le SACK.
ECN + AQM (CoDel/FQ_CoDel) : réduit le bloat tampon et le jitter.
TCP Fast Open - éviter pour les requêtes state-changing ; les avantages sont controversés.
QUIC (HTTP/3)
Moins de « head lock » par rapport à TCP + TLS + HTTP/2.
Résistant à la reprise/perte ; mettre à jour l'implémentation (par exemple Envoy/HAProxy avec H3).
Suivez le UDP/443 et le MTU/fragmentation.
MTU/PMTUD et fragmentation
Un MTU unique de bout en bout ; pour les tunnels (IPsec/WireGuard/VXLAN), tenez compte de l'overhead.
Activer PMTUD et ICMP « Fragmentation needed ».
Pour QUIC - surveiller max datagramme et ne pas couper ICMP sur le périmètre.
Routage et physique du chemin
Anycast pour les API/fronts edge IP publics.
Geo/Latency routing (GSLB) + health-checks.
ECMP et BFD en usine (Leaf-Spine) pour exclure les mauvais sentiers en <1 s.
Harmonisez les aplinks/foires (IX) dans les régions de concentration des utilisateurs.
Files d'attente et QoS : garder les tampons courts
Classes : real-time (RT/VoIP), interactive (API), bulk (backups/ETL).
LLQ/WRR, priorité API/paiements sur bulk.
ECN (marquage CE) + AQM (CoDel/FQ_CoDel) sur les files d'attente limites.
Couper/tolérer les backups et les gros bleus des « minutes de pointe ».
NAT, proxy et middleboxes
Minimisez la cascade NAT/filtres.
Stateful middlebox est critique pour l'asymétrie des chemins : équilibre par 5-tuple, pin-ning des flux.
Prise en charge keepalive et idle-timauts intelligents pour les connexions à longue durée de vie (gRPC/WebSocket).
Cache et emplacement des données
CDN/origin-shield/tiered-cache - moins de randonnées en origin.
Assets versionnés (immutable, 1 an).
Court TTL + 'stale-while-revalidate' pour semi-dynamique.
Géo-placement : les données chaudes sont plus proches de l'utilisateur (read-replica/edge-KV) et l'entrée est dans « source de vérité ».
Optimisation au niveau de l'application
Réduisez le nombre de requêtes (bundling/HTTP/2 push n'est plus à la mode - mieux que prefetch/preconnect).
Réduire payload : compression (Brotli), formats d'image Web, protocoles binaires (gRPC).
L'idempotence des demandes → des retraits sûrs et des délais agressifs.
Async/streaming (SSE/gRPC streaming) pour réduire le TTFB.
Observabilité : que mesurer
Télémétrie client (RUM) : DNS/connect/TLS/TTFB, Geo/ASN, appareil.
Réseau : RTT, pertes, jitter, ECN CE/ECT (0/1), files d'interfaces, erreurs/débordements.
Транспорт: retransmits, out-of-order, cwnd/BBR state, handshake stats, resumption.
L7 : p50/p95/p99, error rate, payload size, histogrammes par itinéraire/RoR.
Segmentez les métriques par région/ASN/opérateur de télécommunications - c'est là que se cachent les « points chauds ».
Mini-playbooks
1) Audit rapide p95
1. Établir un budget de latence (DNS/TLS/connect/TTFB) à partir de RUM.
2. Mappez avec les métriques de réseau (RTT/loss/ECN) selon PoP/ASN.
3. Si 'connect' et 'TLS' dominent → activez le preconnect/resumption/HTTP/3.
4. Si 'TTFB'est élevé → cache/edge/réplique et optimisation de l'application.
2) Augmentation des pertes/jitter
1. Vérifiez uplink/interfaces (drops/files d'attente).
2. Activer/réduire AQM (FQ_CoDel), réduire la classe bulk.
3. Vérifier le chemin d'accès BFD/ECMP, exclure la lentille flash.
4. Pour les clients - soulever temporairement les retraits et réduire le temps entre eux.
3) Dégradation régionale
1. Commuter le GSLB sur le PoP adjacent ; withdraw Anycast/32 sur dégradé.
2. Réduire la TTL, activer 'stale-while-revalidate'.
3. Envoyer le statut à la page d'état, démarrer RCA.
4) Migration vers le HTTP/3
1. Ouvrir le UDP/443, activer le H3/ALPN 'h3'.
2. Effectuer A/B : comparer p95 TTFB et taux d'erreur.
3. Observer 'udp loss '/clients actifs/oscillations 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 (réseau Linux : ECN/SACK/RACK sous-système du noyau - paramètres exemples)
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 (style Cisco, concept)
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
Processus et pratiques opérationnelles
Capacity planning : offre en bande passante ≥ 30 % en heures de pointe.
Changement-contrôle : modifications canaries des itinéraires/RoR/passerelles.
Test PMTUD régulier et contrôle ICMP.
Documentation des chemins : où NAT/proxy/AQM/QoS, quels MTU, qui en est le propriétaire.
Accord de temporisation entre L7 et les retraits de réseau.
Spécificité pour iGaming/fintech
Temps des événements (matchs/tournois) : chauffage CDN/PoP, preconnect aux domaines critiques, augmentation temporaire du pool de respect, itinéraires « gris » pour les bots.
Étapes de paiement : classe QoS dédiée, Anycast-endpoint, chaînes courtes TLS et versions/cryptages rigoureux ; les retraits sont seulement idempotent.
Restrictions régionales/PSP : géo-routing + listes blanches ASN/IP ; egress pools fixes.
Réseaux mobiles : préférence de ChaCha20-Poly1305 (avec un AES-NI faible chez les clients), compression agressive et HTTP/3.
Chèque d'implémentation
- Budget de latence (DNS/TLS/connect/TTFB) et SLO pour chaque liaison.
- Anycast/Geo-routing pour API/edge publics, PoP de secours.
- TLS 1. 3, stapling OCSP, résumption ≥ 70 %, HTTP/2/3 inclus.
- BBR + FQ_CoDel, ECN, SACK; PMTUD fonctionne, ICMP n'est pas bloqué.
- MTU unique sur la chaîne, comptabilisation des tunnels de survol.
- QoS : classes real-time/interactive/bulk, AQM sur les interfaces de surcharge.
- CDN/Tiered-cache/Origin-shield; assets versionnés et SWR.
- RUM + métriques réseau selon Geo/ASN ; alerte sur p95/p99/ECN/perte.
- Pleybooks : dégradation de la région, augmentation des pertes, transfert du trafic.
Erreurs typiques
Blocage ICMP/PMTUD → fragmentation/rééducation et p95 élevé.
Les tampons « épais » sans AQM → le bloat et le jitter.
Les longues chaînes CA et l'absence de stapling OCSP sont → cher TLS.
Cascades NAT et asymétrie pour les filtres stateful → retrai/temporisation.
« Vary »/non versio assets redondants → CDN hit-ratio bas.
Pas de segmentation QoS → l'API est en concurrence avec les backups au sommet.
Résultat
L'optimisation des retards est une combinaison d'ingénierie réseau, de transport correct et d'économie de « boulons » sur DNS/TLS/cache. Mettre en œuvre Anycast/Geo-routing, TLS 1. 3 + resumption, HTTP/3, BBR + FQ_CoDel/ECN, consolez MTU, définissez QoS et SLO, mesurez p95/p99 et automatisez les playbacks. Les utilisateurs auront alors une réponse rapide même dans les minutes les plus « brûlantes », et la plate-forme - la prévisibilité et la marge de sécurité.