Por que a obsessão por microserviços pode estar atrasando o seu projeto — e como dominar a escalabilidade do jeito Rails.
O Rails nasceu pra simplificar — e é justamente isso que acelera as entregas. A adoção de microserviços sem uma razão prática virou um reflexo da vaidade técnica: tentamos resolver problemas que ainda não existem, adicionando complexidade onde antes havia clareza — e uma conta da AWS bem menor.
Em muitos casos, um monólito bem estruturado continua sendo a decisão mais inteligente.
A febre dos microserviços
Nos últimos anos, microserviços se tornaram quase um símbolo de status técnico. Projetos ainda imaturos são fragmentados em dezenas de serviços — não porque precisam, mas porque soa sofisticado e valoriza a habilidade técnica da equipe.
É como aquelas construções de revista: cheias de soluções ousadas, ângulos incomuns e materiais caros. Bonitas de mostrar, mas pouco práticas de viver.
A mesma lógica se aplica aqui: muitos sistemas são construídos para impressionar outros engenheiros — e o mercado — em vez de facilitar o trabalho de quem vai mantê-los.
No fim, o resultado é previsível: equipes pequenas gastam meses orquestrando uma infraestrutura que ninguém pediu, enquanto o produto — aquele que deveria evoluir rápido — fica parado à espera da próxima “decisão arquitetural”.
O Rails, por outro lado, prioriza a entrega, sem comprometer o que vem depois.
E é justamente por isso que ele continua relevante: porque funciona — e entrega o valor que o cliente realmente precisa.
O que realmente trava um projeto Rails
O que faz um sistema parar de evoluir raramente é o framework. Na maioria das vezes, o problema está no próprio código — ou na falta de cuidado com ele.
São consultas N+1, cálculos pesados feitos em Ruby que deveriam estar no banco, e tarefas demoradas bloqueando o mesmo processo que responde às requisições. Nada disso tem a ver com arquitetura. Tem a ver com a disciplina do time de engenharia.
A verdade é que a maior parte dos projetos que sofrem com “problemas de escala” ainda não explorou nem 60% do que o Rails oferece: ferramentas como caching, background jobs, Active Record otimizado, fragmentos reutilizáveis e réplicas de leitura já resolvem 90% dos gargalos antes mesmo de pensar em quebrar o sistema em partes.
# Evite N+1 queries
@orders = current_user.orders.includes(items: :product).page(params[:page]).per(25)
# Use processamento em background
GenerateReportJob.perform_later(user.id)Quando os gargalos realmente aparecem, o Rails já oferece um arsenal maduro para lidar com eles:
Horizontal Scaling: adicionar novas instâncias é trivial com o Kamal ou a AWS.
Database Scaling: réplicas de leitura podem ser configuradas via
connects_to, sem alterar a aplicação.Caching em camadas: view caching, fragment caching e HTTP caching reduzem drasticamente a carga.
Background Jobs: ActiveJob permite dividir a carga de trabalho de forma previsível.
# Exemplo de réplica de leitura
class ApplicationRecord < ActiveRecord::Base
connects_to database: { writing: :primary, reading: :replica }
endVocê não precisa reinventar a roda — apenas usar bem o que já existe. Todo código mal escrito continua sendo um gargalo, não importa quantos serviços você crie ou a tecnologia que você utilize.
Fragmentar a solução não elimina o problema — só o espalha em diversos pontos da produção.
O poder do monólito modular
Meu foco aqui não é criar mais um debate entre monólitos e microserviços. A internet já tem discussões o bastante travadas em dois extremos — e, como em qualquer polarização, quase ninguém ouve de verdade o outro lado.
O ponto é mais simples: nem tudo precisa ser dividido pra funcionar bem.
Muitos projetos ganhariam muito mais clareza se organizassem melhor o que já existe, em vez de tentar reconstruir tudo sob um novo rótulo.
Separar responsabilidades é importante, mas separar o sistema inteiro raramente é o caminho. O problema não está em ter partes demais, e sim em não saber onde cada parte começa e termina.
Na prática, é como ter uma equipe que fala a mesma língua, mas trabalha em salas diferentes. O desafio não é o tamanho do time — é comunicação e planejamento. Com código, é a mesma coisa: um projeto maduro é aquele em que as partes operam em sinergia, sem sobrecarregar o restante do sistema.
O Rails sempre valorizou a clareza do código. E isso não exige levantar muros entre domínios — mas construir conexões com propósito.
Quando a base crescer muito, ferramentas como Rails Engines permitem modularizar o sistema sem perder a coesão.
É o melhor dos dois mundos: domínios bem definidos, um único deploy e uma arquitetura que continua simples de entender.
A verdadeira escala não vem de dividir o sistema, mas de entender o que o mantém coeso.
Resultados práticos: quando o monólito vence
Empresas que construíram suas plataformas com Rails há mais de uma década continuam provando que o majestoso monólito é um modelo resiliente. GitHub, Shopify e Basecamp são exemplos clássicos — todos começaram com Rails e ainda mantêm a essência dessa arquitetura.
Shopify: serve mais de um milhão de lojistas e processa bilhões de dólares em transações.
Durante eventos como a Black Friday, o monólito Rails escala horizontalmente sem reescritas estruturais.GitHub: hospeda milhões de repositórios e usuários em uma base Rails, investindo em otimização contínua em vez de fragmentação.
Basecamp: mantém o mesmo código há mais de dez anos, priorizando simplicidade e estabilidade sobre modismos arquiteturais.
Esses casos mostram que o limite do monólito é muito mais operacional do que arquitetural. Bons índices, caching estratégico e background jobs costumam resolver gargalos muito antes de qualquer necessidade de dividir a aplicação.
E quando a arquitetura realmente precisa evoluir, o Rails oferece meios seguros de fazer isso: Engines, sharding, réplicas e filas são soluções maduras, não improvisos.
Escalabilidade na prática (sem drama)
Escalar um projeto Rails não exige reescrever tudo, nem adotar uma nova arquitetura a cada gargalo. Na maioria das vezes, basta usar bem o que o framework já oferece.
Antes de pensar em microserviços, containers ou filas distribuídas, o primeiro passo é entender o que realmente está limitando o sistema. É comum ver times tentando resolver lentidão de código com infraestrutura — e pagando caro por isso.
O caminho acertado é o oposto: otimize antes de expandir. Use ferramentas de análise no desenvolvimento (como o bullet ou rack-mini-profiler) e telemetria (como o New Relic ou Sentry) pra identificar gargalos reais.
Sempre cacheie resultados previsíveis e que exigem muito de seu servidor. Envie tarefas demoradas para o background com ActiveJob. E só depois disso, se ainda for necessário, pense em escalar horizontalmente.
# Exemplo simples: mover o pesado para background
def create
@order = Order.create!(order_params)
OrderConfirmationJob.perform_later(@order.id)
render json: @order, status: :created
endQuando o volume de dados cresce, o Rails também está pronto:
Sharding: possível com
connects_to shards:para dividir bases por região ou cliente.Read replicas: aliviam a carga de leitura com mínima configuração.
CDN + HTTP caching: entregam performance global sem tocar no código.
Escalar não é multiplicar servidores. É eliminar desperdício.
Simplicidade é a forma mais avançada de engenharia
Antes de quebrar seu app Rails em pedaços, pare um momento. Pergunte a si mesmo: você realmente chegou ao limite do seu monólito — ou está apenas tentando resolver um problema que ainda não existe?
A maioria dos sistemas não sofre por falta de microserviços. Sofre por falta de foco da equipe.
Com excesso de código que faz mais do que deveria e decisões tomadas com pressa é comum que alguns times confundam complexidade com progresso.
O Rails nunca foi adepto a seguir modas.
Seu foco está fazer o essencial bem feito sem códigos demasiadamente complexos, com ferramentas que te permitem crescer seu projeto quando for a hora certa.
A verdade é que a maior parte das aplicações nunca vai atingir o volume que exige uma arquitetura distribuída.
Mas todas se beneficiam da clareza, previsibilidade e velocidade que um monólito bem construído oferece.
A simplicidade não é o caminho mais fácil.
É o mais inteligente.
Em um mercado que se encanta com frameworks novos e promessas de performance milagrosa, o Rails continua firme, entregando valor de forma silenciosa — e escalando onde realmente importa: no resultado.
Qual recurso do Rails já salvou o seu dia em produção?
Ainda não há comentários. Seja o primeiro a comentar!