Recentemente li um texto que virou assunto em blogs técnicos no exterior, "Microservices Killed Our Startup. Monoliths Would’ve Saved Us", e achei o conteúdo tão dolorosamente verdadeiro e fácil de se identificar que resolvi compartilhar um resumo.
Parece um ótimo "caderno de erros" mostrando o quão perigosa pode ser a adoção incondicional da tecnologia mais recente.
1. O começo do incidente: "Vamos fazer como a Netflix"
- Situação: captação seed de $2.5M, crescimento de 40% na receita mensal, 50 mil usuários. Uma startup que estava funcionando muito bem com um monólito em Rails.
- Início do problema: surge o arquiteto líder propondo a migração para MSA em nome da "escalabilidade (Scalability)".
- Lógica: "A estrutura atual está acoplada demais. Olha a Netflix e a Uber. Se quisermos chegar lá, precisamos ir para microservices."
- Realidade: decidiu-se adotar uma arquitetura no estilo Netflix em um time com 4 desenvolvedores e 1 pessoa de DevOps.
2. Seis meses de inferno (linha do tempo da adoção de MSA)
[Mês 1: lua de mel]
- Separação bem-sucedida do serviço de notificações. "Viu? Está funcionando!", comemoraram.
- Mas já começaram os sinais de alerta, como aumento do tempo de deploy e mais repositórios para manter.
[Meses 2~3: o começo das rachaduras]
- Separação do serviço de billing. O problema é que ele estava amarrado a usuários, estoque e pedidos.
- Resultado: por causa da latência de rede, o tempo de resposta caiu de 200ms → 800ms. Quando um serviço morria, surgia um efeito cascata e tudo parava.
[Meses 4~5: o pesadelo das transações distribuídas]
- O que no monólito seria resolvido com uma única transação de banco acabou exigindo até a adoção do padrão Saga em um ambiente distribuído.
- O estoque era baixado, mas o pagamento falhava, o rollback se embolava... e a inconsistência de dados fez o suporte explodir.
- Para adicionar uma única coluna simples, era preciso mexer em 6 serviços, então algo que levaria 2 horas passou a levar 3 dias.
[Mês 6: colapso do time]
- Os desenvolvedores passaram a gastar todo o tempo com infraestrutura em vez de criar funcionalidades.
- Custo de infraestrutura: $3,000 → $12,000 (aumento de 4x).
- Saída de um desenvolvedor-chave ("Eu vim para construir produto, não para passar o dia inteiro mexendo em Kubernetes")
3. A decisão: "Nós não somos a Netflix"
O arquiteto ainda insistia em "adotar Service Mesh e aumentar as ferramentas de monitoramento", mas o autor explode.
> "Nós não somos a Netflix! A Netflix tem 500 engenheiros, nós somos 4!"
No fim, o arquiteto saiu da empresa, e o time decidiu fazer rollback para o monólito.
4. De volta ao monólito, e a recuperação
- Ao longo de 8 semanas, o código foi reunificado em um monólito novamente.
- Resultado:
- recuperação da velocidade de entrega de funcionalidades (4 por mês → 20 por mês)
- tempo de resposta estabilizado em 220ms
- redução dos custos de infraestrutura
- e, acima de tudo, mais felicidade para os desenvolvedores
5. Lições principais (a conclusão do texto)
- MSA é uma ferramenta para resolver um problema 'organizacional', não um problema 'técnico'.
- Ela deve ser usada quando há mais de 50 desenvolvedores pisando uns nos outros, ou quando os ciclos de deploy são muito diferentes entre si.
- Netflix/Google não são seus modelos a serem copiados.
- Eles também começaram com monólitos. Mudaram quando cresceram; não começaram assim desde o início.
- Complexidade é imposto.
- Cada novo serviço faz o custo de gerenciamento crescer de forma composta.
- Chamadas de rede não são grátis.
- Uma chamada de função em memória (nanosegundos) e uma chamada de rede (milissegundos) estão em ordens de grandeza completamente diferentes.
Resumo em uma frase:
"O monólito não é o inimigo. A má arquitetura é que é. Um time de 4 pessoas, por favor, simplesmente use um monólito."
14 comentários
Pronto. Agora os fanáticos por MSA já vão aparecer.
Dizer que chamadas de rede não são gratuitas está certíssimo. Chamar uma função e fazer uma chamada de API são claramente coisas diferentes.
Eu vim para criar produtos, não para passar o dia inteiro mexendo em Kubernetes —> essa é a coisa mais idiota que já ouvi
Por quê? Acho que isso faz sentido numa situação em que estão usando k8s tendo k8s como objetivo em si.
Como gosto dos comentários do bungker, vou clicando em cada um deles, mas nesse aqui especificamente não consegui concordar, hum. Você poderia explicar melhor?
Postagem sobre IA sem conteúdo nenhum; é por isso que hoje em dia quase não leio o Medium.
Se é um serviço feito por 4 pessoas, realmente parece que não haveria motivo para dividir em MSA.
Para fazer MSA, a organização também precisa se alinhar ao MSA...
Acho que o ponto que o item 4 quer transmitir deve estar no resumo abaixo. E, no geral, concordo bastante com o conteúdo em si.
Hum... acho que tem algo estranho aqui.
Parece que este texto foi escrito por IA.
Eu também tenho sentido muito isso ultimamente..
Acho que muitos textos de blogs não estão sendo escritos com base na própria experiência da pessoa + ajuda de IA.
Os textos são lógicos demais e escritos de um jeito muito fácil de ler.
O que eu queria dizer é que este texto parece muito gerado por IA e não tem referências, então acho melhor não compartilharem esse tipo de conteúdo.
É um texto publicado no Hacker News. A maioria dos textos que eu posto é de conteúdo publicado no Hacker News.
https://news.ycombinator.com/item?id=46469845
Como você mencionou... acho que realmente preciso incluir a referência ao Hacker News.
1) Dúvidas sobre a credibilidade do texto: tem cheiro de marketing/conteúdo gerado por IA
Resumo
Citação contundente (tradução)
Resumo em uma linha
2) Críticas à liderança/arquitetura: o problema não era técnico, era a ‘estrutura de decisão’
Resumo
Citação afiada (tradução)
Resumo em uma linha
3) Perspectiva de negócio: a startup realmente quase morreu por causa de MSA?
Resumo
Citação contundente (tradução)
Resumo em uma linha
4) Insight técnico: conselhos práticos baseados em experiência sobre monólito vs MSA (a parte realmente útil)
Resumo
Citação afiada (tradução)
Resumo em uma linha
“Comece com um monólito e só separe serviços quando os limites surgirem de forma ‘natural’.”
Avaliação geral da comunidade em uma frase
A maioria concordou com “nós não somos a Netflix”, mas ao mesmo tempo houve forte suspeita de que o próprio texto possa ser uma narrativa vendendo a doença de querer ser a Netflix (= marketing/IA).