Pular para o conteúdo

apps/resiliency/fallback-pattern

106 · Resiliência & Tolerância a Falhas · ≈ 6 min de estudo

Fallback Pattern

Quando a fonte primária falha, responde com a melhor alternativa aceitável, do dado mais fresco ao mais conservador, e diz ao cliente qual nível respondeu. A cadeia termina num erro explícito, nunca em silêncio. Use em leituras que toleram dado degradado — cotação, saldo, score —, nunca em escrita financeira.

passos
6
arquivos
7
testes
0
tecnologias
4
Lógica puraTypeScriptBunElysiaStryker
Baixar cartão

Cenário

O cliente consulta o dólar no app do banco. Com o provedor de cotação fora, a tela mostra a última taxa conhecida acrescida de 1,5% por até 5 minutos; depois disso, a taxa teto definida pela tesouraria; para um par sem teto, erro explícito. O app lê meta.dataSource e avisa que a cotação é indicativa. Comprar o dólar é escrita financeira: sem taxa ao vivo, a ordem é recusada.

Planta

Fluxo
9/9
GET /quotes/USD-BRLProvedorresponde?api: taxa ao vivoe grava no cacheCache mais novoque o TTL?cache: última taxamais spread de 1,5%Teto da tesourariapara o par?static: taxa teto503 com as causasPOST /fx-ordersTaxa ao vivo?503: ordem recusada,sem fallbacksimnãosimnãosimnãonão
9

9 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Resposta alternativa quando o principal falha.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    fallbackChainRun tenta os níveis em ordem; nível que falha ou volta undefined passa ao próximo, com a causa guardada

  2. 02

    Nível 1 (api): quoteLive chama o provedor com timeout e grava a taxa com o instante no cache

  3. 03

    Nível 2 (cache): serve só se cacheIsFresh (idade ≤ TTL) e aplica rateWithSpread contra o cliente

  4. 04

    Nível 3 (static): a taxa teto conservadora da tesouraria, quando existe para o par

  5. 05

    Sem nível, ErrorFallbackExhausted vira 503 com todas as causas; todo fallback ativado sai em log fallback.activated

  6. 06

    POST /fx-orders usa só quoteLive: sem taxa ao vivo responde 503 e nada é executado

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • O cliente recebe resposta útil com a fonte fora

  • Cada nível é mais conservador que o anterior

  • meta.dataSource e o log tornam a degradação visível

  • Escrita financeira recusa em vez de adivinhar

Custos

  • Dado degradado pode induzir decisão errada se a UI não avisar

  • Spread e teto conservadores pioram o preço mostrado

  • TTL e spread precisam de calibração com a tesouraria

  • Ordens ficam indisponíveis enquanto o provedor estiver fora

apps/resiliency/fallback-pattern

7 arquivos

src/

  • fallback_chain.tsCadeia genérica de níveis, log do nível ativado e erro explícito no fim
  • quote_fx.tsNíveis da cotação: provedor, cache com TTL e spread, teto estático
  • quote_policy.tsFrescor do cache e spread conservador
  • api_fx.tsAPI do banco: cotação com meta.dataSource e ordem de câmbio sem fallback
  • provider_quote.tsProvedor de cotação em ElysiaJS com saúde trocada em runtime
  • config_fallback.tsConfiguração validada do ambiente
  • demo.tsdemoQueda do provedor: cache, teto, erro explícito e ordem recusada

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário
  3. bun run test# testes unitários
  4. bun run test:mutation# mutação com Stryker
Requisitos
Bun

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Fallback Pattern?

Próximo projeto · Resiliência & Tolerância a FalhasBulkhead Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados