Contexto: apresentar a arquitetura de Microservices para discutir a aplicabilidade, recursos e benefícios de uso no desenvolvimento de aplicações.


Microserviço

O desenvolvimento de Microserviços (Microservice) é um padrão de design para construir um aplicativo único de pequenos serviços, com o propósito de realizar deploys independentes e facilitar a gestão de múltiplos serviços.

Desta forma, cada serviço pode executar o seu próprio processo, realizando comunicações leves, por exemplo API com recursos HTTP. A ideia é descentralizar o gerenciamento dos serviços, podendo utilizar diferentes linguagens e tecnologias.

Entre as principais características das arquiteturas de microserviços:

  • Podem ser escritos em várias linguagens e estruturas
  • Trabalha com deploys individuais e múltiplos serviços simultâneos
  • Possuem implementações independentes
  • Baixo ou nenhum acoplamento
  • São descentralizadas
  • URLs (nomes exclusivos) para determinar seus locais
  • Desenvolvidas e lançadas com processos automatizados

Quando há diversos serviços, é necessário gerenciar a dependência entre eles e das instâncias de aplicações. Também devemos ressaltar a estratégia de comunicação entre os serviços como REST ou serviços mensageiros (RabbitMQ e ActiveMQ).


Aplicações Monolíticas

Já as aplicações monolíticas, surgiram no contexto de executável lógico único -executadas em único processo, por exemplo as organizações que trabalham com três camadas – servidor UI | Aplicativo | Banco de dados, e centralizam as solicitações HTTP e lógica do domínio no Aplicativo do lado do servidor. Qualquer mudança neste caso envolve o deploy de uma nova versão do Aplicativo no servidor. A escala neste modelo é horizontal, executando instâncias atrás de um balanceador de carga.

Comparação Microserviço Aplicações Monolíticas

microservicesImagem: martinfowler.com/articles/microservices.html

  • O aplicativo monolítico possui funcionalidades específicas ao domínio; comumente trabalham no modelo de camadas e o dimensionamento é feito clonando em vários servidores/máquinas virtuais/contêineres.
  • O aplicativo de microserviço separa as features em serviços menores separados e independentes, criando instâncias desses serviços entre servidores/máquinas virtuais/contêineres.

O ponto a considerar em trabalhar com aplicativos monolíticos é na realização dos deploys na nuvem, onde uma pequena alteração requer forte modificação no monolito e que o deploy seja refeito. Em microserviços temos a suite de serviços com deploy independente e escaláveis.

Por fim, o gráfico abaixo (da Opus Software) demonstra que a adoção de microserviços impacta a produtividade dos times envolvidos:

  • Em projetos de baixa complexidade: a produtividade é impactada negativamente
  • Em projetos de alta complexidade: a produtividade tende a aumentar

microservicos-produtividade
Imagem: https://www.opus-software.com.br/microservicos-diferenca-arquietura-monoliticas/