Tecnologia e infrastruttura → Latency e ottimizzazione della risposta API
Latency e ottimizzazione della risposta API
1) Cos'è latency e perché è importante
Latency - Rete (DNS + TCP + TLS + RTT), bilanciatore/gateway, applicazione, database/cache/coda, integrazioni esterne. Il P95/P99 è critico per le aziende, non la media: è la coda che distrugge UX, CR e SLO.
SLI di base:- 'SLI _ latency _ P95 = P95 (tempo di risposta) 'in 5/30 minuti
- 'SLI _ latency _ P99 = P99 (tempo di risposta) '
- 'SLI _ queue _ time = P95 (tempo _ in _ coda _ worker) '
- 'SLI _ ext _ call _ P95 = P95 (latitanza _ provider _ esterni) '
2) Mappa delle fonti di ritardo (e dove scavare)
1. Rete e protocolli: DNS, TCP handshakes, TLS, head-of-line (HTTP/1. 1), perdita di pacchetti, BBR/ECN.
2. Gateway/bilanciatore: health-check lenti, timeout nevalidici, sotto caldo.
3. Applicazione: blocchi, GC/stop-the-world, sincroni I/O, content.
4. Archivi: richieste di database lente, nessun indice, pagine fredde.
5. Servizi esterni: PSP/KYC, API di terze parti (SLA strette).
6. Code e giubbotti di sfondo: worker sopraelevati, nessun backpressure.
7. Cache/edge: errori della cache, TTL debole, invalidità neurale.
3) Rete e protocolli
3. 1 DNS/TCP/TLS
DNS prefetch/preconnect sul fronte a lungo termine IP al PSP.
Keep-Alive/connection pooling nei clienti sul server - Aggregare le connessioni.
TLS: resumption/Pression Tickets, un pacchetto di codici moderno; Evitare lo 0-RTT per operazioni idempotate non sicure.
TCP: disattiva Nagle ('TCP _ NODELAY') per le chat/pacchetti minori; tun'iniziale window ', abilitare BBR se necessario.
3. 2 HTTP/2 и HTTP/3
HTTP/2: il multiplexing riduce i blocchi HOL HTTP/1. 1; Tenere traccia delle priorità di flusso.
HTTP/3/QUIC: sotto l'impatto delle perdite/RTT; Utile sulla rete mobile/internazionale.
Header compressione: HPACK/QPACK, ma conserva le dimensioni intelligenti delle intestazioni.
3. 3 Bilanciamento/routing
Locality-aware, EWMA/least-sollest contro le istanze hot.
Fluttuare sessioni solo se c'è stato; altrimenti stateless + cache/sessione condivisa.
4) Formati, carica utile, compressione
Comprimi: Brotli (testo), Gzip come fallback; formati binari Protobuf/Avro per gRPC/API interne.
Riduce payload: campi selettivi ('fields =...'), paginazione, GET condizionati (ETAG/If-None-Match), risposte delta.
GraphQL: percisted queries, proibizione di frammenti grassi, limiti di profondità e complessità.
Evitare N + 1: gioielli/ricomposizione, endpoint per apparecchiature.
5) Timeout, retrai, idampotenza
Timeout della catena: client <gateway <upp <archivio/chiamata esterna.
Retrai con backoff + jitter, solo per errori temporali; esporre i budgets sui retrai.
Idampotenza: chiave/token della query + salvataggio del risultato; i retrai non devono duplicare le operazioni (soprattutto le finanze).
Circus Breaker: apri in caso di degrado; hedged/backup richiesti per «code» (inviare il duplicato tramite P95).
6) Code, asincronicità e backpressure
Non bloccare il percorso sincrono: operazioni pesanti (KYC scan, report) - sullo sfondo.
Backpressure: limitare il consumo dalla coda, fissare il parallelismo.
Batching/coalescing: unisci le operazioni di piccole dimensioni (ad esempio, aggiornamento dei bilanci con aggregazione).
Outbox/Inbox: consegna degli eventi garantita in caso di guasto.
7) Allegato: rate e pool
Pool di connessioni a database/cache/NTCR; Limitateli a non soffocare il backend.
JVM: profila GC (G1/ZGC), evita allocazioni grandi; .NET - ThreadPool/async; Node. js - Non bloccare l'event loop, estrarre il CPU-pesante.
Python: driver asincroni (asyncpg/httpx), uvloop; Attività CPU tramite worker-pool.
Warm-up: scaldare JIT/cache, «warm pools» delle istanze ai picchi.
8) Database e cache
Indici e piani: «EXPLORER» regolare, vuoto automatico/analisi, limite di scene.
Connection pooling (PgBouncer/Multiplexing), transazioni brevi.
Strategie cache: read-through, write-through/write-behind; TTL + invalidità per eventi.
Charding/repliche - Lettura da slave, chiavi hot - cache locale (near-cache).
9) Cache e edge
CDN/edge per statici/directory, cache API (se sicuro) per Cache-Control, ETAG.
Stale-while-revalidate e stale-if-errore per la stabilità UX.
Distribuzione geo: il RR/regione più vicina riduce la RTT.
10) Cartelli architettonici contro code P99
Hedged recests - Duplicare la richiesta lenta per un'altra istanza dopo la soglia.
Richiest collapsing: una richiesta «guida» al database, gli altri attendono il risultato (evita le tempeste).
Priorization: operazioni VIP/critiche - pool/priorità selezionati.
Graceful degradation - Tagliare i campi/widget secondari durante il sovraccarico.
11) Confighi (circa)
11. 1 NGINX (timeout/compressione)
nginx proxy_connect_timeout 1s;
proxy_send_timeout 2s;
proxy_read_timeout 2s;
send_timeout 2s;
gzip on;
gzip_types application/json text/plain text/css application/javascript;
11. 2 Envoy (hedge + retry budget)
yaml
RetryPolicy:
retry_on: 5xx,reset,connect-failure num_retries: 2 per_try_timeout: 300ms retry_back_off: { base_interval: 50ms, max_interval: 200ms }
retry_priority:
name: envoy. retry_priorities. previous_priorities
HedgePolicy:
hedge_on_per_try_timeout: true initial_requests: 1 additional_request_chance: 0. 2
11. 3 gRPC (client)
json
{
"methodConfig": [{
"name": [{"service": "payments. Service"}],
"timeout": "0. 8s",
"retryPolicy": {
"maxAttempts": 3,
"initialBackoff": "0. 05s",
"maxBackoff": "0. 2s",
"backoffMultiplier": 2. 0,
"retryableStatusCodes": ["UNAVAILABLE","DEADLINE_EXCEEDED"]
}
}]
}
12) Osservabilità: misurare correttamente
RED/USE metriche + trailer OTel: 'trace _ id' attraverso gateway-OBD-API esterne.
Etichette singole: «api _ versione», «region», «partner», «endpoint».
Dashboard: P50/P95/P99, queue time, errore mix, retry rate, cache hit.
Synthetics da paesi/ASN (TR/BR/EU) e da percorsi critici (reg→depozit, payout).
- Core API: «P95-250ms», «P99-500ms» (30 giorni)
- PSP webhook elaborazione "P99" 60s "con retrai
- Catalogo Freshness: 'P95 ≤ 30s'
13) FinOps и latency
I millisecondi costano denaro: valuti $/mc vincite in CR/ARPU.
Right-sizing: più veloce è sempre più costoso; la cache/formati intelligenti sono economici e veloci.
Egress/edge: CDN riduce la RTT e il costo del traffico in uscita dalla regione.
14) Assegno foglio di ottimizzazione (passo passo)
1. Metti SLO e misura le code (P95/P99) per endpoint/regioni/partner.
2. Attivare HTTP/2/3, TLS respumption, connessioni a lunga durata.
3. Stringere e perdere le risposte: Brotli/Gzip, campi su richiesta, paginazione, ETag.
4. Impostare timeout/retrai/breaker; aggiungete l'idipotenza.
5. Cache/edge: hit-rate e TTL corretti; modalità stale.
6. OBD: indici, piani, pool, repliche; Eliminare N + 1.
7. Asincronizzare pesante: code, batching, backpressure.
8. Hedge/collapse/priority per percorsi critici.
9. Warm-up e lo skailing predittivo ai picchi (tornei/partite).
10. Sintetico e alert su P99 e queue time; ringhiera regolare.
15) Anti-pattern
Un timeout globale per tutto e i retrai senza controllo (DDOS se stessi).
Riempire le sessioni senza dover → are le noci calde.
Grandi JSON senza compressione e filtri dei campi.
Chiamate sincroni per API esterne lente nel percorso caldo.
Nessun indice o limite nel database; N + 1 in ORM.
Nessuna cache/edge né ETag; Risposte costanti e complete.
Un mix di errori tecnici e aziendali in un unico cestino ritrasferibile.
16) Contesto iGaming/fintech: note pratiche
(CR): priorità delle rotte, pool separato, P99-500ms; degrado - disattivare le decorazioni dell'UI.
Integrazioni PSP: limiti concarreni, retrai per codici temporali, connettori warm, egress-IP regionali.
Operazioni VIP: gruppo/priorità garantito, oltre le code generali.
Tornei/Ivent: scale predittiva, riscaldamento della cache, prefetch.
Report: async e SLA su freshness, non blocca il percorso protettivo.
Totale
L'ottimizzazione latency è una disciplina di bilanciamento: rete (HTTP/2/3, TLS), protocolli e cache, timeout/retrai, BB/cache, pattern asincroni e osservabilità P95/P99. Focalizzandoci sulla coda e eliminando le «gole strette», stabilizzate la risposta, migliorate la conversione e riducete il costo del millisecondo, dove ciò influisce davvero sulle attività.