Escolha uma Página

Arquitetura Monolítica e Microsserviços

Entenda as diferenças entre Arquitetura Monolítica e Microsserviços por meio de análises comparativas, vantagens e desvantagens

Por William Penna, Full Stack Developer da Zappts

Arquitetura monolítica e microsserviços

O tema que trago neste artigo é visto como uma decisão muito importante nos dias de hoje ao arquitetar o desenvolvimento de um sistema.

O que a empresa deve utilizar: Arquitetura Monolítica ou Microsserviços? E se a empresa já possui um sistema monolítico, ela deve fragmentá-lo para microsserviços? 

Nos próximos tópicos, vou compartilhar com você algumas informações que são fundamentais para ajudar a entender sobre o assunto. Acompanhe!

Arquitetura Monolítica e Microsserviços

O que é Arquitetura Monolítica?

Usando uma linguagem não técnica, imagine que o Sistema Solar fosse um único planeta, não tendo vários objetos como os planetas, as estrelas e afins que existem em todo o sistema hoje. Isso seria um monolito. 

Arquitetura Monolítica é um sistema único, não dividido, que roda em um único processo, uma aplicação de software em que diferentes componentes estão ligados a um único programa dentro de uma única plataforma.

Como exemplo, imagine a criação de uma aplicação para uma loja de calçados, onde há os setores de administração, contabilidade e vendas. 

Todos os usuários utilizarão o mesmo sistema, e será preciso que ele esteja dividido em algumas partes, são elas:

  • Autenticação e perfis de usuários (administração, contabilidade, estoque, vendedor);
  • Gráficos para a administração com os dados diários da loja;
  • Compra de produtos;
  • Estoque;
  • Vendas.

Com a visão de um software, agora é a hora de imaginar que todos os itens citados acima estejam em um único projeto, tudo interligado, onde ao subir uma aplicação para o servidor, tudo será disponibilizado junto. 

Se é feita uma alteração no serviço de compras de produtos, todas as outras partes do projeto também terão que subir para o servidor junto com essa alteração.

Vantagens da Arquitetura Monolítica

  • Mais simples de desenvolver: a organização fica concentrada em um único sistema;
  • Simples de testar: é possível testar a aplicação de ponta a ponta em um único lugar;
  • Simples de fazer o deploy para o servidor: a alteração é simplesmente feita e pronto;
  • Simples de escalar: como é só uma aplicação, se for preciso adicionar mais itens, é simplesmente ir adicionando o que for necessário.

Desvantagens da Arquitetura Monolítica

  • Manutenção: a aplicação se torna cada vez maior de acordo com o seu tamanho, 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;
  • Alterações: para cada alteração feita, é necessário realizar um novo deploy de toda a aplicação;
  • Linha de código: uma linha de código que subiu errada pode quebrar todo o sistema e ele ficar totalmente inoperante;
  • 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, existem duas possibilidades: ou todo o código é alterado ou a arquitetura do sistema precisará ser trocada.

O que são Microsserviços?

Microsserviços é o nome dado a uma arquitetura que estrutura a aplicação criando uma coleção de serviços. 

Quando se fala nesse tipo de arquitetura, basicamente nós pegamos um monolito que seria criado e o dividimos em vários serviços separados e independentes um do outro. 

A ideia é separar os serviços para que cada um acesse uma camada do banco de dados ou somente um acesse algum serviço externo.

Vou usar o exemplo citado anteriormente para deixar o entendimento sobre Microsserviços um pouco mais claro, considerando a criação de uma aplicação para uma loja de calçados. 

Neste caso, a diferença é que cada parte da aplicação será um microsserviço. 

No exemplo abaixo, serão cinco:

  • Autenticação e perfis de usuários (administração, contabilidade, estoque, vendedor);
  • Gráficos para a administração com os dados diários da loja;
  • Compra de produtos;
  • Estoque;
  • Vendas.

Agora, a ideia é imaginar que tudo é separado, um serviço será independente do outro. 

Quando um deploy para o servidor for feito para ser disponibilizado o serviço, serão necessários ser feitos 5 deploys separados e que não tem relação nenhuma um com o outro. 

A ideia é que a divisão desses serviços seja feita de acordo com a arquitetura que está sendo projetada para uma nova aplicação ou para a reestruturação de uma já existente.

Como exemplo de organização, imagine que existam as tabelas de banco de dados relacionadas como produto, cliente e cliente_produto. 

A proposta é que somente o microsserviço de vendas acesse essas tabelas ou o conjunto relacional em que elas se encaixam. 

Se outro serviço que se encontra separado precisa acessar um determinado dado que esteja em uma dessas tabelas (o que acontece com frequência, porque o sistema como um todo é um só), o ideal é que ele se comunique com o microsserviço de vendas para buscar um dado ou salvar um produto por exemplo, fazendo com que tudo fique separado, entre aspas “independente” porque eles se conversam.

Vantagens dos Microsserviços

  • Altamente testável e manutenível: tudo é feito de forma separada e mais rápida;
  • Independência e agilidade: os deploys de cada microsserviço são totalmente independentes e mais rápidos;
  • Objetividade: a organização é feita de acordo com a organização do produto e do negócio;
  • Flexibilidade: é possível dividir em equipes para trabalhar de forma separada e totalmente independente em cada serviço.

É possível também criar cada microsserviço em uma linguagem de programação diferente.

Desvantagens dos Microsserviços

  • Quando a arquitetura do sistema é feita, a divisão dos serviços tem que ser feita com muita atenção e cuidado: isso pode fazer com que se leve um pouco mais de tempo para chegar na divisão perfeita, de forma que no futuro a aplicação não sejam vários sistemas monolíticos separados e com funções que até se repetem;
  • Há replicação de código de resposta ou de infraestrutura, por exemplo: o que existe de padrão em um serviço provavelmente existirá nos outros serviços também;
  • Complexidade no gerenciamento da aplicação: é um ponto a se tomar muito cuidado para que a organização sempre exista mesmo que novas features sejam implementadas no futuro.

Arquitetura Monolítica ou Microsserviços?

As vantagens em fragmentar o monolito

Neste ponto, as perguntas a serem feitas são: como está ou será o sistema monolítico? Ele está crescendo ou irá crescer muito? A manutenção está ficando ou poderá ser cada vez mais complicada? O deploy está cada vez mais demorado ou poderá ficar? Cada deploy que é feito rola um “frio na barriga” para realizar o processo?

Se a resposta para mais de uma das perguntas acima for “sim”, a ideia de fragmentar o monolito começa a fazer sentido. 

Uma aplicação monolítica não é arcaica e também não está ultrapassada. Ainda existem e existirão aplicações que são e serão criadas com a arquitetura monolítica, porque é o que faz sentido. 

Mas, quando a análise é feita, onde o sistema está ou será grande e robusto, a manutenção pode ser uma preocupação para não quebrar o sistema. 

Se os deploys estão demorando ou irão demorar (pelo tamanho da aplicação é possível prever) um tempo acima da média para um monolito e a equipe que desenvolve e/ou faz a manutenção no sistema sofre a cada nova feature ou manutenção, a fragmentação para a arquitetura de microsserviços começa a fazer sentido.

Com a fragmentação, todos os problemas e preocupações serão seguramente amortecidos e, dependendo da maturidade da equipe, totalmente resolvidos. 

Porém, algumas perguntas devem ser feitas antes da decisão ser tomada:

  • A maturidade do time responsável pela aplicação tem o nível desejado?
  • O custo/benefício vai valer a pena?

Colocando esses pontos em interrogação e a resposta sendo afirmativa, a fragmentação faz total sentido.

Conclusão: Arquitetura Monolítica e Microsserviços

Embora a Arquitetura de Microsserviços seja muito bem falada e muito bem avaliada nos dias de hoje, não significa que tudo tem que ser feito dessa maneira. 

A Arquitetura Monolítica foi, é e sempre será muito bem usada. Tudo depende da aplicação e das suas características, do time envolvido no projeto, do tempo disponível para o desenvolvimento e até onde esse trabalho pode chegar. 

Por isso, foram mostradas acima as vantagens e desvantagens de cada uma das arquiteturas, para ajudar na decisão e na escolha mais assertiva quando se está projetando ou refatorando uma aplicação.

Bom, espero que você tenha gostado deste artigo e possa utilizar essas informações sempre que precisar decidir entre Arquitetura Monolítica e Microsserviços.

Eu vou ficando por aqui, mas em breve eu volto com outra publicação no blog da Zappts

Até lá!