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.