DEV Community

Bruno
Bruno

Posted on

SAGA

O que é?

O padrão de projeto SAGA é um padrão arquitetural usado principalmente para gerenciar transações distribuídas em sistemas de microsserviços. Ele foi criado para resolver o problema de coerência de dados em ambientes onde não é possível ou desejável usar uma transação distribuída tradicional (como uma transação ACID que envolve múltiplos bancos de dados ou serviços).

O que é uma "transação distribuída"?

É uma operação que envolve múltiplos serviços ou múltiplas bases de dados, onde todos precisam ser consistentes no final. O desafio é: se algo falhar no meio, como desfazer o que já foi feito?

Uma SAGA é uma sequência de transações locais em diferentes serviços, onde cada transação é seguida por uma ação compensatória (rollback local) caso algo dê errado.

🔧 Como funciona?

Existem dois tipos principais de implementação do padrão SAGA:

Orquestrado

  • Existe um orquestrador central que comanda o fluxo de transações.

  • Ele chama cada serviço na ordem correta e, em caso de falha, executa as transações compensatórias.

  • Mais facil de adicionar um fluxo novo

  • Mais facil de dar manutenção

  • Leitura de codógio mais facil

Coreografado

No padrão coreografado, não existe um orquestrador central. Cada serviço é responsável por ouvir eventos e executar sua parte da transação de forma autônoma. O fluxo é determinado pelos eventos que os serviços emitem e consomem.

Quando um serviço completa sua tarefa, ele publica um evento (por exemplo, EstoqueReservado), e o próximo serviço no fluxo ouve esse evento e age (por exemplo, o serviço de pagamento escuta e processa o pagamento).

Se algo falhar no meio do processo, os serviços devem emitir eventos de compensação, permitindo que os serviços anteriores façam o "rollback" por meio de suas ações compensatórias, normalmente seguindo a ordem inversa da execução.

🧰 Ferramentas para Design e Execução

Existem ferramentas que ajudam tanto no design visual quanto na execução real dos fluxos do padrão Saga. Uma das mais conhecidas é o:

  • Camunda: plataforma de automação de processos baseada em BPMN (Business Process Model and Notation).

    • Permite modelar visualmente o fluxo da saga.
    • Pode ser integrada diretamente ao código para controlar os serviços e eventos.
    • Suporta tanto orquestração quanto coreografia, dependendo da arquitetura adotada.

Outras ferramentas que também podem ser usadas para coreografia de eventos incluem:

  • Apache Kafka (com Event-Driven Architecture)

  • Axon Framework (em Java)

  • Temporal.io (workflow orchestration, mas pode ser usado de forma
    híbrida)

Top comments (0)