DATE Aug 07 2023 | READ 4 MIN

Monolito vs Microsserviços - Quando usar cada um

DOCUMENT
Cover image for Monolito vs Microsserviços - Quando usar cada um FEATURED ATTACHMENT

Quando falamos sobre desenvolvimento de software, muitas dúvidas e discussões surgem — como qual linguagem de programação é melhor, qual banco de dados usar, ou até como fazer o deploy da aplicação. Isso é normal.

O problema real é quando as pessoas tomam partido e só veem uma perspectiva.

Isso acontece muito!

Eu estava no Twitter e vi uma grande thread de discussão sobre Qual é melhor: monolito ou microsserviços?

Então, este artigo é para compartilhar minha opinião sobre o tema.

O Início

Antes desse tipo de discussão existir, já havia uma forma de construir aplicações, e essa forma se chama Monolito.

O Monolito foi concebido primeiro porque, na maioria das vezes, é uma arquitetura mais simples (embora nem sempre seja o caso). Vamos entender o que exatamente é um projeto monolito:

Entendendo um monolito

Arquitetura Monolito E-commerce

🖥️ Frontend
⚙️ Backend (API)
🗄️ Banco de Dados

Este é um exemplo de uma aplicação de e-commerce. Para explicar melhor o que está acontecendo, temos este e-commerce dividido em três partes:

  • Frontend: o que o usuário final vê e interage
  • Backend: onde toda a lógica da aplicação vive
  • Banco de Dados: onde todos os dados e informações do nosso e-commerce são armazenados

Então, este é um sistema único com todos os módulos e funcionalidades dentro dele. Um projeto, uma base de código, um banco de dados, uma linguagem de programação!

Pontos Positivos

Essa singularidade nos traz muitas vantagens:

BEFORE

Sem Monolito

Desenvolvimento disperso sem estrutura unificada

  • Múltiplas bases de código para gerenciar
  • Padrões diferentes em cada serviço
  • Orquestração de deploy complexa
  • Fragmentação de tecnologia
AFTER

Com Monolito

Desenvolvimento unificado com estrutura consistente

  • Um repositório, uma base de código
  • Padrões e lógica consistentes
  • Um pipeline de deploy
  • Ciclo de desenvolvimento rápido

Monolito tem muitos pontos positivos.


Imagine que nosso e-commerce tem todas essas funcionalidades:

Funcionalidades do E-commerce (Tudo em Um)

🔐 Auth
📦 Produtos
🛒 Carrinho
💳 Pagamentos
🔔 Notificações
🚚 Envio

É uma ótima aplicação, certo? Temos muitas funcionalidades acopladas juntas, e isso nos leva ao primeiro problema dos monolitos…

Pontos Negativos

Como eu disse, todas as funcionalidades são altamente acopladas, o que significa que se uma funcionalidade quebrar, todas as outras quebram também.

Quando Notificações Quebram...

1
💥
Serviço de Notificação Crasha

Uma exceção não tratada ocorre no módulo de notificações.

2
⚠️
Backend Cai

Como tudo está no mesmo processo, todo o backend crasha.

3
🚫
Todos os Serviços Indisponíveis

Auth, Produtos, Carrinho, Pagamentos, Envio — tudo para de funcionar.

4
😱
Usuários Não Conseguem Acessar Nada

Queda completa do serviço. Usuários veem páginas de erro em todo lugar.

No nosso exemplo, a funcionalidade de notificação teve um problema, e por causa disso, toda a aplicação está fora do ar.

Infelizmente, este não é o único problema com aplicações monolíticas…

BEFORE

Desafios do Monolito

Problemas que surgem conforme a aplicação cresce

  • Escalar requer duplicar toda a aplicação
  • Base de código cresce exponencialmente
  • Ponto único de falha
  • Deploy = tudo ou nada
AFTER

O Que Você Precisa

Características ideais para sistemas de grande escala

  • Escalar apenas o que precisa
  • Bases de código menores e gerenciáveis
  • Falhas isoladas
  • Deploys independentes

O Presente

Olhando para esses problemas, arquitetos de software queriam encontrar uma forma melhor de construir software, então eles criaram uma solução.

O termo “microsserviços” foi cunhado em maio de 2011 durante uma conferência de arquitetos de software para representar um estilo de arquitetura de sistemas. A proposta da arquitetura orientada a microsserviços é desenvolver sistemas que são mais flexíveis, escaláveis e mais simples de manter do que arquiteturas monolíticas.

Mas a primeira pergunta é: como exatamente funciona?

Entendendo microsserviços

Em uma arquitetura de microsserviços, módulos e funções são separados. É como se cada serviço fosse uma aplicação independente. Veja o exemplo abaixo:

Arquitetura de Microsserviços

🔐
Serviço Auth
Node.js + Redis
Banco Próprio
📦
Produtos
Go + PostgreSQL
Banco Próprio
🛒
Carrinho
Python + MongoDB
Banco Próprio
💳
Pagamentos
Java + MySQL
Banco Próprio
🔔
Notificações
Rust + Kafka
Fila Própria
🚚
Envio
C# + SQL Server
Banco Próprio

🐳 Cada um roda em seu próprio container

🔀 Comunicam via APIs/Eventos

📈 Escalam independentemente

Note como cada serviço é completamente independente:

  • Tecnologias diferentes: Cada time escolhe o que funciona melhor (Node, Go, Python, Java, Rust, C#)
  • Banco próprio: Sem estado compartilhado entre serviços
  • Deploy isolado: Deploy de um sem tocar nos outros

Observações

Microsserviços são ocasionalmente confundidos com Pattern-Oriented Software Architecture (POSA); entretanto, é essencial reconhecer que são conceitos distintos.

A empresa RedHat diz isso sobre o assunto:

A principal característica que os diferencia é o escopo: SOA é uma abordagem arquitetural adotada pela empresa como um todo, enquanto microsserviços são uma estratégia de implementação do time de desenvolvimento para cada aplicação.

Com isso em mente, vamos continuar.

Pontos Positivos

Uma grande vantagem da arquitetura de microsserviços é que se um microsserviço parar, a aplicação inteira não quebra!

Quando Notificações Quebram em Microsserviços...

1
💥
Serviço de Notificação Crasha

O microsserviço de notificações encontra um erro.

2
Outros Serviços Continuam Rodando

Auth, Produtos, Carrinho, Pagamentos — todos continuam funcionando normalmente.

3
🛡️
Degradação Graciosa

Usuários ainda podem comprar, pagar e usar o app. Apenas notificações estão atrasadas.

4
🔄
Recuperação Fácil

Time de Ops reinicia apenas o serviço de notificação. Sem redeploy completo.

Aqui podemos ver que se um dos microsserviços quebrar, os outros continuam funcionando. Isso é ótimo porque nos traz mais consistência e confiabilidade.

Microsserviços trazem muitos benefícios:

BEFORE

Limitações do Monolito

A que você está limitado com arquitetura monolítica

  • Uma base de código massiva para tudo
  • Código complexo difícil de entender
  • Deploy de tudo de uma vez
  • Preso a uma linguagem de programação
AFTER

Benefícios dos Microsserviços

O que a arquitetura de microsserviços possibilita

  • Bases de código menores e focadas
  • Cada serviço é fácil de entender
  • Deploy de serviços independentemente
  • Usar a melhor linguagem para cada serviço

Como você pode ver, microsserviços têm muitas vantagens e são usados até certo ponto por quase todas as grandes empresas de tecnologia hoje em dia, já que fornecem muitas capacidades para organizações escalarem seus sistemas adequadamente.

Pontos Negativos

Infelizmente, microsserviços não são perfeitos. Essa arquitetura de software tem problemas, então vamos falar sobre alguns deles.

Complexidade dos Microsserviços

1
🌐
Desafios de Sistema Distribuído

Chamadas de rede podem falhar. Latência se torna uma preocupação. Debug entre serviços é difícil.

2
🔧
Overhead de Deploy

Cada serviço precisa de seu próprio pipeline CI/CD, monitoramento e infraestrutura.

3
🔄
Consistência de Dados

Manter dados sincronizados entre serviços requer design cuidadoso (sagas, event sourcing).

4
💰
Custos Aumentados

Mais serviços = mais servidores, mais monitoramento, mais complexidade operacional.

Microsserviços geralmente são complexos. Eles precisam ser muito bem planejados e executados porque, se não, o software pode se tornar inseguro, vulnerável e difícil de entender como um todo.

A verdade é que microsserviços são excelentes mas também podem ser um tiro no pé.

O Futuro?

Então, para finalmente responder a pergunta esperada… Qual é melhor?

Na minha opinião, depende da situação :)

BEFORE

Use Monolito Quando

Cenários onde monolito faz mais sentido

  • Time pequeno (< 10 desenvolvedores)
  • Lógica de negócio simples
  • MVP ou startup em estágio inicial
  • Orçamento limitado para infraestrutura
AFTER

Use Microsserviços Quando

Cenários onde microsserviços brilham

  • Time grande com múltiplos squads
  • Regras de negócio complexas e em evolução
  • Requisitos de alta escala
  • Necessidade de deploys independentes

Nós, como desenvolvedores, precisamos ser inteligentes ao escolher uma arquitetura sobre outra. Por exemplo, não é inteligente usar arquitetura de microsserviços para um site de uma pequena loja local porque o desenvolvimento será mais lento, o site provavelmente não terá regras de negócio complexas, e será mais caro.

Conclusão

É importante sempre ter a mente aberta. Microsserviços se tornaram mainstream no desenvolvimento de software, mas isso não significa que devemos usar apenas eles. Existem outros tipos de arquitetura de software como Component-Based Architecture, Service-Oriented Architecture (SOA), Layered Architecture, e outros.

Eu acho que um bom desenvolvedor deve entender quando usar um ou outro.


Entre em contato e me diga o que você acha deste artigo!

Espero que tenha gostado.

END OF DOCUMENT