SYSTEM DESIGN · SISTEMAS DISTRIBUIDOS · LEITURA DE ~10 MIN

Back
Pressure

Back pressure e o mecanismo que impede um sistema rapido demais na entrada de destruir um componente mais lento na saida.

Diagrama de back pressure: clientes enviam 1000 requisicoes por segundo para API, fila quase cheia, workers processam 500 requisicoes por segundo e parte do excesso recebe retry ou 503.
BACK PRESSURE · QUANDO A ENTRADA PASSA DA CAPACIDADE

SECAO 01

O problema

Todo sistema tem uma capacidade real de processamento. A API pode receber muitas chamadas, mas o banco, os workers, a CPU, a memoria ou uma API externa podem processar em um ritmo menor.

Quando a taxa de chegada fica maior que a taxa de processamento por tempo suficiente, o trabalho nao desaparece. Ele acumula em algum lugar.

EXEMPLOFLUXO
Clientes
   ↓
1000 req/s
   ↓
API
   ↓
Fila
   ↓
Workers processam 500 req/s

Nesse cenario, entram 1000 requisicoes por segundo e saem 500. A diferenca vira backlog. Se nada limitar essa acumulacao, a fila cresce, a latencia sobe, a memoria aumenta e o sistema pode cair.

SECAO 02

Sem back pressure

Sem back pressure, a aplicacao aceita trabalho como se todos os recursos fossem infinitos. Esse e o erro: fila infinita parece conforto no comeco, mas vira memoria consumida e latencia escondida.

Diagrama sem back pressure: API recebe mais requisicoes do que os workers conseguem processar, a fila cresce e isso aumenta latencia, memoria e risco de crash.
SEM BACK PRESSURE · FILA CRESCENDO
ACUMULOTEXTO
1000 entram
500 saem

+500
+500
+500
+500

O sistema parece estar funcionando porque ainda aceita novas requisicoes. Mas cada nova entrada aumenta o tempo de espera de quem ja esta na fila.

REGRA PRATICA

Se a entrada continua maior que a saida, uma fila sem limite apenas adia a falha. Ela troca rejeicao controlada por degradacao lenta.

SECAO 03

Fila limitada

O primeiro passo para aplicar back pressure e assumir que a fila precisa ter tamanho maximo. Esse limite define quanta espera voce aceita antes de dizer: agora nao.

Diagrama de fila limitada: API envia para uma fila com limite, workers processam, e quando a fila esta cheia o excesso volta com 429 ou 503.
FILA LIMITADA · LATENCIA ACEITAVEL DEFINE O TAMANHO

Uma forma simples de pensar no tamanho da fila e partir da latencia maxima aceitavel:

FORMULALATENCIA
max latency = (transaction time / threads) × queue length

queue length = max latency / (transaction time / threads)

Exemplo: cada operacao leva 100 ms e existem 10 workers.

CALCULOEXEMPLO
100 ms / 10 workers = 10 ms por item na fila

latencia maxima aceita = 1000 ms

1000 ms / 10 ms = 100 itens

Nesse caso, uma fila perto de 100 itens representa aproximadamente 1 segundo de espera. Acima disso, voce precisa bloquear, desacelerar ou rejeitar.

SECAO 04

Como a pressao volta

Back pressure nao e apenas ter uma fila. O ponto e o que acontece quando o limite e atingido.

PRESSAORETORNO
Worker lento
     ↑
Fila cheia
     ↑
API para de aceitar mais trabalho
     ↑
Cliente recebe retry, 429 ou 503

Em uma API HTTP, duas respostas comuns sao:

HTTPRESPOSTA
HTTP/1.1 429 Too Many Requests
Retry-After: 1
HTTPRESPOSTA
HTTP/1.1 503 Service Unavailable
Retry-After: 2

O sistema esta dizendo: estou cheio agora; tente de novo depois. Isso e melhor do que aceitar tudo e derrubar todos os usuarios juntos.

SECAO 05

Aplicando em um sistema de partidas

Em um sistema de partidas, back pressure faria sentido nos pontos em que muitos jogadores geram eventos ao mesmo tempo, mas algum recurso tem capacidade limitada.

Imagine uma partida com 20 vagas e 2000 pessoas tentando entrar quase simultaneamente. A decisao de reservar vaga nao deve depender de uma fila comum. Ela precisa ser atomica no banco.

CONSISTENCIASQL
UPDATE match
SET available_slots = available_slots - 1
WHERE id = ?
  AND available_slots > 0;

Esse e o caminho de consistencia: confirmar vaga agora, com transacao no banco. A fila entra melhor no que pode acontecer depois: notificacao, ranking, analytics, email, push ou geracao de conteudo.

Diagrama de um sistema de partidas: jogadores chamam a API, reserva de vaga segue para o banco, e tarefas assincronas seguem para fila e workers de push, ranking e IA.
SISTEMA DE PARTIDAS · CAMINHO CONSISTENTE E CAMINHO ASSINCRONO

Assim o sistema separa dois mundos:

  • Consistency path: reservar vaga, confirmar presenca, alterar estado critico da partida.
  • Async path: notificar jogadores, atualizar ranking, emitir analytics, processar tarefas demoradas.

Se 5000 notificacoes precisarem sair apos um cancelamento, os workers podem enviar 50 por segundo. Se o provedor externo ficar lento, a fila cresce ate o limite e a API para de empurrar trabalho infinito.

SECAO 06

Camadas de protecao

Back pressure normalmente aparece como um conjunto de limites. Cada limite protege o recurso seguinte.

Diagrama de camadas de protecao: rate limit, concurrency limit, pool, bounded queue, workers e banco, com setas de esperar, reduzir e rejeitar voltando para tras.
CAMADAS · CADA LIMITE PROTEGE O PROXIMO RECURSO
CAMADASORDEM
Internet
   ↓
Rate Limit
   ↓
Concurrency Limit
   ↓
Connection Pool
   ↓
Bounded Queue
   ↓
Workers
   ↓
PostgreSQL / APIs externas

Rate limiting controla quanto um cliente pode enviar. Concurrency limiting controla quantas operacoes rodam ao mesmo tempo. Connection pool limita o acesso a recursos como banco. Bounded queue limita quanto trabalho pode esperar.

Back pressure e o comportamento resultante quando esses limites fazem quem esta antes desacelerar, esperar ou receber uma rejeicao explicita.

SECAO 07

Ideia central

A ideia central e simples:

RESUMOTEXTO
Back pressure serve para impedir que
um sistema rapido demais na entrada
destrua um componente mais lento na saida.

Nesse tipo de sistema, isso significa controlar quanto trabalho entra em cada componente quando muitos jogadores fazem algo ao mesmo tempo.

Em vez de jogar 10000 operacoes em cima do banco ou de um worker, o sistema aceita ate onde consegue operar bem. O excesso espera pouco, desacelera ou recebe uma resposta clara para tentar novamente.

FIM · OBRIGADO POR LER

Back pressure e arquitetura de sobrevivencia.

Quando a demanda passa da capacidade, o sistema precisa escolher: controlar a entrada agora ou quebrar depois.

LER FILAS E MENSAGERIA VOLTAR AOS CONTEUDOS