O Saga Pattern é um padrão de design que gerencia transações distribuídas em arquiteturas de microsserviços. Ele resolve o problema de manter consistência de dados quando uma operação de negócio precisa ser executada através de múltiplos serviços independentes.
O Problema das transações distribuídas
Em arquiteturas monolíticas, podemos usar transações ACID do banco de dados para garantir consistência.
Porém, em microsserviços:
- Cada serviço tem seu próprio banco de dados
- Transações locais não podem abranger múltiplos serviços
- Two-Phase Commit (2PC) é complexo e pode causar bloqueios
- Falhas parciais podem deixar o sistema em estado inconsistente
Exemplo do Problema:
E-commerce - Processamento de Pedido:
1. Serviço de Pedidos: Criar pedido
2. Serviço de Pagamento: Processar pagamento
3. Serviço de Estoque: Reservar produtos
4. Serviço de Entrega: Agendar entrega
E se o pagamento falhar após criar o pedido?
Como o Saga Pattern resolve ?
O Saga divide uma transação distribuída em uma sequência de transações. Cada transação atualiza dados dentro de um único serviço e publica eventos ou mensagens para acionar a próxima transação local na saga.
Tipos de Saga Pattern
1. Choreography Saga (Coreografia)
Cada serviço produz e escuta eventos para coordenar o fluxo da saga de forma descentralizada.
Como Funciona:
- Serviço A executa uma transação
- Publica um evento
- Serviço B escuta o evento e executa sua transação
- Publica seu próprio evento
- O processo continua até completar ou falhar
2. Orchestration Saga (Orquestração)
Um orquestrador central coordena todas as transações e decide qual serviço chamar em seguida.
Como Funciona:
- Orquestrador inicia a saga
- Chama serviço A e aguarda resposta
- Com base na resposta, chama serviço B
- Continua coordenando até completar ou falhar
- Em caso de falha, executa compensações na ordem reversa
O Saga Pattern não é uma bala de prata, mas quando aplicado corretamente, permite construir sistemas distribuídos resilientes e escaláveis que mantêm consistência de dados mesmo em cenários complexos de falha.
Top comments (0)