Tecnologia e Infraestrutura → Latency e otimização da API
Latency e otimização da resposta API
1) O que é «latency» e por que é importante
Latency - O atraso total da solicitação: rede (DNS + TCP + TLS + PTT), balanço/gateway, aplicativo, BD/cachês/filas, integração externa. Para os negócios, o P95/P99 é crítico, e não o médio, que é «cauda» que derruba UX, CR e SLO.
SLI básico:- 'SLI _ latency _ P95 = P95 (tempo de resposta)' em 5/30 minutos
- 'SLI _ latency _ P99 = P99 (tempo de resposta)'
- 'SLI _ queue _ time = P95 (tempo _ na _ fila _ worker)'
- 'SLI _ ext _ call _ P95 = P95 (latência _ provedores _ externos)'
2) Mapa de fontes de atrasos (e onde cavar)
1. Rede e protocolos: DNS, TCP handshakes, TLS, head-of-line (HTTP/1. 1), perda de pacotes, BBR/ECN.
2. Gateway/balanço: health-check lentos, temporizadores não aleatórios, poda quente.
3. Aplicativo: bloqueios, GC/stop-the-world, sincronizados I/O, content.
4. Armazenamento: banco de dados lento, falta de índices, páginas frias.
5. Serviços externos: PSP/KYC, API de terceiros (SLA estreito).
6. Filas e pés de fundo: workers rearranjados, sem backpressure.
7. Cash/edge: falhas de cachê, TTL fraco, deficiência não portátil.
3) Rede e protocolos
3. 1 DNS/TCP/TLS
O DNS prefetch/precisnect na frente que dura o IP para o PSP.
Keep-Alive/connation pooling nos clientes; no servidor - Agregue conexões.
TLS: resumpition/Sessions Tickets, um pacote moderno de códigos; evite o 0-PTT para operações idumpotentes não seguras.
TCP: desabilite o Nagle ('TCP _ NODELAY') para bate-papos/pacotes menores; tune 'inicial window', ative o BBR onde for adequado.
3. 2 HTTP/2 и HTTP/3
HTTP/2: multiplexagem reduz bloqueios HOL HTTP/1. 1; acompanhe as prioridades dos fluxos.
HTTP/3/QUIC: abaixo do impacto da perda/RPT; útil na rede móvel/internacional.
HPACK/QPACK, mas mantenha o tamanho dos cabeçalhos razoável.
3. 3 Balanceamento/routing
Locality-aware (zonalidade), EWMA/least-request contra instâncias «quentes».
Desfrutar sessões - apenas se houver um state; caso contrário, stateless + dinheiro compartilhado/sessão.
4) Formatos, carga útil, compressão
Contrate: Brotli (texto), Gzip como fallback; formatos binários Protobuf/Avro para gRPC/API interna.
Reduza o payload: campos seletivos ('fields =...'), paginação, GET condicional (ETAG/If-None-Match), respostas delta.
GraphQL: persisted queries, proibição de fatias «gordurosas», limites de profundidade e complexidade.
Evite N + 1: joynos/recomposição, batch-endpoint para máquinas.
5) Timeouts, retrações, idempotação
Temporizações de cadeia: cliente <gateway <upp <armazenamento/chamada externa.
Retrai com backoff + jitter, apenas para erros temporários; exponha os budgets em retraias.
Idempotidade: chave/token do pedido + salvar o resultado; os retraias não devem duplicar as operações (especialmente as finanças).
Circuito Breaker: abra na degradação; hedged/backup requests para «caudas» (enviar duplicado via P95).
6) Filas, asincronidade e backpressure
Não bloqueie o caminho sincronizado: operações pesadas (KYC Scan, Relatórios) - no fundo.
Backpressure: Limite o consumo da fila, construa o paralelismo.
Batching/coalescing: combine operações menores (por exemplo, atualizar balanços com agregação).
Outbox/Inbox: entrega de eventos garantida em casos de falha.
7) Aplicativo: Rants e Pulas
Poulas de conexões de BD/caixas/NTTR; limite-os para não «sufocar» o backand.
JVM: Perfil GC (G1/ZGC), evite alocações maiores; .NET - ThreadPool/async; Node. js - não bloqueie event loop, leve o CPU pesado.
Python: drivers asinhrônicos (asyncpg/httpx), uvloop; tarefas CPU via worker-pool.
Warm-up: aqueça JIT/cachê, «warm pools» as instâncias para os picos.
8) Bancos de dados e cachês
Índices e planos: regular 'EXPAIN', vácuo automático/análise, limite de raias.
Connation pooling (PgBouncer/Multiplexing), transações curtas.
Estratégias em dinheiro: read-through, write-through/write-behind; TTL + deficiência por evento.
Charding/réplicas: leitura com slaves, chaves quentes com cachês locais (near-cachê).
9) Em dinheiro e edge
CDN/edge para estaticos/diretórios, o cachê de respostas API (se for seguro) por 'Cachê-Controle', 'ETag'.
Stale-while-revalidate e stale-if-erro para a estabilidade UX.
Distribuição geo: o RR/região mais próximo reduz o RR.
10) Patrões arquitetônicos contra caudas P99
Hedged requests: duplique o lento pedido para outra instância após a liminar.
Request collapsing: um pedido «guia» para o banco de dados, os outros aguardam o resultado (evita tempestades).
Priorization: operações VIP/críticas - pool/prioridade selecionado.
Graceful degradation: corte os campos secundários/widgets quando sobrecarregar.
11) Configs (aproximadamente)
11. 1 NGINX (timeouts/compressão)
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 (cliente)
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) Observabilidade: Mede corretamente
RED/USE métricas + trailers OTel: 'trace _ id' através do serviço de gateway-BD-API exterior.
Os rótulos individuais são «api _ versão», «region», «parceiro», «endpoint».
Dashboard: P50/P95/P99, queue time, erro mix, retry rate, cachê hit.
Synthetics de países alvos/ASN (TR/BR/EU) e caminhos críticos (reg→depozit, payout).
- Core API: 'P95 ≤ 250ms', 'P99 ≤ 500ms' (30 dias)
- PSP webhook processamento: 'P99 ≤ 60s' com retais
- Diretório Freshness: 'P95 ≤ 30s'
13) FinOps и latency
Milissegundos custam dinheiro: valorize $/ms ganhos em CR/ARPU.
Right-sizing: mais rápido ≠ mais caro sempre; o dinheiro/formatos adequados são baratos e mais rápidos.
Egress/edge: CDN reduz o RPT e o custo do tráfego de saída da região.
14) Folha de cheque de otimização (passo a passo)
1. Coloque o SLO e mede as caudas (P95/P99) por endpoentes/regiões/parceiros.
2. Inclua HTTP/2/3, TLS resumpção, conexões de longa duração.
3. Curte e perca as respostas: Brotli/Gzip, campos sob demanda, paginação, ETag.
4. Configure os temporizadores/retrações/breakers; adicione a idimpotência.
5. Dinheiro/edge: hit-rate e TTL corretos; modos stale.
6. BD: índices, planos, pulas, réplicas; Elimina N + 1.
7. Assincrone pesado, filas, batching, backpressure.
8. Hedge/collapse/priority para caminhos críticos.
9. Warm-up e skailing preditivo para picos (torneios/jogos).
10. Sintéticos e alertas em P99 e queue time; perf-revezamento regular.
15) Anti-pattern
Um tempo global de «tudo» e retais descontrolados (DDOS a si mesmo).
Curtir sessões sem precisar → buracos quentes.
Grandes JSON sem compressão e filtros de campos.
Chamadas sincronizadas para APIs externas lentas no caminho quente.
Falta de índice/limite no banco de dados; N + 1 em ORM.
Sem cachê/edge ou ETag; Respostas constantes e completas.
Um mix de erros empresariais e técnicos em uma cesta de retalhos.
16) Contexto iGaming/fintech: notas práticas
Reg→depozit (CR): prioridade de rotas, pool separado, «P99 ≤ 500ms»; degradação - desligar «joias» UI.
Integração PSP: limites de concarrence, retais em códigos temporários, conectórios warm, egress-IP regional.
Operações VIP: pool garantido/prioridade, contornar as filas gerais.
Torneios/Ivents: scale preditivo, armazenamento de dinheiro, prefetch.
Relatório: async e SLA no freshness, não bloqueia o caminho de prod.
Resultado
A otimização da latency é uma disciplina de equilíbrio: rede (HTTP/2/3, TLS), protocolos e dinheiro, temporizações/retratos, BD/cachê, pattern assíncrona e observabilidade P95/P99. Com foco na cauda e eliminando os «gargalos estreitos», você estabiliza a resposta, melhora a conversão e reduz o custo de milissegundos - onde isso realmente afeta o negócio.