Pular para conteúdo

Rate Limits, Circuit Breakers e Bulkheads

Esses controles protegem limites distintos. Combiná-los pode aumentar a resiliência; tratá-los como equivalentes cria pontos cegos.

Controle Decisão Estado típico
Rate limiter Este chamador ou carga pode começar agora? Tokens, janelas ou permissões em fila
Circuit breaker Devem ser tentadas chamadas a uma dependência falha? Fechado, aberto, semiaberto
Bulkhead Quanta capacidade uma carga pode consumir? Semáforo, pool ou partição de fila

Rate limiting

Token bucket permite rajadas até sua capacidade e impõe taxa de reposição. Janela fixa é simples, mas cria rajadas nas bordas; outras abordagens suavizam limites. Defina identidade, justiça, coordenação distribuída, falhas e resposta. Serviços HTTP normalmente usam 429 Too Many Requests e podem fornecer Retry-After.

Circuit breakers

Um breaker registra resultados recentes enquanto fechado, abre quando a dependência é considerada não saudável e depois permite sondagens limitadas no estado semiaberto. Diferencie falhas relevantes de erros do chamador. Ele falha rápido, mas não limita chamada lenta; ainda são necessários timeouts ou deadlines. Um fallback deve ser honesto sobre dados obsoletos ou parciais.

Bulkheads e backpressure

Bulkheads isolam capacidade para uma carga não consumir toda thread, conexão ou permissão. Particionar demais desperdiça; compartilhar tudo permite exaustão correlacionada. Filas limitadas e rejeição explícita expõem sobrecarga antes de latência ilimitada.

Backpressure é um protocolo pelo qual consumidor lento restringe produtor rápido. Uma fila é armazenamento, não backpressure. Ao atingir o limite, o produtor deve reduzir, rejeitar, descartar por política explícita ou transferir de forma durável.

Interações

Aplique controle de admissão antes de consumir recursos. Uma chamada pode passar o rate limit, adquirir o bulkhead e encontrar um breaker aberto. Libere permissões em todos os caminhos. Novas tentativas devem respeitar os mesmos controles para não monopolizar a recuperação.

Teste limiares, concorrência semiaberta, relógio, partições, saturação, recuperação e mudanças. Observe rejeições, transições, permissões, idade da fila e latência com dimensões de métricas limitadas.