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 │
└─────────┘ └─────────┘ └─────────┘