Diferenças entre Monólito e Microsserviços
Tags: arquitetura, monolito, microsserviços, braziliandevs
Published: 2022-02-22 12:10:47

Esta semana iniciei em uma nova empresa e ouvi, de um desenvolvedor mais experiente da equipe, que o principal produto que vou trabalhar havia sido desenvolvido como um **Monólito** e agora estavam sendo iniciados os esforços a fim de migrá-lo para uma arquitetura de **Microsserviços**. Eu já havia escutado esses termos mas não entendia bem o que eles implicavam, então fui buscar entendê-los melhor... Agora com esse conhecimento adquirido, venho compartilhar as diferenças que vi entre esses dois tipos de arquitetura.

![Estou pronto!](https://media.giphy.com/media/CjmvTCZf2U3p09Cn0h/giphy.gif)

## O que é um Monólito?
A palavra monólito faz referência a um monumento formado por um único bloco de pedra e isso nos explica muita coisa!

![Monumento de Washington](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vvsqo95qaxn0vt9s4m19.jpg)

Um software que adota uma arquitetura Monolítica tem todo seu código e funcionamento concentrados em um só processo. Logo, todas as funções do negócio estão dividindo os mesmos recursos de uma mesma máquina.

### Vantagens
- Novos desenvolvedores vão ter uma maior facilidade de entender o projeto, pois todo o código se concentra em um único lugar.
- O desenvolvimento inicial é mais fácil e rápido. Além de, enquanto pequeno, possuir baixa complexidade.

### Desvantagens
- Acarreta a uma difícil manutenção no futuro, quando ao alterar parte de uma funcionalidade é criado um efeito cascata (que pode causar comportamentos inesperados) em outras funções que estão ligadas de alguma forma. Afinal, há uma alta dependência de componentes do código.
- Seu principal ponto negativo: escalabilidade. Ou melhor, a falta dela... Por todo o funcionamento estar integrado, não podemos escalar uma função individualmente, é necessário que todo o produto se expanda em conjunto.

## O que é um Microsserviço?
Um sistema que utiliza uma arquitetura de Microsserviços é composto por partes menores. Enquanto o Monólito é uma grande e única pedra, aqui temos diversas pedrinhas.

![Diversas pedras](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/81n624n8fnxosan5ek21.jpg)

Nesse tipo de software vamos ter um código dividido em vários projetos que se comunicam entre si formando o produto final. Assim, cada serviço é criado de acordo com um conjunto de regras de negócio específicas, sendo implementado de forma independente.

### Vantagens
- A manutenção se torna mais fácil por se trabalhar com partes menores de código e que não vão gerar problemas nos outros serviços do sistema.
- Cada parte do software pode ser desenvolvida com a tecnologia que melhor se encaixa nela, sem a necessidade de ter o projeto todo usando uma única linguagem, por exemplo.
- Fazer o deploy de um microsserviço é muito mais simples, facilitando a chegada de atualizações à produção.
- A escalabilidade está presente, de forma que se torna possível expandir apenas os microsserviços desejados conforme a necessidade daquele momento.

### Desvantagens
- Como temos um sistema distribuído, deve haver alguma forma de conectá-lo e trabalhar nisso traz uma dificuldade adicional ao projeto.
- O aprendizado é dificultado para desenvolvedores que entrarem no projeto ao longo de sua criação tendo que compreender o funcionamento de diversos serviços.

## Suas diferenças
Acredito que agora você já tenha entendido o conceito dessas arquiteturas e caso não, podemos resumir "Monólito vs Microsserviços" como "Centralizado vs Descentralizado". De um lado temos um grande bloco de código e, em outro, pequenos blocos interligados por conexões.

![Diagrama comparativo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2el6f9h5o4opin93mesu.jpg)

Ao olhar as vantagens e desvantagens de cada arquitetura entendemos que:
- Enquanto Monólito é fácil de um novo integrante do time aprender, o Microsserviços pode complicar o aprendizado, inclusive na maneira que foi escolhida fazer a ligação entre os serviços.
- Monólitos são eficientes para POCs (_Prove of Concept_) por terem baixa complexidade inicial. Porém, como não possuem boa escalabilidade, caso queira levar o projeto a frente faz sentido convertê-lo para microsserviços.
- Prestar manutenção em um Monólito é mais trabalhoso, enquanto nos microsserviços a independência do código leva vantagem.

## Conclusão
Se você está na dúvida entre qual arquitetura seu produto deve utilizar, acredito que uma boa alternativa é aproveitar o melhor dos dois mundos, iniciando o sistema com a utilização de uma arquitetura monolítica e tornando-a descentralizada quando a necessidade de escalabilidade chegar.
É isso que ocorreu com o produto da nova empresa em que estou trabalhando e após meus estudos somado à escrita desse artigo entendi o por quê dessa mudança estar sendo feita.

![Cena de encerramento!](https://media.giphy.com/media/A5OPIlNp8fHQbATsvC/giphy.gif)

---

_Este é o primeiro artigo que escrevo e o conhecimento compartilhado foi adquirido do meu próprio estudo então caso tenha algo a acrescentar ou corrigir, não hesite.
Espero que esse artigo contribua com a comunidade e até a próxima!_ 😉