Crie uma conta gratuita ou Faça login
Podcast
Tech Leadership Rocks
Episódio 186

Migrando de microsserviços para monolito com Luiz Costa

• 1 hora

Neste episódio o Luiz Costa, CTO da Beep Saúde, compartilha a jornada de arquitetura de sistemas desde a decisão de usar microsserviços até a volta para monolitos modulares. Durante a conversa são explorados pontos como os desafios que a arquitetura baseada em microsserviços trouxe e como a migração “inversa” aconteceu.

Reaja nos momentos marcantes
Curti
Boa ideia
Amei
Engraçado
Parabéns
Mind blown

A maior parte do custo de um software vem da mudança dele. Se o acoplamento for alto, o custo dessa mudança será muito alto, e isso vai fazer você andar devagar.

— Luiz Costa

Resumo deste episódio

Como foi a decisão da Beep Saúde de usar microsserviços

O crescimento rápido da Beep Saúde e a evolução de seus produtos levaram a equipe a enfrentar desafios técnicos. Inicialmente, a empresa utilizava um monolito baseado em Ruby on Rails para dar suporte ao seu MVP.

Com o tempo, à medida que o código crescia e se tornava cada vez mais acoplado, surgiram problemas frequentes de manutenção e escalabilidade. A solução, na época, parecia clara: dividir o monolito em microsserviços para organizar melhor as funcionalidades e reduzir os impactos de alterações no sistema.

Essa abordagem inicial foi baseada nas práticas em alta no mercado, mas logo vieram os primeiros desafios. Desde a falta de ferramentas maduras à época até problemas de infraestrutura e monitoramento, o custo operacional aumentou muito. Além disso, o foco da equipe foi desviado de problemas de negócio para questões de comunicação e integração entre serviços.

Porque abandonar os microsserviços

Apesar de ter criado alguns microsserviços, a equipe da Beep percebeu que a complexidade adicional não se justificava no contexto da empresa. O tempo gasto para gerenciar logs, tracing e autenticação entre serviços ultrapassava os benefícios esperados. Além disso, a baixa maturidade da infraestrutura e a escassez de recursos dedicados à operação tornaram inviável a manutenção desse modelo.

Outro ponto importante foi o impacto negativo na velocidade de entrega. Problemas como timeouts e inconsistências entre serviços distribuídos eram recorrentes, prejudicando a experiência do cliente e consumindo boa parte do tempo da equipe. Ficou claro que a arquitetura de microsserviços, naquele momento, não atendia às necessidades da empresa.

A transição para o monolito modular

A mudança para um monolito modular não foi imediata nem drástica. A equipe decidiu adotar uma abordagem evolutiva, mantendo os microsserviços existentes enquanto reorganizava o código interno do monolito. O objetivo principal era criar módulos bem definidos e desacoplados dentro de uma única aplicação, garantindo que as dependências fossem controladas.

Inspirados em princípios como o Domain-Driven Design (DDD) e a arquitetura de portas e adaptadores (hexagonal), eles separaram o código de negócio das dependências de framework, permitindo uma maior flexibilidade para ajustes futuros. Essa abordagem também facilitou o treinamento de novos desenvolvedores e reduziu significativamente o tempo de entrega de novas funcionalidades.

Os principais desafios na migração de microsserviços para monolitos modulares

Embora a transição tenha trazido diversos benefícios, desafios também surgiram. Um dos maiores foi adaptar a equipe à nova abordagem. Desenvolvedores acostumados com o padrão “Rails-Way” precisaram aprender a lidar com módulos mais isolados e indireções para acesso a frameworks e recursos externos.

Outro ponto crítico foi a consistência eventual em sistemas distribuídos. Mesmo com apenas dois sistemas principais, problemas como atrasos na propagação de eventos e inconsistências temporárias entre módulos exigiram um cuidado extra no design do sistema e na operação.

Benefícios da mudança de microsserviços para monolitos modulares

A escolha pelo monolito modular trouxe diversos ganhos para a Beep Saúde. Entre eles:

  1. Velocidade de entrega: a equipe voltou a focar em resolver problemas de negócio, sem gastar tempo excessivo com questões de infraestrutura.
  2. Manutenção facilitada: o código desacoplado e bem estruturado reduziu os impactos de alterações e facilitou a introdução de novos membros ao time.
  3. Custo operacional menor: ao consolidar a infraestrutura e diminuir a complexidade, a empresa economizou recursos e melhorou sua eficiência.
  4. Flexibilidade futura: com o código modular, a equipe pode extrair funcionalidades específicas para serviços separados, se houver necessidade, sem comprometer a estabilidade do sistema.

Dicas para quem pensa em se afastar de microsserviços

Para equipes que estão considerando migrar de microsserviços para um monolito modular, Luiz Costa compartilha algumas dicas valiosas:

  • Controle as dependências: invista tempo em organizar bem o código e isolar as responsabilidades.
  • Adote uma abordagem evolutiva: evite grandes refatorações que possam paralisar o desenvolvimento de novas funcionalidades.
  • Considere o contexto: avalie se a arquitetura atual realmente atende às necessidades do seu negócio antes de tomar qualquer decisão.
  • Mantenha o foco no negócio: priorize soluções que tragam valor imediato ao cliente e à empresa.

O case da Beep Saúde é uma prova de que nem sempre as tendências de mercado são a melhor escolha para todos os contextos. Ao apostar no monolito modular, a empresa conseguiu equilibrar simplicidade e eficiência, voltando a focar no que mais importa: entregar valor ao cliente.

Se você deseja aprender mais sobre este tema, então assista à Masterclass sobre Monolitos Modulares conduzida pelo Jhonathan Soares aqui na Escola Forja.

Para ler todo o resumo Crie uma conta grátis ou Faça login