Fila de mensageria
Imagine a seguinte situação: uma aplicação A no momento que se comunica com a aplicação B usando REST, é a aplicação B não está funcionando isso causa um error na aplicação A. Nesse momento, a fila de mensageria é a forma correta de se comunicar entre as aplicações.
É uma forma de comunicar entre as aplicações, comumente usada em arquitetura de micro serviço e arquitetura orientada a eventos. Eu penso que é bom para cenários quando eu preciso comunicar entre aplicações é necessário garantir que as ações iram ser executadas e desacoplamento entre as aplicações.
Quando falamos sobre fila de mensageria existem 3 componentes que são necessários entender:
- Produtor: aplicação responsável por publicar as mensagens. As mensagens são dados usados por outro componente que vou falar mais tarde.
- Message broker(Fila): componente responsável por armazenar as mensagens publicadas pelo produtor e distribuir as mensagens entre os consumidores. Ex: SQS, RabbitMQ, Kafka e etc.
- Consumidor: aplicação responsável por consumir mensagens armazenadas na fila.
Imagem explicando os componentes mencionados acima:
Outro aspecto da fila de mensageria é que são assíncronos. Processos assíncronos é um processo que pode ocorrer em um tempo mais tarde, não no mesmo momento. Ex: comprar produto no e-commerce, não precisa gerar a nota fiscal no momento, depois envia pelo email tempo depois.
Alguns cenários para aplicar fila de mensageria:
- Quando precisa executar uma ação que demora muito, deve enviar a mensagem para outra aplicação(consumidor) executar. Isto evita problemas de performance na principal aplicação. Ex: gerar relatórios é enviar por email.
- Comunicação entre aplicações devido garantir que as ações serão executadas.
- Quando executar uma ação que parte de processo é demorado, pesado é não é necessário executar no momento, então deve usar fila de mensageria Ex: comprar produto no e-commerce, não precisa gerar a nota fiscal no momento, depois envia pelo email tempo depois.
Imagem explicando um cenário usando fila de mensageria para gerar relatórios:
Explicando passo a passo o cenário da imagem acima:
- Pessoas enviam requisição para api para gerar o relatório.
- Código da api pública as mensagens para a fila de mensageria.
- O consumidor consome os dados e busca em um banco de dados réplica para evitar gerar um processo pesado no banco de dados principal.
- After generated reports send to s3 and send email with link file s3.
Até o momento fila de mensageria é ótimo, mas existem desafios em usar essa tecnologia:
- O Fluxo da aplicação é complexo.
- Escala um aplicativo que usa mensageria é diferente de escalar aplicações usando protocolo http.
- Eventual consistência significa que uma ação que foi executada para fazer uma alteração irá ocorrer mais tarde, não no mesmo momento.
- Escrever logging das ações das aplicações. Como relacionar os logs da aplicação produtora e consumidora.
- Não pode escrever log em arquivos, porque é difícil analisar os problemas quando ocorre um bug.
Em resumo, a fila de mensageria é uma ótima forma de comunicação entre aplicações devido às aplicações ficarem desacopladas e mesmo se um aplicativo não estiver rodando no momento, mais tarde a aplicação consumidora conseguirá consumir os dados armazenados na fila. Mas sabemos que qualquer tecnologia não é bala de prata, então é necessário entender o porque usar e os desafios em adotar ela.