Saga Pattern in Microservices

2020nani

Hernani Almeida

Posted on March 12, 2024

Saga Pattern in Microservices

Neste post vamos desmistificar o design do padrão saga, vamos construir um sistema de microsserviços que estará salvando dados completos do usuário onde usaremos o Orchestration Saga Pattern, abaixo vemos o fluxograma do projeto.

Image description

  • UserService - Essa API (Java) ira receber a requisição via rest http de um cadastro de usuário e produzir uma mensagem em um tópico Kafka para que a mesma seja consumida pela aplicação orquestradora.

  • Orchestrator - Essa API (Java) recebe a mensagem produzida pela API acima através de um Listener de um tópico KAFKA que estará captando as mensagem produzidas por este tópico e realiza a orquestração de todo fluxo da transação para os serviços seguintes atraves da (Events-Driven Architecture), ou seja via eventos, para garantir o sucesso da transação e o rolback da mesma caso exista alguma falha.

  • AdressService - Essa API (Java - Webflux) recebe a mensagem produzida pela API Orchestrator pelo listener do tópico kafka e através do cep passado na requisição faz uma integração via webclient (Api de Data que iremos construir utilizando nodejs(Graphql) para buscar o endereço desse usuário e adicionar esses dados na transação.

  • ValidatedService - Essa API (Kotlin) recebe a mensagem produzida pela API Orchestrator pelo listener do tópico kafka e valida se o cpf do usuário esta apto para ser cadastrado através da api de Data construida em graphql.

  • UserRegistration - Essa API (Kotlin) recebe a mensagem produzida pela API Orchestrator pelo listener do tópico kafka e persiste os dados completos do usuario no banco de dados.

  • DataService - Essa API (Nodejs/Graphql) ira nos fornecer dados relacionados ao usuário, como endereço a partir do cep e validar se o documento passado na requisição não esta numa lista de documentos bloqueados.

Nesse artigo vamos utilizar o Saga Pattern Orchestration, que consiste em ter um microsserviço orquestrador para garantir a execução com sucesso ou rollback dessa transação garantindo sua atomicidade. Há também o Saga Pattern Choreography que pretendo fazer outro post para aprendermos juntos sobre ele.

Vamos utilizar apis em Java, Kotlin e nodejs(graphql) para deixar essas integrações mais interessante e demonstrar o poder do conceito de microsservices, onde podemos ter aplicações de varias linguagens se integrando uma com as outras, bora la que vai ser bem bacana.

OBS: Esse fluxo partiu da minha ideia e de longe não seria necessário utilizar o Saga Pattern, porem este artigo tem a finalidade de entendermos melhor o funcionamento e o conceito dessa ferramenta em microsserviços.

Parte 2

linkedin
github

💖 💪 🙅 🚩
2020nani
Hernani Almeida

Posted on March 12, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Saga Pattern in Microservices
graphql Saga Pattern in Microservices

March 12, 2024