Pular para o conteúdo

apps/patterns/graceful-degradation

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

Graceful Degradation

Mantém a resposta de pé quando parte dos serviços falha: em vez de erro, a visão da conta sai em um tier de capacidade — completa, parcial ou mínima — conforme o que respondeu. O cliente recebe o tier e adapta a interface.

passos
6
arquivos
5
teste
1
tecnologias
3
Lógica puraTypeScriptBunElysia
Baixar cartão

Cenário

O app de um banco digital monta a visão da conta com três serviços: saldo (core), PIX (limites e chaves, habilita o botão de transferir) e ofertas de investimento. Cada um é um processo Elysia (api_dependency.ts, portas 7040–7042) e a visão é agregada por outro processo Elysia (api_overview.ts, porta 7050). O demo deixa o PIX lento, derruba as ofertas e por fim o saldo.

Planta

Fluxo
9/9
GET /accounts/:id/overviewPromise.allSettled:saldo, PIX, ofertas(timeout de 500 ms cada)Saldo (core) respondeu?MINIMAL: somente leituraPIX e ofertasresponderam?FULL: transferir e ofertasDEGRADED: só o que respondeu200 + header X-Service-Tiernãosimambosalgum falhou
9

9 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Desliga o acessório, mantém o essencial.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    Core × opcional declaradoSaldo é core; PIX e ofertas são opcionais — sem essa distinção o sistema não sabe quando degradar

  2. 02

    `Promise.allSettled`Uma falha não cancela o que os outros serviços responderam

  3. 03

    Timeout por serviçoAbortSignal.timeout transforma o serviço travado em falha, sem segurar a resposta inteira

  4. 04

    TierNenhuma falha → FULL; só opcionais → DEGRADED; core → MINIMAL (somente leitura)

  5. 05

    CapacidadesSem PIX some transfer; sem ofertas some offers

  6. 06

    Tier exposto e logadoX-Service-Tier no response e uma linha de log por requisição

apps/patterns/graceful-degradation

5 arquivos

src/

  • degradation_overview.tsoverviewGet com Promise.allSettled e timeout por serviço, tierClassify
  • api_overview.tsAPI da visão da conta (Elysia, porta 7050) com o header X-Service-Tier
  • api_dependency.tsServiços de saldo, PIX e ofertas (Elysia, 7040–7042), com PUT /mode up, down ou slow
  • demo.tsdemoSobe os quatro processos e degrada um serviço de cada vez
  • degradation_overview.test.tstesteTier por falha, corte do serviço lento pelo timeout e header contra serviços reais

Executar · só Bun

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

Testes: bun run test.

Requisitos
Bun

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Graceful Degradation?

Próximo projeto · Padrões FundamentaisHealth Check Pattern
Esc

↑ ↓ navegarEnter abrir191 resultados