System Design/01 - Fundamentos2 min
Latency vs Throughput
- Que problema isso resolve?
- Quando usar / quando NÃO usar?
- Qual o principal trade-off?
- Como isso falha em produção?
Conceito
- Latência: quanto tempo uma operação leva. Medida em ms. É a experiência de um pedido.
- Throughput: quantas operações por unidade de tempo. Medida em req/s. É a capacidade do sistema.
A analogia clássica: uma rodovia. Latência é quanto tempo um carro leva de A a B. Throughput é quantos carros passam por hora. Uma rodovia com muitas faixas e limite baixo tem throughput alto e latência alta.
Por que a média mente
Latência nunca deve ser reportada como média. A distribuição é assimétrica de cauda longa, e a média esconde exatamente os usuários que estão sofrendo.
| Métrica | O que significa |
|---|---|
| p50 (mediana) | Metade dos usuários teve isso ou menos |
| p95 / p99 | Os 5% / 1% piores — onde mora a insatisfação |
| p99.9 | Onde moram os clientes maiores (mais requisições = mais chance de cair na cauda) |
Numa página que faz 100 chamadas internas, quase todo usuário encontra pelo menos uma resposta p99. Por isso a cauda importa mais do que parece.
A relação entre as duas
Pela Lei de Little: concorrência = throughput × latência.
Isso implica algo contra-intuitivo: à medida que a utilização se aproxima de 100%, a latência explode (cresce como 1/(1-utilização)). Um sistema a 90% de utilização tem latência ~10x maior que a 50%. Manter folga não é desperdício — é o que mantém a latência previsível.
Trade-offs
Otimizar throughput frequentemente piora latência, e vice-versa:
| Técnica | Throughput | Latência |
|---|---|---|
| Batching | ↑↑ | ↓ (espera o lote encher) |
| Buffer maior | ↑ | ↓ |
| Processar imediatamente | ↓ | ↑↑ |
| Paralelismo | ↑ | ↑ (até o gargalo) |
Sistemas de análise otimizam throughput (batch, colunar, compressão). Sistemas interativos otimizam latência de cauda (cache, folga de capacidade, timeouts agressivos).
Exemplo prático
Um pipeline de dados processa 1 milhão de eventos/hora com latência de 5 minutos por evento (batch de 5 min). Aceitável — ninguém está esperando.
A mesma arquitetura numa API de checkout seria inaceitável: o throughput agregado é ótimo, e cada usuário espera 5 minutos. Mesmo número, requisito oposto.
Inversamente: reduzir o batch para 1 evento derruba a latência para milissegundos e corta o throughput pela metade, porque some a amortização do custo fixo por lote.
Relacionado
Parte de 01 - MOC Fundamentos · roadmap.sh/system-design