paint-brush
Arquitetura de microsserviços no desenvolvimento de aplicativos: vantagens e desvantagenspor@axlle
632 leituras
632 leituras

Arquitetura de microsserviços no desenvolvimento de aplicativos: vantagens e desvantagens

por Aleksey Alekseev7m2022/07/15
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

As aplicações web modernas são multifuncionais e a transformação digital aumenta os requisitos de software. Em uma arquitetura de microsserviços, o aplicativo da web é desenvolvido como um conjunto de componentes pequenos e mal interconectados (microsserviços). Essa arquitetura encontrou sua aplicação no campo da computação em nuvem. As vantagens dos microsserviços em comparação com a arquitetura monolítica com microsserviços são comparadas com as vantagens da arquitetura monolítica. Os microsserviços são desenvolvidos, implantados e mantidos quase independentemente uns dos outros. Cada microsserviço visa resolver apenas sua tarefa específica de negócios, possui seu banco de dados e contatos com outros microsserviços por meio da API.

Company Mentioned

Mention Thumbnail
featured image - Arquitetura de microsserviços no desenvolvimento de aplicativos: vantagens e desvantagens
Aleksey Alekseev HackerNoon profile picture


Introdução

Na economia moderna, a criação de software é uma indústria inteira. Por um lado, ajuda as empresas a automatizar e digitalizar todos os processos e, por outro lado, gera lucro e cria ativos virtuais. Atualmente, P&D tornou-se mais complicado, o número de programadores está crescendo constantemente e as tarefas de TI estão se tornando mais complexas.


Esses motivos levaram ao surgimento de novas metodologias de desenvolvimento de software e tipos de arquitetura.


As aplicações web modernas são multifuncionais e a transformação digital aumenta os requisitos de software. O aplicativo deve ser: facilmente escalável, flexível e multiplataforma e modificável para as tarefas do usuário. Os gerenciadores de tarefas definem esses requisitos no estágio de desenvolvimento desse software.


Em primeiro lugar, para criar software para empresas modernas, você deve estudar seriamente o processo de desenvolvimento de software e escolher a arquitetura certa.


A escolha da arquitetura no desenvolvimento de software

Via de regra, anteriormente todos os aplicativos eram desenvolvidos com base em uma arquitetura monolítica. Vamos dar uma olhada no que é um aplicativo monolítico.


Aplicativos monolíticos são desenvolvidos como um todo. A lógica de processamento das requisições é colocada dentro de um único processo.


Os aplicativos da Web Monolith podem ser estruturados na forma de módulos e blocos. Classes separadas, funções, etc. são usadas, dependendo da linguagem de programação usada. Mas as conexões entre os módulos são muito fortes.


Isso leva à seguinte conclusão: alterar qualquer módulo afetará muito o funcionamento de todo o aplicativo.


Por exemplo, podemos considerar um típico aplicativo web para LMS (learning management system).

Este software possui uma arquitetura de três níveis, que inclui:

  1. interface de usuário;
  2. o componente do lado do servidor para lógica de negócios de software e acesso a dados;
  3. o banco de dados.


As funções de negócios de tal aplicativo são muito diferentes. Inclui os seguintes blocos: "Cursos e treinamentos", "Catálogo de cursos", "Estrutura organizacional da empresa", "Calendário de eventos", "Relatórios", "Mensagens", "Novidades", etc.


No entanto, todos eles são combinados em um único bloco monolítico e estão localizados em um servidor. É bastante difícil escalar e alterar tal aplicação.


Vamos destacar as desvantagens da arquitetura monolítica:

  • Mesmo uma pequena alteração em um aplicativo da web leva à montagem e implantação de uma nova versão de todo o software.
  • Você só pode dimensionar todo o aplicativo. É impossível escalar um bloco separado.
  • Se algum módulo de aplicativo falhar, como resultado, a operação de todo o aplicativo pode ser interrompida.
  • As ferramentas de desenvolvimento são sempre limitadas à pilha de tecnologia selecionada.
  • Inconveniência em gerenciar uma grande equipe de desenvolvedores qualificados. Cada desenvolvedor deve entender todas as funcionalidades do aplicativo, não apenas seu módulo.
  • Qualquer atualização afeta toda a funcionalidade do software. Isso leva ao risco de falha do aplicativo após as atualizações. Portanto, apenas lançamentos raros de atualizações são feitos.
  • Quaisquer alterações no banco de dados podem afetar o funcionamento de todo o aplicativo e precisam de alterações no código.


Se este é um pequeno programa gratuito para ensinar algumas habilidades individuais a um usuário comum, e até mesmo atualizado raramente, então uma arquitetura monolítica é bastante adequada para tal desenvolvimento.

Se estamos falando de software corporativo (por exemplo, LMS), e mesmo atualizado com frequência, é necessário escolher uma arquitetura de microsserviços.


A arquitetura de microsserviços é a abordagem ideal para o desenvolvimento de software. Em uma arquitetura de microsserviços, a aplicação web é dividida em componentes pequenos e autônomos (microsserviços) com interfaces específicas. Essa arquitetura encontrou sua aplicação no campo da computação em nuvem.


Qual é a diferença entre microsserviço e arquitetura monolítica? Em uma arquitetura de microsserviços, o aplicativo da web é desenvolvido como um conjunto de componentes pequenos e mal interconectados, chamados de microsserviços. Os microsserviços são desenvolvidos, implantados e mantidos quase independentemente uns dos outros.


Por exemplo, um aplicativo da web para LMS. Cada microsserviço visa resolver apenas sua tarefa específica de negócios, possui seu banco de dados e contatos com outros microsserviços por meio da API. Assim, será necessário desenvolver os seguintes microsserviços para o web app LMS: "Cursos e treinamentos", "Catálogo de cursos", "Estrutura organizacional da empresa", "Calendário de eventos", "Relatórios", "Mensagens", "Novidades", etc.


Mas deve-se observar que existe outro tipo de arquitetura — uma arquitetura orientada a serviços (SOA). Às vezes é confundido com microsserviço. Parece que as diferenças entre arquitetura de microsserviços e SOA não são tão óbvias. Mas existem diferenças entre microsserviços e SOA. Isso diz respeito à função do barramento de serviço corporativo (ESB).


SOA é uma arquitetura para toda a empresa. Seu objetivo é padronizar a interação e integração dos serviços web da empresa. O objetivo da arquitetura de microsserviços é desenvolver uma aplicação específica. Os seguintes templates estão relacionados a SOA: CORBA, web services, message queues, ESB, etc.


A seguir, falaremos em detalhes sobre as vantagens dos microsserviços para o desenvolvimento de aplicativos da web.


As principais vantagens da arquitetura de microsserviços

Avaliaremos as vantagens dos microsserviços em comparação com uma arquitetura monolítica.

  • Simplicidade e independência na implantação de aplicativos. No caso de microsserviços, você pode implantar apenas um módulo de aplicativo. Por exemplo, no nosso caso com LMS, você pode implantar apenas um módulo ("Calendário de Eventos"), deixando o restante dos componentes do aplicativo inalterados. Se você precisar reescrever o código no módulo "Relatórios", não há necessidade de obter muitas permissões. Este componente ("Relatórios") é um microsserviço separado e independente.
  • Escalabilidade: precisão e eficiência. Em primeiro lugar, ele precisa determinar quais microsserviços exigirão escalabilidade frequente e quais não. Os módulos que não precisam ser dimensionados com frequência podem ser colocados em servidores mais fracos e os frequentemente escaláveis podem ser dimensionados separadamente de todos os outros softwares.
  • Maior resiliência do aplicativo. O design de aplicativo racional e a construção de conexões independentes entre os módulos oferecem a seguinte vantagem: a falha de um dos módulos não leva à falha de todo o software. Por exemplo, se o módulo "Mensagens" falhar, o usuário receberá uma notificação sobre a indisponibilidade temporária deste bloco. Todos os outros blocos de aplicativos funcionarão.
  • Seleção de pilha de tecnologia. Ao desenvolver cada microsserviço, você pode escolher a pilha de tecnologia mais adequada.
  • Flexibilidade na gestão de equipes. Por exemplo, a equipe nº 1 desenvolve o serviço "Catálogo de cursos", a equipe nº 2 - "Calendário de eventos" e a equipe nº 3 - "Notícias". É por isso que é mais fácil para um novo especialista começar a trabalhar mais rapidamente. Não é necessário estudar por muito tempo a funcionalidade de todo o aplicativo, basta aprender a pilha de tecnologia para um microsserviço específico.
  • A capacidade de reutilizar a funcionalidade (para finalidades diferentes e de maneiras diferentes).
  • A substituição ou remoção de serviços desnecessários é resolvida de forma rápida e fácil. Por exemplo, se um cliente específico não usar o bloco "News" no LMS, esse módulo pode ser simplesmente removido, sem alterações globais em todo o software.
  • Cada microsserviço usa seu banco de dados. Este fato leva à independência dos modelos de dados. Por exemplo, se um programador alterou o modelo de dados em um determinado serviço, isso não afetará o funcionamento de outros serviços.


Como podemos ver, a arquitetura de microsserviços tem vantagens significativas e atrai cada vez mais desenvolvedores. Porém, antes de escolher uma arquitetura para desenvolvimento de software, deve-se atentar para as desvantagens dos microsserviços. Listaremos os abaixo.


Desvantagens dos microsserviços

O sistema de microsserviços é distribuído. Por um lado, isso é uma vantagem no trabalho do software. Por outro lado, se houver muitos microsserviços e cada um deles fizer solicitações a outros serviços, o tempo de resposta resultante aumentará e aparecerão "pontos de falha".


Existem duas maneiras de resolver este problema:

  1. alterar os detalhes da chamada, o que pode levar à diminuição do número;
  2. a introdução da assincronia, as chamadas são realizadas em paralelo, como resultado, isso leva ao fato de que o tempo de resposta final é o tempo mais lento de todos, e não o tempo total de todos os atrasos.


A constante complicação do processo de desenvolvimento, que leva ao aumento das exigências para a qualificação dos programadores. Em uma arquitetura de microsserviços, o papel dos processos de integração e dos processos de entrega contínua é grande.


E é por isso que é muito difícil lidar com muitos processos sem automatizar testes e implantar serviços. Esses fatores exigem a implementação do DevOps na empresa e a estreita cooperação dos desenvolvedores com engenheiros de sistema, testadores, suporte técnico etc.


A descentralização na arquitetura de microsserviços cria problemas com a consistência dos microsserviços. Por exemplo, em um aplicativo monolítico, muitas alterações podem ser feitas em uma transação, mas também é possível reverter se ocorrer uma falha, mantendo a consistência dos dados.


Ao usar microsserviços, a seguinte situação é possível: em caso de mau funcionamento de um dos serviços, o outro microsserviço para de responder. Nesse caso, é uma questão de prioridade do desenvolvedor: você pode priorizar a disponibilidade de componentes (em caso de falha de um serviço, os outros continuarão funcionando). Em geral, os desenvolvedores devem encontrar um equilíbrio entre a consistência dos serviços e sua disponibilidade, e isso deve ser feito com muito cuidado.


Conclusões

Antes de escolher uma arquitetura de microsserviço para desenvolver aplicativos da Web, os desenvolvedores devem avaliar suas vantagens e desvantagens. Afinal, a escolha errada da arquitetura pode afetar o desempenho e a funcionalidade do software no futuro.


Se a arquitetura de microsserviços for usada incorretamente, os desenvolvedores podem ter grandes problemas que anulam todas as vantagens dos microsserviços.


Na próxima parte do artigo, vamos considerar as ferramentas técnicas que um desenvolvedor que vai usar uma arquitetura de microsserviços no desenvolvimento de software deve dominar.