Pular para o conteúdo principal

Orquestração vs Coreografia

Existem duas abordagens principais para gerenciar transações distribuídas: Orquestração e Coreografia. O Sagaweaw escolheu Orquestração por razões específicas.


Coreografia (Event-Driven)

Na coreografia, cada serviço reage a eventos e emite novos eventos. Não há coordenador central.

┌─────────┐ event ┌─────────┐ event ┌─────────┐
│ Serviço │ ──────────► │ Serviço │ ──────────► │ Serviço │
│ A │ │ B │ │ C │
└─────────┘ └─────────┘ └─────────┘
▲ │
└───────────────── event ◄──────────────────────┘

Prós

  • Baixo acoplamento
  • Serviços independentes
  • Escala horizontalmente

Contras

  • Difícil de debugar — "onde está minha transação?"
  • Fluxo implícito — lógica espalhada em handlers
  • Compensação complexa — quem sabe a ordem inversa?
  • Observabilidade ruim — requer correlation IDs + distributed tracing

Orquestração (Sagaweaw)

Na orquestração, um coordenador central (o Sagaweaw) controla o fluxo e sabe exatamente o estado de cada saga.

┌─────────────┐
│ Sagaweaw │
│ Orchestrator│
└──────┬──────┘

┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Serviço │ │ Serviço │ │ Serviço │
│ A │ │ B │ │ C │
└─────────┘ └─────────┘ └─────────┘

Prós

  • Fluxo explícito — código declarativo
  • Observabilidade nativa — API REST com métricas e auditoria
  • Compensação automática — ordem inversa garantida
  • Debuggável — logs centralizados por saga

Contras

  • Single point of coordination (mitigado com HA)
  • Acoplamento ao orquestrador

Por que Escolhemos Orquestração

ADR-005: Decisão de Arquitetura

Contexto: Sistemas financeiros críticos precisam de auditoria completa e recuperação previsível.

Decisão: Usar orquestração centralizada com estado persistido em PostgreSQL.

Consequências:

  • Cada saga tem ID único e histórico completo
  • Compensações executam em ordem determinística
  • API REST mostra exatamente onde está cada transação
  • Orquestrador deve ter alta disponibilidade

Comparativo

AspectoCoreografiaOrquestração
Definição do fluxoImplícita (eventos)Explícita (código)
ObservabilidadeRequer esforçoNativa
CompensaçãoManualAutomática
DebuggingDifícilFácil
AcoplamentoBaixoMédio
ComplexidadeDistribuídaCentralizada

Quando Usar Cada Um

Use Coreografia quando:

  • Serviços são de equipes diferentes com ciclos de deploy independentes
  • Não há necessidade de compensação complexa
  • Fluxos são simples (A → B → C sem rollback)

Use Orquestração (Sagaweaw) quando:

  • Transações financeiras ou críticas
  • Compensação automática é necessária
  • Auditoria e observabilidade são requisitos
  • Equipe quer código declarativo e testável

Leitura Adicional