Escalando Containers

Backpressure e limites

Aplicando limites de concorrencia para evitar sobrecarga em cascata.

Avançado 30 min 25 pontos Leitura 0%

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/workers
  • services/order-service/app/api
  • infra/monitoring/grafana
  • docs/runbooks/backpressure.md

Passo a passo com codigo

  1. Limite workers de processamento:
const maxWorkers = 20
jobs := make(chan Event, 200)
  1. Retorne falha rapida na API quando fila lotar:
if queue_size > MAX_QUEUE:
    raise HTTPException(status_code=429, detail="service overloaded")
  1. Exponha metrica de rejeicao:
rejectedRequestsTotal.WithLabelValues("order-service").Inc()
  1. Aplique pausa curta no consumer sob saturacao:
if queueLen > highWatermark {
  time.Sleep(500 * time.Millisecond)
}

Como testar

  1. Gere carga acima da capacidade nominal por 2 minutos.
  2. Verifique aumento de 429 controlado (sem timeout massivo).
  3. Confirme que fila estabiliza abaixo do limite maximo.
  4. 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.