DEV Community

Cover image for Desacoplando o Front-end: Uma Introdução a Microsserviços
Gabriel Moraes
Gabriel Moraes

Posted on

Desacoplando o Front-end: Uma Introdução a Microsserviços

Entrando no Clima

Neste post, vamos explorar as principais diferenças entre Monólitos e Microsserviços: por que eles existem, o que solucionam e qual seu papel na evolução da arquitetura de software. O objetivo é entender o por que essas tecnologias surgiram, seus benefícios, problemas e como podemos lidar com a decisão de qual escolher.

Bora lá?


O que é uma arquitetura Monolítica?

É um modelo tradicional de software, construído com base em uma única unidade, autocontida e independente de outras aplicações. Normalmente, usamos esse termo para nos referirmos a uma estrutura enorme de gelo — o que não se difere muito de uma aplicação com essa arquitetura. Isso porque essa base de código reúne todas as preocupações e responsabilidades de um negócio.

Caso uma alteração seja necessária, é preciso atualizar todo o bloco de código, acessando a base principal e gerando uma nova versão do serviço. Isso torna as atualizações mais demoradas e tecnicamente custosas.

Por outro lado, essa estrutura facilita bastante o início de um projeto e o gerenciamento do código, pois todas as regras e implantações estão centralizadas. Isso permite que a aplicação/monolito seja publicada e disponibilizada de uma só vez.

Vamos ver a imagem para entender melhor:
Representação da arquitetura Monolítica

Na imagem podemos ver que todas as partes da aplicação estão fortemente *acopladas * umas as outras, a parte da interface de usuários, regras de negócio e acesso a banco de dados.

Vantagens

  • Mais simples de desenvolver no início.
  • Menor complexidade de infraestrutura.
  • Implantação unificada em um único servidor ou ambiente.
  • Comunicação interna mais rápida (sem necessidade de rede entre serviços).
  • Mais fácil de testar e depurar localmente.
  • Ideal para projetos pequenos ou MVPs (mínimos produtos viáveis).

Desvantagens:

  • Dificuldade para escalar partes específicas da aplicação.
  • Alta dependência entre módulos — falhas em um ponto afetam todo o sistema.
  • Deploys lentos e arriscados, pois envolvem toda a aplicação.
  • Dificulta o trabalho paralelo entre times.
  • Adoção de novas tecnologias exige reestruturação de todo o sistema.
  • Manutenção mais difícil à medida que o projeto cresce (código grande e acoplado).

Exemplo prático:

Vamos imaginar que estamos trabalhando em um grande marketplace, onde ele possui diversas seções e informações, em uma arquitetura monolítica, todas as funcionalidades da plataforma estão reunidas em um único código-fonte, compiladas e publicadas como uma aplicação única.

Essa aplicação inclui:

  • Interface do usuário (UI): Onde compradores e vendedores acessam o site, visualizam produtos, adicionam ao carrinho, etc.
  • Lógica de negócio: Onde estão as regras de compra e venda, validações de estoque, cálculo de frete, aplicação de cupons, etc.
  • Acesso a dados: Toda a lógica para acessar produtos no banco, cadastrar novos vendedores, consultar pedidos, etc.

Desafios:

  • Se a equipe quiser mudar apenas o sistema de cupons, ela precisa compilar e publicar toda a aplicação novamente, mesmo que outras partes (como o sistema de mensagens entre comprador e vendedor) não tenham sido alteradas.
  • Caso um bug no sistema de frete trave o deploy, nenhuma outra atualização pode ser lançada até que esse bug seja resolvido, já que tudo faz parte do mesmo "bloco".
  • Equipes de front-end, back-end e banco de dados trabalham todas no mesmo repositório, o que pode gerar conflitos de merge e gargalos.

E quando isso se tornou um problema?

Em 2009, a Netflix enfrentava sérios problemas de escalabilidade e disponibilidade. Seu sistema monolítico, hospedado em data centers próprios, não conseguia mais acompanhar o crescimento acelerado do serviço de streaming. Após uma falha crítica em 2008 que deixou a plataforma fora do ar por dias, a empresa iniciou uma transformação radical: migrou sua infraestrutura para a nuvem (AWS) e passou a reconstruir sua aplicação em torno de pequenos serviços independentes — mesmo antes do termo microservices ser amplamente conhecido.

Representação da diferença entre Monólito e Microsserviços

A mudança deu tão certo que a Netflix se tornou referência global, recebendo o JAX Special Jury Award em 2015 por sua inovação arquitetural e cultura de engenharia. Hoje, a empresa opera com mais de mil microserviços, e seus engenheiros realizam milhares de deploys por dia com autonomia e resiliência. Essa história inspirou a adoção de micro front-ends, aplicando os mesmos princípios de modularidade e independência também no lado do cliente.

O que são Microsserviços?

A arquitetura de microsserviços, também conhecida simplesmente como microsserviços, é um método que se baseia em diversos serviços independentes e implantáveis. Cada serviço tem sua própria lógica, solução, tecnologia e diversas outras características que podem se diferir totalmente de outro. A ideia dessa arquitetura não é reduzir a complexidade, mas sim tornar as complexidades de uma aplicação mais visíveis e gerenciáveis, separando as responsabilidades e reduzindo a dependência acoplada.

Então, vamos imaginar que precisamos alterar uma parte do nosso marketplace, mais especificamente a seção de "Carrinho de Compras". Em vez de mudarmos esse código e submetermos toda a aplicação a um novo deploy, com a arquitetura de microsserviços nós acessamos o serviço de carrinho, realizamos as alterações e implantamos somente essa modificação, sem afetar qualquer outro serviço.

A arquitetura de microsserviços está diretamente ligada ao DevOps, pois, juntos, possibilitam as famosas entregas contínuas, permitindo que as equipes atendam às necessidades dos usuários de forma mais rápida e assertiva.

Microsserviços com DevOps


Vantagens

  • Escalabilidade independente de cada serviço.
  • Times podem trabalhar de forma autônoma em serviços distintos.
  • Deploys individuais, sem afetar toda a aplicação.
  • Facilidade de manutenção e teste por serviços menores e isolados.
  • Possibilidade de usar diferentes tecnologias por serviço.
  • Resiliência maior: falhas isoladas não derrubam o sistema inteiro.
  • Integração facilitada com práticas de DevOps e entrega contínua.

Desvantagens

  • Aumento da complexidade arquitetural e técnica no início.
  • Comunicação entre serviços pode gerar latência e falhas.
  • Dificuldade em manter consistência de dados entre serviços.
  • Necessidade de um sistema de monitoramento e logs distribuídos.
  • Infraestrutura mais robusta (orquestração, CI/CD, autenticação, etc.).
  • Sobrecarga para equipes pequenas ou com menos maturidade técnica.

Exemplo prático:

Vamos imaginar que estamos trabalhando no mesmo grande marketplace, mas agora utilizando uma arquitetura baseada em microsserviços. Nesse modelo, as funcionalidades da plataforma são separadas em múltiplos serviços independentes, cada um responsável por uma parte específica do sistema.

Cada serviço pode ter seu próprio repositório, linguagem, banco de dados e ciclo de vida de desenvolvimento.

Essa aplicação inclui:

  • Serviço de Produtos: Responsável pelo cadastro, consulta e listagem de produtos.
  • Serviço de Carrinho: Cuida das ações de adicionar/remover itens, calcular valores parciais, etc.
  • Serviço de Pedidos: Gera os pedidos a partir do carrinho e faz o vínculo com pagamento e entrega.
  • Serviço de Cupons: Aplica regras e validações de descontos.

Desafios:

  • A comunicação entre serviços exige o uso de APIs ou mensageria, o que pode gerar latência e pontos de falha.
  • O rastreamento de erros se torna mais complexo, exigindo observabilidade distribuída (logs, tracing, métricas).
  • Gerenciar autenticação, autorização e segurança entre serviços pode ser desafiador.
  • O estado distribuído dificulta transações complexas (ex: atualizar estoque + gerar pedido + aplicar cupom de forma atômica).
  • O overhead inicial para configurar infraestrutura, pipelines de CI/CD e monitoramento é maior, exigindo mais maturidade técnica.

Conclusão

A conclusão fundamental é que arquiteturas de software existem para resolver problemas. Cada empresa, projeto e tecnologia possui um contexto único, com seus próprios desafios e regras. Portanto, a melhor arquitetura será sempre aquela que soluciona essas questões de maneira mais eficaz.

Não se baseie cegamente em soluções de big techs. O grande aporte financeiro delas contribui demais para que novas implementações ocorram com segurança, pois elas podem conduzir longos estudos e levantamentos para entender se uma abordagem faz sentido única e exclusivamente para o seu cenário.

Como bem alerta Martin Fowler, uma das maiores autoridades em arquitetura de software:

"A primeira regra sobre microsserviços é: não construa microsserviços."

A frase de Fowler não é um ataque à arquitetura, mas um forte lembrete para não adotá-la como ponto de partida. É preciso resistir à tendência de usar microsserviços apenas porque gigantes como a Netflix os utilizam. Se uma arquitetura monolítica já atende plenamente às suas necessidades, por que introduzir a complexidade de um sistema distribuído?

A decisão final exige uma reflexão estratégica e profunda sobre as limitações e os pontos fracos da sua aplicação. O objetivo é fazer uma escolha assertiva, garantindo que o modelo arquitetônico não apenas resolva os problemas de hoje, mas também sustente as demandas futuras da sua solução.

Top comments (1)

Collapse
 
askmary profile image
Mariana Melo

Muito legal! Hoje em dia algumas empresas adotam essa arquitetura sem pensar se faz sentido para o nicho do negócio e complexidade, por vezes, gerando estresses e gargalos operacionais desnecessários durante a implantação. Arquitetura é, sobretudo, estratégia de negócio!