Pular para o conteúdo

apps/patterns/exponential-backoff

015 · Padrões Fundamentais · ≈ 5 min de estudo

Exponential Backoff

Espaça as novas tentativas de uma chamada que falhou dobrando o atraso a cada tentativa, com teto e jitter. Evita que o retry imediato derrube de novo um serviço que está se recuperando e que vários clientes retentem no mesmo instante (thundering herd).

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

Cenário

Uma fintech liquida PIX e TED por um gateway de pagamento externo — um processo Elysia real (api_gateway.ts, porta 4104) que responde 503 nas primeiras chamadas de cada operação. O cliente retenta com backoff exponencial e jitter até o limite de tentativas; quando o gateway continua fora, desiste com erro em vez de insistir para sempre.

Planta

Fluxo
9/9
Chamada ao gateway falhaTentativas esgotadas?Desiste com erro finalCalcula base x 2^(tentativa-1)Aplica o teto delayMaxAplica jitter: full ou equalAguarda o delayNova tentativa via fetchPIX liquidadosimnãofalha 503200
9

9 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Espera dobra a cada nova tentativa.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    ExponencialA tentativa N espera delayBase × 2^(N-1) — 100, 200, 400 ms…

  2. 02

    TetodelayMax impede que a tentativa 10 espere minutos

  3. 03

    Full jitter (padrão recomendado): sorteia entre 0 e o delay com teto, espalhando os clientes

  4. 04

    Equal jitterMetade fixa como piso, metade sorteada — quando é preciso garantir espera mínima

  5. 05

    Limite de tentativasattemptsMax decide quando desistir; após a última falha não há espera

  6. 06

    Chamada realCada tentativa é um fetch() ao gateway em outro processo; o log registra tentativa e delay

apps/patterns/exponential-backoff

5 arquivos

src/

  • exponential_backoff.tsbackoffDelayCapped, backoffDelayCalculate (none/full/equal) e backoffRetry com limite de tentativas
  • api_gateway.tsGateway Elysia (porta 4104) que falha nas N primeiras chamadas de cada operação
  • demo.tsdemoSobe o gateway com Bun.spawn, liquida PIX e TED com retry e compara as estratégias de jitter
  • exponential_backoff.test.tstesteUnitário com sorteio e sleep injetados: fronteira do teto e do limite de tentativas

./

  • stryker.config.jsoninfraTeste de mutação sobre exponential_backoff.ts (gate de 85%)

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 é o próximo passo depois de Exponential Backoff?

Próximo projeto · Padrões FundamentaisFactory Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados