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 x Aplicações Monolíticas
Imagem: 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
Imagem: https://www.opus-software.com.br/microservicos-diferenca-arquietura-monoliticas/