Skip to content

A Saga Pattern implementation with Kafka, MongoDb and Python.

Notifications You must be signed in to change notification settings

victoramsantos/saga-pattern-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

saga-example

Projeto de exemplo para demonstrar o padrão de arquitetura Saga.

No padrão Saga temos que para um determinado microsserviço as informações de completude de uma transação é dividida entre seus microsserviços servidores. Desta forma para definir, por exemplo, o estado de uma transação é necessário aguardar o processamento dos microsserviços servidores.

Cenário - Padaria

Para exemplificar o padrão foi escolhido o domínio de uma padaria. Neste domínio temos três personas sendo Garçons (waiter), Cozinheiros (cooker) e Barmen (bartender). Neste cenário, os garçons respondem quais são os itens do menu, realizam os pedidos e verificam se os pedidos estão prontos. Os cozinheiros e barmen recebem os pedidos e os produzem, aguardando o tempo necessário para preparo de cada item. Uma vez que cada item do pedido foi enviado para o preparo, é possível perguntar ao garçom se o pedido já está pronto. Caso esteja, o estado do pedido será pronto, caso contrário, pendente.

Arquitetura

Abaixo segue a arquitura implementada.

architecture

Conforme pode ser visto, foram criados diferentes microsserviços para cada persona. Optamos por utilizar o Apache Kafka para gerir as mensagens entre os microsserviços e o MongoDd como banco de dados.

Todos os microsserviços foram implementados em Python. Porém, como apenas o microsserviço waiter possui interface com o usuário, ele possui uma interface web construida utilizando Flask. Já os demais microsserviços (cooker e bartender) são apenas consumidores, logo não possuindo interface web.

Rodando a stack

Para construir as dependências necessárias para os microsserviços foi contruido um docker-compose.yml. Ele cria os containers Docker das aplicações, o Kafka e suas dependências (Zookeeper) além dos bancos de dados dos microsserviços.

Testando a stack

Visando simplificar o teste, é disponibilizado uma postman collection. Para confirmar o comportamento do padrão saga, execute uma chamada da API POST /order e verifique na API GET /order a mudança do estado (campo status) dos itens.