Quando falamos de performance de software, três conceitos formam a base de qualquer análise séria: latência, throughput e concorrência. Entender o que cada um representa — e como eles se relacionam — é essencial para diagnosticar problemas e tomar decisões inteligentes.
Latência: O tempo de uma operação
Latência é o tempo que uma operação leva do início ao fim. Em APIs, geralmente medimos o tempo de resposta de uma requisição.
Por que latência importa
- Experiência do usuário: Cada milissegundo adicional impacta conversão
- Dependências encadeadas: Em microsserviços, latências se somam
- SLAs e SLOs: Contratos de serviço são baseados em latência
Medindo latência corretamente
Não basta olhar a média. Você precisa entender a distribuição:
- P50 (mediana): 50% das requisições são mais rápidas
- P95: 95% das requisições são mais rápidas
- P99: 99% das requisições são mais rápidas
A média esconde os outliers. O P99 revela a experiência dos usuários que mais sofrem.
Throughput: A capacidade do sistema
Throughput é a quantidade de trabalho que o sistema consegue processar em um período de tempo. Geralmente medido em requisições por segundo (RPS) ou transações por segundo (TPS).
Throughput vs Latência
Um erro comum é assumir que baixa latência significa alto throughput. Na verdade:
- Um sistema pode ter baixa latência em baixa carga e colapsar quando throughput aumenta
- Aumentar throughput geralmente aumenta latência (contenção de recursos)
Fatores que limitam throughput
- Pool de conexões de banco de dados
- Threads disponíveis
- Largura de banda de rede
- Capacidade de processamento
Concorrência: Operações simultâneas
Concorrência é o número de operações sendo executadas simultaneamente. É diferente de throughput:
- Throughput: Quantas operações completamos por segundo
- Concorrência: Quantas operações estão em andamento agora
A Lei de Little
A relação entre esses conceitos é expressa pela Lei de Little:
Concorrência = Throughput × Latência
Se seu throughput é 100 req/s e a latência média é 200ms:
Concorrência = 100 × 0.2 = 20 requisições simultâneas
Implicações práticas
- Se latência aumenta, concorrência aumenta (para mesmo throughput)
- Se concorrência atinge um limite (pool de conexões), throughput cai
- Latência alta com alta concorrência = sistema saturado
Como os três se relacionam
Imagine um restaurante:
- Latência: Tempo para preparar cada prato
- Throughput: Pratos servidos por hora
- Concorrência: Pratos sendo preparados simultaneamente
Se a cozinha tem 5 chefs (concorrência máxima = 5):
- Cada prato leva 10 minutos (latência)
- Throughput máximo = 30 pratos/hora
Se a latência aumenta para 15 minutos (ingrediente difícil):
- Throughput cai para 20 pratos/hora
- Ou precisamos de mais chefs (aumentar concorrência)
Diagnóstico de problemas
Alta latência, baixo throughput
Possíveis causas:
- Operações bloqueantes (queries lentas, I/O síncrono)
- Recursos insuficientes (CPU, memória)
- Contenção de locks
Latência ok, throughput limitado
Possíveis causas:
- Pool de conexões pequeno
- Limite de threads
- Gargalo em componente específico
Alta concorrência, degradação geral
Possíveis causas:
- Sistema saturado
- Contenção de recursos
- Necessidade de escalar
Conclusão
Latência, throughput e concorrência são os três pilares da análise de performance. Entender como eles se relacionam permite:
- Diagnosticar problemas corretamente
- Prever comportamento sob carga
- Tomar decisões de capacidade informadas
Você não pode otimizar o que não mede. E você não pode medir corretamente sem entender esses três conceitos.