Pular para o conteúdo

apps/patterns/resilience-kit

026 · Padrões Fundamentais · ≈ 6 min de estudo

Resilience Kit

Compõe bulkhead, fallback, timeout, circuit breaker e retry numa pipeline só, de fora para dentro, cada camada protegendo a próxima. Isolado, cada padrão deixa uma lacuna; na ordem certa, o retry não bate em serviço quebrado, o timeout cobre a cadeia inteira e o fallback só responde quando a infraestrutura falhou. Use em chamada a serviço externo com SLA de latência.

passos
6
arquivos
5
teste
1
tecnologias
4
Lógica puraTypeScriptBunElysiaStryker
Baixar cartão

Cenário

Uma corretora de câmbio cota USD/BRL num provedor primário e tem um secundário, mais caro, como alternativa. O demo alterna o primário entre saudável, instável (um 503), fora do ar e lento. A moeda não suportada é recusada sem retry nem fallback. Na queda, o circuito abre na terceira cotação e as seguintes vão direto ao secundário. Passado o tempo de abertura, uma sonda fecha o circuito. Lento, o primário estoura o timeout: duas chamadas simultâneas ocupam as vagas, a terceira espera na fila e a quarta é recusada pelo bulkhead.

Planta

Fluxo
7/7
Cotação USD/BRLBulkhead (2vagas, fila de 1)FallbackTimeout (1.500 ms)Circuit breaker (3 falhas)Retry (2 tentativas,backoff + jitter)Provedor primárioProvedor secundário,com spreadGET /quotes (HTTP)falha deinfraestrutura(HTTP)
7

7 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Retry, timeout e breaker numa camada.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    Retry por dentroSó erro de infraestrutura (5xx, 429, timeout, conexão) é retentado, com backoff exponencial, teto e full jitter; para quando o prazo externo já abortou

  2. 02

    Circuit breaker em volta do retryConta falhas consecutivas de infraestrutura; aberto, não chama o provedor; em HALF_OPEN deixa passar uma única sonda

  3. 03

    Timeout em volta do circuitoCobre a cadeia inteira e aborta o fetch pelo AbortSignal

  4. 04

    Fallback em fonte independenteO provedor secundário responde só em falha de infraestrutura ou circuito aberto; recusa de negócio (422) chega ao cliente

  5. 05

    Bulkhead por foraSemáforo sobre a cadeia inteira, com fila limitada; fila cheia recusa na hora e o slot é liberado no finally

  6. 06

    Um kit por dependênciakitCreate recebe a configuração do serviço; nunca um kit global

apps/patterns/resilience-kit

5 arquivos

src/

  • resilience_kit.tsAs cinco camadas, a classificação de erro transitório e a composição em kitCreate
  • api_quote.tsProvedor de cotação em processo Elysia próprio, com modos up, flaky, down e slow
  • resilience_kit.test.tstesteFronteira de cada limiar (tentativas, falhas, tempo de abertura, vagas e fila) e a ordem das camadas
  • demo.tsdemoSobe os dois provedores e percorre os cenários

./

  • stryker.config.jsoninfraMutação sobre src/resilience_kit.ts

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário

Testes: bun run test. Mutação: bun run test:mutation.

Requisitos
Bun

Por que se relacionam

Teste rápido

Qual destes combina com Resilience Kit?

Próximo projeto · Padrões FundamentaisRetry Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados