Um fato interessante sobre o desenvolvimento de aplicações é que em poucas ocasiões elas irão funcionar sozinhas e isoladas de outras aplicações.
E saber que a utilização de sistemas distribuídos está influenciando cada dia mais o norte do desenvolvimento de novas aplicações, e que mesmo nas aplicações legadas e monolíticas é necessário pensar em como será o reaproveitamento e a integração com essas novas aplicações. Logo a forma como será construída a integração pode interferir positivamente ou negativamente no resultado do projeto.
Historicamente existem algumas soluções já adotadas pelo mercado para realizar essas integrações, sendo elas: banco de dados compartilhado, transferência de arquivos, invocação remota de procedimento (RPC) e mensageria.
Cada uma dessas possui vantagens e desvantagens, este artigo é sobre a utilização de mensageria, mais especificamente sobre a funcionalidade do Microsoft Azure chamada Service Bus, que é um sistema genérico de mensagens desenvolvido pela Microsoft.
Atualmente, com a popularização dos dispositivos móveis e a famosa internet das coisas, muitos desenvolvedores estão começando a escrever suas aplicações distribuídas pensando em utilizar algum sistema com o foco em fila de mensagens e processamento assíncrono, e isto traz como benefício justamente a capacidade de escalabilidade horizontal e uma manutenção mais simples para o projeto, além da capacidade de dimensionar as cargas de trabalho mais facilmente, facilitando assim a construção de novos recursos.
Toda essa vantagem para a condução do projeto está em colocar uma camada intermediaria entre duas ou mais aplicações, na qual a primeira aplicação apenas cria uma mensagem e coloca na fila, fazendo com que a primeira aplicação não conheça o funcionamento interno e nem acompanhe o fluxo do processo da segunda aplicação.
A segunda aplicação é responsável pelo processamento da mensagem, e se for necessário responder de volta a primeira aplicação, é gerada outra mensagem com o resultado do processamento e esta é colocada em uma outra fila.
Benefícios da mensageria
Pode parecer confuso em um primeiro contato com essa abordagem, mas isso está alinhado com o que a computação em nuvem prega. Podemos ter, em um determinado instante, uma instância da aplicação A e cinco da aplicação B, e em outro instante três instâncias da aplicação A e dez da aplicação B.
As filas de mensagens atuam como laços com a função de amarrar essas aplicações. É possível identificar os seguintes benéficos dessa abordagem:
Baixo acoplamento: é extremamente complicado prever qual o escopo que o projeto irá adquirir. Porém com a introdução dessa camada intermediária entre as aplicações, e definindo uma interface comum para a comunicação, é possível estender essas aplicações de forma independente, sendo que a única premissa é obedecer à interface comum da mensagem.
Redundância: uma característica das filas de mensagens é a capacidade de manter a mensagem na fila até que ela seja processada. É possível que uma falha transiente impeça que a mensagem possa ser processada corretamente, sendo assim, é possível que o sistema de mensageria mantenha uma cópia da mensagem e tente novamente em um outro momento futuro.
Escalabilidade: sabendo que as mensagens estão armazenadas em um sistema intermediário, e se houver a necessidade de expandir a capacidade de vasão da fila, é muito simples adicionar uma nova instância de consumidor, fazendo com que mais mensagens sejam processadas em um menor espaço de tempo.
Sem a necessidade de mudar algum trecho de código, ou alterar algum arquivo de configuração, sendo simplesmente um processo de copiar a aplicação e subir em um novo processo.
Resiliência: a resiliência é a capacidade de resistir a momentos de falhas, e não deixar de entregar uma resposta ao usuário. Uma parte da aplicação pode falhar, mas isso não irá deixar toda a sua aplicação inoperante.
Esse cenário para as filas de mensagens seria o equivalente a dizer que se a aplicação B ficar indisponível, a aplicação A não será afetada, e as suas mensagens ficarão armazenadas na fila até que a aplicação B recupere o funcionamento normal, e como existe uma quantidade de mensagens anormal na fila, é possível criar novas instâncias da aplicação B, visando recuperar o tempo perdido com a indisponibilidade parcial da solução.
Garantia de ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais