Padrão Saga.

 

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.