Quando falamos em desenvolvimento e arquitetura de um sistema, muito se escuta sobre arquitetura monolítica e de microsserviços.
A proposta da arquitetura de microsserviços é desenvolver sistemas mais flexíveis, escaláveis e de simples manutenção, que é o contrário da arquitetura monolítica.
Neste artigo nós vamos entender um pouco de cada uma dessas arquiteturas e as vantagens e desvantagens de cada uma delas.
Arquitetura Monolítica x Arquitetura de Microsserviços
O que é Arquitetura Monolítica?
A arquitetura monolítica é um sistema único, ou seja, todas as funções estão em um único pacote a ser distribuído ao cliente. Sua principal característica é acoplamento de módulos de diferentes abordagens, ou seja, é possível acessar código de módulos distintos sem a necessidade de realizar integrações.
Vantagens da Arquitetura Monolítica
- Estruturação simplificada: por ser um projeto único, a estruturação é a mesma para todas as partes do sistema;
- Poucos recursos tecnológicos: um sistema monolítico requer menos recursos tecnológicos, em geral necessitando de dois ou três recursos, como por exemplo, servidor de aplicação, servidor de banco de dados e servidor de e-mail;
- Um único profissional técnico: apesar de não recomendado, mas uma aplicação monolítica pode ser desenvolvida utilizando apenas um profissional, dado o contexto em que, apresentação e processamento podem ser feitos utilizando uma única linguagem de programação;
- Baixa integração: não há necessidade de realizar integração entre módulos distintos dentro do mesmo sistema, tais “integrações” são feitas dentro do código-fonte;
Desvantagens da Arquitetura Monolítica
- Manutenção: a aplicação se torna cada vez maior, o código será cada vez mais difícil de entender e o desafio de fazer alterações rápidas e ter que subir para o servidor só cresce;
- Linha de código: uma linha de código que subiu errada pode quebrar todo o sistema e ele ficar totalmente inoperante;
- Difícil de testar: dado o alto acoplamento dos objetos de negócio, realizar testes é complexo, pois as funções e características acabam por ser contaminar com necessidades de outros módulos do sistema;
- Difícil de escalonar: Por ser uma aplicação única, o escalonamento só pode ser feito do sistema como um todo, isso significa, escalonar inclusive partes do sistema que estão super-dimencionadas;
- Linguagens de programação: não há flexibilidade em linguagens de programação. Aquela que for escolhida no início do projeto terá que ser seguida, sempre. Se o desenvolvimento de uma nova funcionalidade exigir outra linguagem de programação, um sistema novo deverá ser criado somente para esta funcionalidade e posteriormente ser integrado ao sistema atual.
O que é Arquitetura de Microsserviço?
Quando falamos de arquitetura de microsserviços, falamos em uma coleção de serviços ou sistemas distribuídos. Ou seja, separa-se as partes em domínios independentes.
A ideia da arquitetura de microsserviços é separar estes domínios de forma que se tornem únicos dentro do contexto do sistema final e, subsequente sejam integrados à medida que a aplicação necessite da sua funcionalidade, com isso, um sistema utilizando a arquitetura de microsserviços, são vários pequenos sistemas especializados interligados.
Vantagens da Arquitetura de Microsserviços
- Altamente testável: por conter apenas regras negócio especificas do microsserviços realizar testes é mais fácil e objetivo;
- Independência e agilidade: os deploys de cada microsserviço são totalmente independentes e mais rápidos, além da possibilidade de automação de inúmeras tarefas deste processo;
- Simplicidade e Objetividade: os serviços são pequenos e limitam-se a resolver um determinado problema dentro de um sistema maior, dessa forma, seu código é simples e objetivo;
- Escalonamento por demanda: é possível escalonar somente os pontos dentro de um sistema em que há maior demanda por consumo de recursos.
- Foco no negócio: é possível dividir cada serviço em equipes, focadas em trabalhar nas demandas de negócio para seu respectivo serviço.
- Linguagem de programação: é possível criar cada microsserviço em uma linguagem de programação diferente.
Desvantagens da Arquitetura de Microsserviços
- Estruturação complexa: dado seu conceito distribuído, a estruturação do projeto é mais complexa que na monolítica, demandando integrações mesmo para funcionalidades simples;
- Definição da abrangência do microsserviço: a divisão dos serviços deve ser feita com muita atenção e cuidado, “nunca se chegará à divisão perfeita, pois, neste modelo, o alinhamento ao negócio é que dita as possibilidades de divisões ou redivisões”;
- Múltiplos profissionais: diferentemente do sistema monolítico, em uma arquitetura de microsserviços, será difícil utilizar somente um profissional, no geral, é necessário uma equipe que contemple os conhecimentos de front-end, back-end, DevOps e negócio, e em alguns casos, empresas maiores, há necessidade do conhecimento de compliance e segurança.
- Vários recursos tecnológicos: dada sua estruturação complexa, diversas ferramentas são necessárias para publicar e executar um sistema em microsserviço;
Principais diferenças entre a arquitetura de microsserviços e a monolítica.
Agora que já sabemos um pouco mais sobre o que é a arquitetura de microsserviços e a arquitetura monolítica, vamos entender quais as principais diferenças entre elas.
Governança
A arquitetura monolítica tem um nível de complexidade de coordenação muito menor que a arquitetura de monosserviços. Porém, apesar disso, como tudo é desenvolvido em um único código, um pequeno problema pode causar a queda completa do serviço.
Já quando falamos em microssistemas, isso não acontece, permitindo o uso de funcionalidades que não sejam afetadas por o que está em manutenção.
Prazo do projeto
Quando falamos em tempo, a arquitetura monolítica leva vantagem. Isso porque, por conta da complexidade da arquitetura de microsserviços, os processos envolvem mais tempo de execução.
Atualização
Nesse caso, ao usar a arquitetura monolítica, toda vez que ocorrer uma atualização, o sistema aumenta e fica mais complexo, exigindo uma reinicialização de todo o sistema que pode causar uma perda temporária de alguma funcionalidade.
Por causa disso, a arquitetura de microsserviços acaba sendo uma melhor opção, já que as atualizações e melhorias não são capazes de interferir em funcionalidades já existentes.
Complexidade
Como dito anteriormente, conforme as atualizações vão acontecendo, a arquitetura monolítica vai ficando cada vez maior e isso traz complexidade ao código-fonte. Já nos microsserviços mantém-se a complexidade de código-fonte inalterada, porém a medida que novos microsserviços são adicionados ao sistema a complexidade de gestão destes aumentará.
Conte com a A.R. Phoenix para desenvolver seus softwares e plataformas multicloud para microsserviços. Tire suas dúvidas sobre esse tipo de arquitetura com nosso time de especialistas.