Acho histórias e analogias muito fascinantes e — para explicar as filas de mensagens de uma forma super acessível, usaremos algumas analogias:
bases de dados, armazéns e correios.
Fique comigo…
Os bancos de dados são usados principalmente para persistência de dados – pense em Postgres ou MongoDB. Assim como os bancos de dados, as filas de mensagens também desempenham alguma função de armazenamento.
Mas por que usar filas de mensagens para armazenamento de dados quando existem bancos de dados?
Pense em bancos de dados e filas de mensagens em termos de
armazéns e correios.
-
Bancos de dados são como armazéns –
eles são projetados para conter muitas coisas diferentes, na maioria das vezes, durante um longo período de tempo. -
As filas de mensagens, por outro lado, são como correios –
Onde cartas e pacotes param brevemente no caminho para serem entregues. Os pacotes não ficam lá por muito tempo; eles são apenas classificados e enviados para onde precisam ir.
Essencialmente, os bancos de dados são projetados principalmente para cenários em que é necessário armazenar e gerenciar algum estado durante um longo período de tempo. Por outro lado, você gostaria de usar uma fila de mensagens para dados que não deseja manter por muito tempo. Uma fila de mensagens retém informações apenas o tempo suficiente para enviá-las à próxima parada.
Se você observar as filas de mensagens sob a perspectiva dos correios, começará a apreciar o fato de que
uma fila de mensagens é simplesmente um meio através do qual os dados fluem de um sistema de origem para um sistema de destino.
Considerar as filas de mensagens como meio de comunicação é apenas uma perspectiva, mas é suficiente para ajudá-lo a começar com as filas de mensagens. Vamos aprofundar essa perspectiva.
Uma fila de mensagens é uma tecnologia que simplesmente recebe dados, formalmente chamada
mensagens
no mundo do enfileiramento de mensagens de um(s) sistema(s) de origem
(produtor),
alinha essas mensagens na ordem em que chegam e depois envia cada mensagem para algum destino final, geralmente outro sistema chamado
consumidor.
Observe que tanto o
produtor
e
consumidor
também podem ser apenas módulos no mesmo aplicativo.
Agora que entendemos a essência das filas de mensagens, vamos explorar como elas funcionam.
Como funciona uma fila de mensagens
Normalmente, produtores e consumidores se conectariam e se comunicariam com uma fila de mensagens por meio de algum protocolo suportado pela fila de mensagens.
Em outras palavras, uma fila de mensagens implementaria um protocolo ou algum conjunto de protocolos. Para se comunicar com uma fila de mensagens, um produtor ou consumidor aproveitaria alguma biblioteca cliente que também implementasse o protocolo ou um dos protocolos suportados pelo intermediário.
A maioria dos corretores de mensagens geralmente implementa pelo menos um destes protocolos: AMQP, MQTT e STOMP. Você pode aprender mais sobre esses protocolos em nosso guia AMQP vs MQTT ou no guia AMQP, MQTT e STOMP.
Quando usar uma fila de mensagens
Já vimos como as filas de mensagens permitem que as mensagens fluam de um sistema de origem para um sistema de destino. Essa natureza inerente das filas de mensagens as torna perfeitas para comunicação entre sistemas em uma arquitetura de microsserviços.
Qual é a arquitetura de microsserviços? Novamente, vamos começar com algo que você conhece: Monólitos.
Um monólito é caracterizado por toda a base de código estar dentro de um aplicativo. Esta é uma ótima abordagem para projetos menores, e muitas novas aplicações começam como um monólito. Isso ocorre porque em monólitos menores são mais rápidos de desenvolver, mais fáceis de testar e mais fáceis de implantar.
Porém quando uma aplicação começa a crescer, mais problemas você verá com esta arquitetura. Mesmo com uma abordagem estruturada, o código muitas vezes começa a ficar confuso e a experiência de desenvolvimento torna-se inconveniente. As alterações tornam-se mais difíceis de implementar e o risco de introdução de bugs é maior.
Muitas vezes, a solução para esses problemas é dividir seu aplicativo monolítico em microsserviços. E os microsserviços são serviços menores e mais modulares que se concentram em uma única área de responsabilidade.
A abordagem de microsserviço tem alguns benefícios:
Com microsserviços, há isolamento de falhas – se um serviço apresentar bugs, esse bug será isolado apenas para esse serviço. Isso, por sua vez, torna seu aplicativo mais confiável em comparação com um monólito, onde um único erro de componente pode derrubar todo o aplicativo.
Há também a oportunidade de diversificar a pilha de tecnologia de serviço para serviço, o que ajuda a otimizar seus serviços para sua finalidade. Por exemplo, um serviço de desempenho crítico tem a oportunidade de fazer certas compensações de desempenho, sem impor limites ao resto dos serviços.
Naturalmente, o dimensionamento se torna muito mais fácil porque você pode dimensionar apenas um de seus serviços em vez de dimensionar o aplicativo inteiro e economizar muitos recursos.
Agora que entendemos o que são microsserviços, vamos voltar para: Uso de filas de mensagens para comunicação entre sistemas em uma arquitetura de microsserviços.
Mas antes de chegarmos a isso, observe que o enfileiramento de mensagens não é a única maneira de fazer com que os serviços se comuniquem. Existe uma outra maneira comum:
Comunicação síncrona,
onde as solicitações de rede são enviadas diretamente de um serviço para outro por meio de chamadas de API REST, por exemplo. O Serviço A iniciará uma solicitação e aguardará que o Serviço B termine de lidar com a solicitação e envie uma resposta antes de continuar com a atividade que estava realizando.
Com o enfileiramento de mensagens, a comunicação é assíncrona – neste caso, o Serviço A pode enviar mensagens para um corretor de mensagens e, em vez de esperar pelo Serviço B, receberá uma confirmação super rápida do corretor e então poderá continuar fazendo o que estava fazendo enquanto o Serviço B busca a mensagem na fila e a processa.
Isso evitará que seu serviço fique sobrecarregado se houver um aumento repentino na carga de trabalho; em vez disso, as mensagens serão armazenadas em buffer pela fila e seus serviços poderão apenas tratá-las quando tiverem capacidade.
Aí está, uma introdução muito gentil às filas de mensagens. Agora, vamos fazer uma recapitulação.
Conclusão
Em resumo, as filas de mensagens são como agências postais para seus dados, movendo mensagens de um lugar para outro. Eles funcionam recebendo mensagens dos produtores, alinhando-as na ordem de chegada e enviando-as aos consumidores. Isso os torna perfeitos para situações em que os sistemas precisam se comunicar sem esperar – pense em arquiteturas de microsserviços.
Compreender como funcionam as filas de mensagens e quando usá-las pode ajudá-lo a criar aplicativos mais confiáveis e escaláveis.
Fonte: theverge

