
Saga são transações de longa duração que podem ter um grupo de transações que são intercambiáveis e independentes.
Além disso, as transações da Saga existem a ação compensatória ou o famoso “rollback”.
O padrão Saga é muito utilizado em aplicações com Microsserviços ou distribuídas.
Microsserviços e Saga.
Imagine um ecossistema de um microsserviços para um E-commerce.
Dentro desse ecossistema existem 3 Microsserviços: Pedido, Pagamento e Logística.
Sendo 3 serviços independentes que não se conhecem e com a camada de apresentação assíncrona, como fazer em caso de algum Microsserviço falhar ou não ter um resultado esperado?
Por exemplo, eu usuário faço uma compra e a operadora de cartão não aprova minha compra.
Sistematicamente o caso acima seria chamar o microsserviço de pedido, mostrar para o usuário que está aguardando aprovação em seguida chamar o microsserviço de pagamento.

Todo esse processo pode ser orquestrado pela camada de apresentação, mas vamos ter um problema, quem vai avisar o microsserviço de pedido que a compra foi cancelada pelo Microsserviço de pagamento?
Podemos fazer esse processo de compensação dentro dos tratamentos de erro da camada de apresentação, mas não ficaria muito elegante.
Aqui entramos com o padrão Saga para resolver essa problemática.
Entre a camada de apresentação e os Microsserviços entra uma camada de Gateway para orquestrar as chamadas.

Agora podemos fazer todas as operações de forma transacional, caso alguma operação falhe, podemos desfazer e alterar o status do fluxo.
Observe abaixo 3 operações de compra, 1 com sucesso e 2 com falhas:



Repare que mesmo com o desacoplamento dos Microsserviços podemos transacionar as operações.
Claro que esse foi um exemplo mais simples, problemáticas mais complexas podem envolver outras tecnologias como utilização de Queues.
Conclusão.
O exemplo apresentado foi simplista, mas mostra como resolver algumas problemáticas de aplicações com Microsserviços ou distribuídas que necessitam de operações com transações.


