Pular para o conteudo principal

Escala e gargalos

Como pensar em escala começando pelo que quebra primeiro e pelo motivo.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

Trilha

Trilha de system design para entrevistas

Etapa 3 / 19

O problema

Muita conversa sobre escala começa grande demais.

Antes de alguém provar onde o sistema esta doendo, a sala já falou de fila, Kafka, load balancer, CDN, sharding e microsservico. Isso pode soar sofisticado. Quase nunca ajuda a decidir o próximo passo.

Escala de verdade não começa pela lista de componentes. Começa pela pergunta mais simples e mais útil do assunto:

se esse fluxo crescer 10x, o que quebra primeiro?

Enquanto essa pergunta não estiver respondida, o resto e decoração.

Modelo mental

Sistema quase nunca quebra em todo lugar ao mesmo tempo.

Na maioria dos casos, ele sente o primeiro impacto em um recurso específico:

  • CPU
  • memória
  • conexão com banco
  • largura de banda
  • I/O de disco
  • dependência externa lenta

Pensar em escala, portanto, não e imaginar um sistema infinito. E identificar o primeiro limite fisico ou logico que vai apertar.

Tem uma forma simples de lembrar:

  1. descubra o fluxo mais importante
  2. descubra qual recurso esse fluxo consome
  3. descubra qual recurso satura primeiro
  4. alivie esse ponto antes de redesenhar o resto

Esse modelo evita duas armadilhas comuns:

  • otimizar a parte errada
  • aumentar complexidade sem necessidade

Quebrando o problema

Uma forma prática de pensar gargalo e esta:

  1. Escolha um fluxo crítico.
  2. Defina a metrica que importa nesse fluxo.
  3. Localize o recurso mais pressionado.
  4. Escolha a menor mudança que reduz a pressao.

Fluxo crítico pode ser:

  • checkout
  • login
  • redirect
  • busca
  • upload

Metrica pode ser:

  • latência
  • throughput
  • erro
  • custo

Recurso pressionado pode ser:

  • CPU da aplicação
  • banco
  • fila cheia
  • API de terceiro

Repare que tudo fica mais claro quando você fala em fluxo, metrica e recurso. “Escalabilidade” deixa de ser uma palavra abstrata e vira um diagnostico concreto.

Uma heuristica boa e esta:

  • se você não consegue dizer o que vai saturar primeiro, ainda não esta decidindo arquitetura; esta só nomeando tecnologia

Exemplo simples

Imagine uma API que gera PDF pesado sob demanda.

Toda vez que o usuário clica em “exportar relatório”, o servidor:

  • consulta vários dados
  • monta o arquivo
  • renderiza o PDF
  • devolve o download na mesma requisição

Se esse sistema crescer, qual e o primeiro gargalo provavel?

Não e cache de rota. Não e CDN. Não e microsservico.

O primeiro gargalo mais provavel e CPU durante a geração do PDF, somado ao tempo que cada request ocupa uma instancia.

Uma resposta madura seria:

“O ponto de dor não esta na leitura do banco. Esta no trabalho pesado dentro do caminho síncrono. Eu tiraria a geração de PDF da rota principal, colocaria o trabalho em processamento assíncrono, responderia 202 Accepted e deixaria o cliente consultar o status depois.”

Perceba o que aconteceu:

  • o gargalo foi nomeado
  • a mudança atacou o gargalo certo
  • a arquitetura mudou só porque o fluxo exigiu

Esse e o oposto de teatro.

Erros comuns

  • Começar escala pela tecnologia favorita.
  • Assumir que banco sempre e o gargalo.
  • Ignorar dependência externa porque ela não esta “no seu código”.
  • Querer redesenhar tudo antes de localizar um ponto de saturacao.
  • Medir só media e esquecer o pico.

Outro erro comum e confundir gargalo atual com gargalo final.

Talvez hoje o CPU da aplicação sature primeiro. Depois que você resolve isso, o próximo limite pode ser banco. Escala costuma ser uma sequência de gargalos, não uma unica resposta definitiva.

Também vale desconfiar de solução que melhora tudo ao mesmo tempo. Quase nunca melhora. O normal e aliviar uma pressao especifica e trocar isso por outro custo: mais fila, mais complexidade, mais observabilidade, mais consistência eventual, mais operação.

Como um senior pensa

Quem tem mais experiência costuma ser menos impressionado por arquitetura bonita e mais obcecado por sintoma real.

O raciocínio normalmente vem assim:

“Me mostra o fluxo que mais importa. Me mostra a metrica que esta apertando. Agora me mostra o recurso que sustenta esse fluxo. A partir dai eu escolho a menor intervenção que muda o resultado.”

Isso e pensamento senior porque combina duas coisas:

  • diagnostico antes de mudança
  • proporcionalidade na resposta

Nem todo problema de escala pede sistema distribuido. As vezes pede indice. As vezes pede cache. As vezes pede tirar um trabalho caro do request.

Essa parte e importante porque pensamento senior aqui não e “pensar grande”. E pensar proporcional.

O que o entrevistador quer ver

Em entrevista de system design, falar de escala desse jeito mostra maturidade rápido porque você sai do slogan e entra em engenharia.

Normalmente o entrevistador quer ver:

  • se você localiza o fluxo crítico
  • se você sabe falar de recurso, não só de componente
  • se você propõe mudança proporcional
  • se você entende degradação e próximo gargalo

Escalar não e adicionar caixa no diagrama. E aliviar o ponto que bloqueia o sistema primeiro.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Parte da trilha: Trilha de system design para entrevistas (3/19)

Próximo artigo APIs e serviços com fronteiras claras Artigo anterior O Que Roda no Cliente e no Servidor

Continue explorando

Artigos relacionados