Pular para o conteúdo

apps/patterns/process-orchestrator

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

Process Orchestrator

Um componente central conduz um processo de várias etapas: envia um comando a cada participante, persiste o estado a cada transição e, se uma etapa falha, desfaz as já concluídas em ordem inversa. Use quando o processo tem muitos estados, exige compensação e precisa de visibilidade num lugar só.

passos
6
arquivos
10
testes
2
tecnologias
5
Infraestrutura realTypeScriptBunElysiaPostgreSQLDocker
Baixar cartão

Cenário

Um banco digital concede empréstimo pessoal em quatro etapas: consulta de score no bureau de crédito (processo Elysia separado), reserva de limite, emissão do contrato e crédito na conta. R$ 50.000,00 para uma conta ativa passa por tudo. R$ 200.000,00 é recusado pelo bureau e nada precisa ser desfeito. R$ 30.000,00 para uma conta bloqueada falha no crédito: o contrato é cancelado e o limite liberado.

Planta

Estados
11/11
limit.reserve,contract.issue,loan.disbursePENDINGRUNNINGCOMPLETEDFAILEDCOMPENSATINGCOMPENSATEDCOMPENSATION_FAILEDprocesso gravadocredit.score(HTTP ao bureau)todas as etapasconcluídasfalha sem etapaa desfazerfalha depois deetapa compensávelcontrato cancelado,limite liberadocompensaçãofalhou: alerta
11

11 passos — reproduza para seguir o fluxo

  • chamada
  • resposta ou assíncrono
  • falha
  • passo
  • toque num nó para focar
  • repouso ou sucesso
  • transição
  • falha ou recusa
  • Outras plantas de estados

Como funciona

6 passos

Coordenador central conduz cada etapa.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    Estado persistidoloan_processes recebe o estado, a etapa corrente, os dados acumulados e os erros a cada transição

  2. 02

    Participante só executa o comandoBureau por HTTP, limite, contrato e crédito no PostgreSQL; nenhum conhece o fluxo

  3. 03

    Timeout por etapaCada etapa tem limite próprio; o AbortSignal cancela o fetch e a etapa que estoura falha

  4. 04

    IdempotênciaToda escrita de participante é única por processo (ON CONFLICT (process_id)), então reenviar o comando não duplica

  5. 05

    CompensaçãoFalha depois de etapa compensável desfaz as concluídas em ordem inversa (COMPENSATING → COMPENSATED)

  6. 06

    Falha na compensaçãoNunca é silenciada; o processo fica COMPENSATION_FAILED e o log emite [ALERT]

apps/patterns/process-orchestrator

10 arquivos

sql/

  • 01_schema.sqlschemaloan_processes e as tabelas dos participantes: reservas, contratos, contas e desembolsos

src/

  • orchestrator_loan.tsExecução das etapas com timeout, persistência de cada transição e compensação em ordem inversa
  • participant_loan.tsAs quatro etapas do empréstimo, cada uma idempotente por processo
  • api_bureau.tsBureau de crédito em processo Elysia próprio, com o score mínimo de aprovação
  • pool_loan.tsPool único e transação com rollback e release garantidos
  • config_loan.tsLê e valida o ambiente no boot
  • orchestrator_loan.test.tstesteIntegração contra PostgreSQL real: conclusão, falha, compensação, timeout e reenvio idempotente
  • api_bureau.test.tstesteFronteira do score mínimo de aprovação
  • demo.tsdemoSobe o bureau e roda os três empréstimos

./

  • docker.shinfraSobe o PostgreSQL com o schema

Executar · com Docker

  1. ./docker.sh up# sobe PostgreSQL
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário

Testes: bun run test.

Requisitos
BunDocker
Sobe junto
PostgreSQL
Esc

↑ ↓ navegarEnter abrir191 resultados