Escalando Containers
Backpressure e limites
Aplicando limites de concorrencia para evitar sobrecarga em cascata.
Nesta aula você vai
- Entender sinais de backpressure em APIs e consumidores
- Aplicar limites de concorrencia e fila por servico
- Proteger o fluxo distribuido contra sobrecarga em cascata
Backpressure e limites
Objetivos
- Entender sinais de backpressure em APIs e consumidores
- Aplicar limites de concorrência e fila por serviço
- Proteger sistema contra sobrecarga em cascata
Pré-requisitos
- Materia 13 aulas 1 e 2 concluídas.
- Monitoramento de latencia e erros ativo.
- Cenário de carga configurado para gerar saturacao.
Conceito
Backpressure e a capacidade de um servico sinalizar que nao consegue manter o ritmo de entrada. Sem isso, filas crescem indefinidamente e o sistema colapsa.
A ideia e reduzir throughput de entrada de forma controlada (429, pausa de consumo, limite de workers), protegendo estabilidade geral.
Estrutura de arquivos
services/payment-service/internal/workersservices/order-service/app/apiinfra/monitoring/grafanadocs/runbooks/backpressure.md
Passo a passo com codigo
- Limite workers de processamento:
const maxWorkers = 20
jobs := make(chan Event, 200)
- Retorne falha rapida na API quando fila lotar:
if queue_size > MAX_QUEUE:
raise HTTPException(status_code=429, detail="service overloaded")
- Exponha metrica de rejeicao:
rejectedRequestsTotal.WithLabelValues("order-service").Inc()
- Aplique pausa curta no consumer sob saturacao:
if queueLen > highWatermark {
time.Sleep(500 * time.Millisecond)
}
Como testar
- Gere carga acima da capacidade nominal por 2 minutos.
- Verifique aumento de
429controlado (sem timeout massivo). - Confirme que fila estabiliza abaixo do limite maximo.
- Reduza carga e valide recuperacao normal do servico.
Dicas
- Monitore fila, latencia e taxa de rejeicao juntos.
- Prefira rejeicao rapida a timeout longo.
- Configure limites por ambiente (dev, stage, prod).
- Documente comportamento degradado no runbook.
Erros comuns
- Aceitar tráfego ilimitado sem controle de fila
- Não instrumentar fila e concorrência
- Bloquear thread principal com processamento pesado
- Ignorar estratégia de recuperação após pico
Resumo
Backpressure com limites claros de fila e concorrencia impede sobrecarga em cascata, mantendo o sistema operavel mesmo durante picos de trafego.