Pular para o conteúdo

apps/resiliency/graceful-degradation

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

Graceful Degradation

Mantém a resposta de pé quando parte das dependências falha: cada serviço é classificado como core ou opcional, todos são chamados em paralelo com timeout próprio, e a resposta sai com o que respondeu e um tier que diz o quanto ela está reduzida. Use em telas e APIs que agregam fontes independentes.

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

Cenário

O app do banco abre no painel da conta: saldo, nome do cliente e ofertas. O saldo é o motivo de abrir o app — o serviço de contas é core; nome e ofertas são opcionais. Com ofertas fora, o painel sai sem ofertas; com o cadastro lento, ele é cortado em 300 ms e o painel não espera; com o serviço de contas fora, o painel sai em modo só leitura, com transferência desligada.

Planta

Fluxo
10/10
GET /accounts/12345/dashboardPromise.allSettledContas: saldoCadastro: nomeOfertasFalhasFULL: tudoDEGRADED: sem a seção,transferência mantidaMINIMAL: só leituracore, 800 msopcional, 300 msopcional, 300 msnenhumasó opcionalcore
10

10 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Perde recursos, não perde o serviço.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    SERVICES documenta quem é core e quem é opcional, e o timeout de cada um

  2. 02

    dashboardBuild chama os três com Promise.allSettled e AbortSignal.timeout individual — nenhuma falha derruba a resposta

  3. 03

    Cada serviço rejected vira um warning (offers_unavailable) e uma seção ausente, nunca um valor inventado

  4. 04

    tierClassify: nenhuma falha é FULL; só opcional, DEGRADED; qualquer core, MINIMAL

  5. 05

    capabilitiesFor desliga transfer e statement em MINIMAL — sem saldo não há como validar a transferência

  6. 06

    A API responde 200 com o tier em X-Service-Tier e loga dashboard.degraded em toda resposta reduzida

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • A falha de um serviço opcional não derruba a tela

  • Timeout por serviço limita a latência ao core

  • Tier e log tornam a degradação visível para ops

Custos

  • O cliente vê uma tela incompleta e a UI precisa tratar cada ausência

  • Timeout curto demais corta respostas que chegariam

  • A lista core × opcional precisa ser mantida quando surge serviço novo

apps/resiliency/graceful-degradation

6 arquivos

src/

  • tier_service.tsLista core × opcional, timeouts, classificação do tier e capacidades
  • dashboard_account.tsChamada paralela com timeout individual e montagem da resposta parcial
  • api_dashboard.tsEndpoint com X-Service-Tier e log da degradação
  • upstream_bank.tsServiços de contas, cadastro e ofertas em ElysiaJS com saúde trocada em runtime
  • config_degradation.tsConfiguração validada do ambiente
  • demo.tsdemoPainel com ofertas fora, cadastro lento e contas fora

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 Graceful Degradation?

Próximo projeto · Resiliência & Tolerância a FalhasChaos Engineering
Esc

↑ ↓ navegarEnter abrir191 resultados