DEV Community

Thiago da Silva Adriano
Thiago da Silva Adriano

Posted on

Saga Pattern

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?
Enter fullscreen mode Exit fullscreen mode

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:

  1. Serviço A executa uma transação
  2. Publica um evento
  3. Serviço B escuta o evento e executa sua transação
  4. Publica seu próprio evento
  5. 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:

  1. Orquestrador inicia a saga
  2. Chama serviço A e aguarda resposta
  3. Com base na resposta, chama serviço B
  4. Continua coordenando até completar ou falhar
  5. 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)