A Falácia da Escalabilidade Horizontal em Microserviços

A Dor Real: O Mito do ‘É Só Subir Mais Réplicas’

Quem já operou um cluster de verdade sabe: **microserviços não escalam horizontalmente só porque o PowerPoint diz**. A maioria dos gargalos não está no código — está nos limites físicos dos sistemas distribuídos: latência, coordenação, concorrência, filas mal projetadas e bancos estrangulados.

O hype vendia independência total, mas o que chega na prática é **acoplamento distribuído**. A cada novo serviço, nasce uma nova dependência oculta. A cada instância extra, nasce um novo gargalo em outro ponto do ecossistema.

Resultado: times criando patches emergenciais, dívidas técnicas crescendo e squads jurando que “faltou subir mais pods”.

O Caminho Pragmático: Escale Fluxos, Não Containers

Escalabilidade real não vem de replicar serviços, mas de **controlar a topologia de comunicação**. E isso significa três armas simples e pragmáticas:

  • Assincronia bem pensada (fila + evento + idempotência).
  • Limite explícito de throughput por domínio.
  • Infra que não mente: observabilidade que mostra onde dói.

Microserviço que depende de request síncrono ponto a ponto jamais terá escalabilidade horizontal. No máximo, terá uma promessa motivacional.

Implementação de Sênior: Um Fluxo Assíncrono que Escala de Verdade

A seguir, um exemplo usando uma pipeline assíncrona baseada em eventos. Nada de gourmetização: só o essencial para escalar onde importa.

import { Kafka } from "kafkajs";

// Producer: serviço de checkout publica evento
const kafka = new Kafka({ clientId: "checkout", brokers: ["kafka:9092"] });
const producer = kafka.producer();

async function publishOrderEvent(order) {
  await producer.connect();
  await producer.send({
    topic: "order.created",
    messages: [{ value: JSON.stringify(order) }]
  });
}

// Consumer: serviço de pagamento processa no próprio ritmo
const consumer = kafka.consumer({ groupId: "payment" });

async function run() {
  await consumer.connect();
  await consumer.subscribe({ topic: "order.created" });

  await consumer.run({
    eachMessage: async ({ message }) => {
      const order = JSON.parse(message.value.toString());
      // processamento idempotente
      processPayment(order);
    }
  });
}

run().catch(console.error);

Esse fluxo:

  • remove gargalos síncronos
  • permite múltiplos consumidores escalarem sem se atropelar
  • não derruba o sistema quando um serviço fica lento

Ou seja: **escalabilidade horizontal real surge quando cada serviço controla o ritmo e desacopla o tempo**.

O Custo da Escolha: A Verdade Que Ninguém Conta

Arquiteturas assíncronas escalam, mas cobram seu preço:

  • Depuração mais complexa.
  • Garantia de ordem é responsabilidade da arquitetura (não do broker).
  • Idempotência deixa de ser luxo e vira obrigação.

Porém, fugir disso é escolher viver para sempre dopado por falsas promessas de replicação infinita.

Direto das Trincheiras

  • Se dois microserviços precisam conversar síncronamente para cada requisição, eles não são dois microserviços — são um monólito distribuído.
  • Antes de criar um novo serviço, pergunte: “ele escala diferente dos outros?” — se a resposta for não, você só criou complexidade.
  • Autoscaling não resolve gargalo de banco. Nunca. Escale a carga, não o desespero.

Fontes

Arquitetura de soluções e software distribuído, DevSecOps e …, Python não escala, Java é melhor e IA vai revolucionar tudo., Is Choosing JS for Backend Development a Good Choice? – Reddit, Comunicação Assíncrona em Microserviços: O que poucos te contam?, Microservices: o que são e para o que servem?, 30.000 deploys diários: desvendando os segredos do Mercado Livre

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descascamos outros hypes da nossa área.

Valeu e até a próxima! 😉

Facebook
Twitter
LinkedIn
Código Limpo

Kubernetes Não é Milagre: A Verdade Crua Sobre Escalabilidade Que Ninguém Te Conta

Kubernetes virou sinônimo de “escala infinita”, mas muita empresa quebra a cara tentando encaixar o cluster onde não existe nem volume, nem contexto de negócio que justifique o trambolho. Como arquiteto nas trincheiras, eu vejo o mesmo padrão: hype demais, diagnóstico de menos e uma bela dívida técnica embrulhada em YAML. Este artigo é o que você precisava ter lido antes de subir seu primeiro cluster de produção.

Feat

Mensageria vs Chamadas Diretas: o conflito que mais derruba arquiteturas de microserviços

Microserviço não é filosofia zen: é engenharia. E quando a galera mistura hype com decisões de conectividade, nasce uma fábrica de latência, acoplamento e dívida técnica difícil de pagar. Este artigo corta o romance e mostra, no tom direto do Rei Nascimento, quando usar mensageria, quando usar chamadas diretas e como evitar over-engineering que só engorda o diagrama e trava o negócio. Sem gourmetização — só trincheira.

Arquitetura de Software

AWS Lambda Não é Milagre: Por Que a Autoescalabilidade Vai te Deixar na Mão

Muita gente compra a promessa de que o AWS Lambda escala magicamente e resolve qualquer problema de carga. Conversa. Lambda escala, sim, mas escala do jeito que a AWS quer, no ritmo que ela quer e cobrando por cada milissegundo de ilusão. Como arquiteto que já levou bala na trincheira, explico por que confiar na autoescalabilidade do Lambda é abrir espaço para gargalos invisíveis, estouros de custo e comportamentos imprevisíveis no seu sistema.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *