Discutindo o uso de mensageria
Quando discutimos o uso de mensageria, é fundamental compreender por que devemos utilizá-la. Como pessoas desenvolvedoras atuantes no mercado de trabalho, precisamos tomar decisões baseadas na necessidade e no negócio, em vez de seguir tendências. Muitas vezes, ouvimos sobre o uso de mensageria, mas é importante refletir se realmente faz sentido em determinado cenário. A análise deve sempre ser motivada pelo porquê e onde utilizar.
Vamos começar discutindo as razões para usar mensageria e, consequentemente, entender em quais cenários esse recurso se encaixa melhor. Primeiramente, é necessário compreender que toda integração entre recursos, seja entre sistemas, um sistema e um banco de dados, ou qualquer outro tipo de comunicação, apresenta desafios. Por exemplo, quando falamos em integração de sistemas, geralmente pensamos na base REST. A base REST é um endpoint onde chamamos a aplicação com um método HTTP, o que gera algum retorno ou permite a passagem de informações para serem adicionadas a outro sistema. Essa integração direta e síncrona é comum, mas gera uma dependência entre os sistemas.
Explorando limitações da integração síncrona
Por exemplo, se o sistema B, que recebe uma requisição, sofre alta latência ou está fora do ar, ocorre uma falha em cascata. Se o sistema A chama o sistema B e ele está fora, o sistema A falha. Embora existam recursos de resiliência que minimizam o impacto para o cliente, o acoplamento entre sistemas é real. Quando uma falha ocorre em um sistema, ela impacta diretamente o outro. A integração síncrona, relacionada à base REST, é uma comunicação em tempo real, onde o produtor, como o sistema A, espera uma resposta imediata. O exemplo clássico é a base REST.
Um dos trade-offs dessa relação entre microserviços é o forte acoplamento gerado pela base REST. Não estamos dizendo que não se deve utilizá-la, mas é importante entender em quais cenários a mensageria se encaixa. Não existe uma solução única; há cenários para mensageria e muitos para a base REST. As limitações desse modelo incluem o bloqueio no modelo tradicional. Embora existam modelos reativos que não têm esse bloqueio de tempo de espera, ainda precisamos de uma thread disponível para receber a resposta do sistema de destino. No modelo tradicional, a thread fica bloqueada até a resposta. No reativo, ela não fica bloqueada, mas ainda precisamos de uma thread para buscar a informação quando o sistema de destino responde.
Abordando limitações de escala e impacto de erros
Há uma limitação em termos de escala. Os recursos dependem uns dos outros, e não podemos escalar o serviço A sem considerar se o recurso B está preparado para a quantidade de requisições. Se o sistema B não escala junto, o aumento de requisições pode impactar o banco de dados e causar problemas. Além disso, há o impacto em caso de erros. Se o sistema B falha, ele impacta diretamente o A, mesmo com formas de mitigação.
Agora, vamos falar sobre o modelo assíncrono, que envolve mensageria. No modelo assíncrono, enviamos mensagens. O produtor, ou sistema A, envia uma mensagem, e espera-se que o sistema de destino, o microserviço B, receba essa mensagem. A principal diferença é o envio de mensagens em vez de chamadas diretas.
Introdução à mensageria em microserviços
As requisições em sistemas de microserviços acabam ficando desacopladas. Vamos considerar um cenário com um microserviço A, um microserviço B e um recurso de mensageria. Quando enviamos uma mensagem do microserviço A para a mensageria, a partir desse momento, o microserviço A já não tem mais uma obrigação direta com o serviço B. O consumidor, então, se encarrega de consumir a mensagem, promovendo o desacoplamento temporal entre os serviços.
O elemento central entre os serviços são filas ou tópicos. Ao longo do curso, entenderemos a diferença entre eles, quando utilizar um ou outro, e as especificidades de cada um. Inicialmente, estamos introduzindo o conceito de mensageria e seus benefícios. Embora não seja uma solução universal, a mensageria oferece vantagens como o desacoplamento entre serviços, o que reduz a necessidade de recursos de resiliência que seriam necessários em sistemas baseados em APIs REST.
Explorando o modelo assíncrono e seus benefícios
No modelo assíncrono, enviamos a mensagem para o recurso de mensageria. Se o sistema B estiver fora do ar, ele poderá consumir as mensagens quando voltar a funcionar, sem impactar o sistema A. Isso resulta em maior resiliência a falhas, desde que o sistema de mensageria esteja operacional. Além disso, a mensageria permite escalabilidade horizontal, reduzindo a preocupação com recursos, e oferece tolerância a picos de carga.
Com um consumidor, conseguimos implementar o conceito de backpressure (pressão reversa), onde o consumidor dita o ritmo de consumo das mensagens. Diferente de um sistema REST, onde o aumento de carga no sistema A pode impactar o sistema B, na mensageria, o consumidor solicita as mensagens no ritmo que consegue processar, mantendo o sistema saudável.
Casos de uso para mensageria
A mensageria é útil em diversos cenários, como processamento de pedidos em e-commerce, onde as operações são desacopladas e não requerem resposta imediata. Exemplos incluem o envio de mensagens para atualizar o estoque após uma compra. Outros casos de uso incluem sistemas antifraude, notificações, integrações entre domínios de negócio, filas de e-mails e logs de auditoria. A mensageria pode ser aplicada em inúmeros cenários, e ao longo do curso, aprenderemos a identificar quando faz sentido utilizá-la em nossos sistemas.
Conclusão
Para sistemas resilientes, a mensageria é amplamente utilizada. Dois sistemas não dependem diretamente um do outro, e as mensagens são armazenadas até que possam ser consumidas, mesmo em caso de falha de um dos microserviços. Isso permite desacoplar, proteger e escalar nossos sistemas, com controle mais fino de escala e desacoplamento, que são fundamentais para arquiteturas distribuídas saudáveis.
É importante ressaltar que a mensageria não substitui o modelo REST, mas oferece uma alternativa valiosa no contexto de microserviços. Ao longo do tempo, entenderemos melhor quando e como utilizar mensageria. Esta introdução visa apresentar os conceitos iniciais, e nos próximos vídeos, exploraremos mais recursos de mensageria e os diferentes tipos disponíveis. Nos encontramos no próximo vídeo. Até lá!