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
| Aspecto | Coreografia | Orquestração |
|---|---|---|
| Definição do fluxo | Implícita (eventos) | Explícita (código) |
| Observabilidade | Requer esforço | Nativa |
| Compensação | Manual | Automática |
| Debugging | Difícil | Fácil |
| Acoplamento | Baixo | Médio |
| Complexidade | Distribuída | Centralizada |
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