Pular para o conteúdo principal

Conceitointermediário

Arquitetura de Alto Nível

Visão Geral

O desenho de alto nível é o meio da entrevista, e ele tem uma regra que a intuição contraria: comece simples demais.

primeira versão 4 a 6 caixas, o fluxo completo funcionando
depois expandir onde o entrevistador apontar, ou onde
a estimativa disser que há gargalo

Um desenho inicial com quinze componentes é difícil de explicar, difícil de criticar e sugere que o candidato aplicou um modelo em vez de derivar um. Um desenho com cinco caixas que atende ao fluxo inteiro é uma base sobre a qual a conversa acontece.

Problema

Dois padrões.

Complexidade prematura. O candidato desenha balanceador, gateway, seis microsserviços, fila, cache, réplicas, índice de busca e armazenamento de objetos — em três minutos, antes de qualquer gargalo ter sido identificado.

O problema não é que os componentes estejam errados. É que nenhum foi justificado, e o entrevistador não tem como distinguir julgamento de memorização. A pergunta que vem é "por que essa fila?", e a resposta precisa ser melhor que "para desacoplar".

Desenho incompleto. O candidato detalha profundamente uma parte — o modelo de cache, por exemplo — e nunca fecha o fluxo. Ao fim da entrevista, não existe um caminho completo da requisição do usuário até a resposta.

avaliado existe um fluxo completo que funciona?
cada componente tem uma razão?
o candidato sabe o que fazer quando ele não escalar?

Conceitos Centrais

Desenhe o caminho, não a topologia

Comece pelo fluxo da operação principal, seguindo a requisição:

cliente → balanceador → serviço de aplicação → banco

cache

Cinco caixas. Elas atendem ao requisito funcional inteiro. A partir daqui, cada acréscimo tem uma razão declarada.

Desenhar o caminho tem uma vantagem sobre desenhar a topologia: ele mantém o foco em como uma requisição é atendida, e é isso que revela onde ela pode falhar ou ficar lenta.

Uma caixa, uma razão

"balanceador porque há mais de uma instância de aplicação"
"cache porque a razão leitura/escrita é 100 para 1 e o conjunto
quente cabe em memória"
"fila porque a confirmação de pedido depende de um parceiro
externo com 98,7% de disponibilidade, e nosso requisito é 99,9%"

A terceira frase é o modelo: ela liga um componente a um número que veio da estimativa e a um requisito que veio da clarificação. Essa cadeia — requisito, número, componente — é o que distingue arquitetura de recitação.

Se você não consegue enunciar a razão de uma caixa, ela não deveria estar no desenho ainda.

Vale notar que essa regra também protege contra a pergunta mais desconfortável da entrevista: "o que acontece se eu tirar esse componente?". Um candidato que colocou cada caixa por uma razão responde imediatamente — "sem o cache, o banco vê 12 mil leituras por segundo em vez de 600, o que exigiria muitas réplicas e custaria mais". Um candidato que copiou um modelo não tem resposta, e a ausência dela é mais informativa que qualquer desenho.

Comece monolítico e divida sob pressão

Uma escolha que causa desconforto e é a correta:

primeira versão "serviço de aplicação" — uma caixa
depois dividir onde houver razão: perfil de carga
diferente, requisito de disponibilidade diferente,
ou time diferente

Desenhar seis microsserviços desde o início é o erro mais comum em entrevistas de nível intermediário. Ele sinaliza que a divisão veio de um modelo mental e não do problema. Ver monólito vs. microsserviços.

A resposta forte quando o entrevistador pergunta "e microsserviços?": "dividiria se tivéssemos times independentes precisando implantar separado, ou se algum componente tivesse perfil de escala muito diferente. Aqui, o componente X tem — então eu o separaria, e manteria o resto junto".

Marque o volume nas setas

cliente → aplicação 12 mil/s
aplicação → cache 12 mil/s, 95% de acerto
aplicação → banco 600/s de leitura, 120/s de escrita

Anotar os números transforma o desenho num instrumento de análise: fica visível onde a carga se concentra, e a próxima pergunta — "o que satura primeiro?" — tem resposta imediata. Ver identificação de gargalo.

Complete o fluxo antes de aprofundar

ruim detalhar o cache por oito minutos com o fluxo pela metade
bom fechar o caminho inteiro em cinco minutos, e então
perguntar "onde você quer que eu aprofunde?"

A pergunta ao final do desenho inicial é um movimento forte: ela devolve o controle ao entrevistador, que vai apontar onde ele quer avaliar, e evita que você aprofunde numa parte que ele não considera interessante.

Ela também tem um efeito de ritmo. Entrevistas frequentemente derivam para o assunto que o candidato conhece melhor, e o avaliador percebe isso. Convidar explicitamente a escolha do tema sinaliza confiança em cobrir qualquer um deles — e, na prática, o entrevistador costuma escolher justamente onde ele tem uma pergunta preparada, o que é a parte da conversa que mais rende.

Separe caminho de leitura e de escrita

Quando os dois têm perfis diferentes — e quase sempre têm —, desenhá-los separados esclarece:

escrita cliente → aplicação → banco → (evento) → processamento
leitura cliente → cache → aplicação → réplica

Essa separação torna óbvio por que o cache está do lado da leitura, por que a réplica existe, e onde a consistência eventual aparece. É um desenho mais informativo com o mesmo número de caixas.

Nomeie por responsabilidade, não por tecnologia

ruim "Redis", "Kafka", "PostgreSQL"
bom "cache de sessão", "fila de eventos de pedido",
"banco de pedidos"

Nomear por responsabilidade mantém a conversa no nível de arquitetura e evita que ela derive para comparação de produtos. A tecnologia entra como uma nota — "seria um cache em memória, tipo Redis" — sem ocupar o centro.

Modelo Mental

Cinco caixas, fluxo completo, cada uma justificada. Expanda sob demanda, não por antecipação.

Quando Usar

  • Após requisitos, estimativas, API e modelo.
  • Começando pelo caminho da operação principal.
  • Com volumes anotados nas setas.

Quando Não Usar

Com quinze caixas de saída.

Aprofundando antes de fechar o fluxo.

Com componentes não justificados.

Dividindo em serviços sem razão declarada.

Nomeando por produto em vez de por responsabilidade.

Alternativas

  • Descrever o fluxo em texto — quando não há quadro; menos eficaz e viável.
  • Desenhar dois fluxos — leitura e escrita separados; melhor quando os perfis divergem.
  • Começar pelo gargalo — se a estimativa já apontou um, desenhar em torno dele é legítimo.

Trade-offs

Desenho simplesDesenho completo
Fácil de explicar e criticarCobre mais
Expande sob demandaConsome tempo
Cada caixa justificadaSugere memorização
Monolítico primeiroDividido desde o início
Divisão justificada depoisParece mais moderno
Menos caixas para explicarMais superfície a defender

Modos de Falha

Complexidade prematura. Componentes sem razão.

Fluxo incompleto. Nenhum caminho completo ao fim da entrevista.

Divisão em serviços sem critério.

Setas sem volume. O desenho não sustenta a análise seguinte.

Nomes de produto. A conversa vira comparação de tecnologias.

Erros Comuns

Desenhar a arquitetura de referência decorada, independente do enunciado.

Não fechar o fluxo antes de aprofundar.

Colocar fila sem dizer o que ela resolve.

Não perguntar onde o entrevistador quer aprofundar.

Ignorar o caminho de leitura quando ele domina o volume.

Exemplo de Entrevista

Problema. "Projete um encurtador de URL." Requisitos e estimativas já feitos: 12 mil redirecionamentos por segundo, 120 criações por segundo, conjunto quente de 30 GB.

Primeiro desenho, em quatro minutos:

┌──────────┐
cliente ──────────► │ balancea-│
│ dor │
└────┬─────┘

┌────▼─────┐ ┌───────┐
│ serviço │ ───► │ cache │
│ de links │ ◄─── │ │
└────┬─────┘ └───────┘

┌────▼─────┐
│ banco │
│ de links │
└──────────┘

A justificativa de cada caixa, em voz alta:

"balanceador porque 12 mil por segundo exige várias instâncias

serviço de links é uma caixa só: criar e redirecionar são
operações do mesmo domínio, com o mesmo modelo, e não vejo
razão para separá-las agora

cache porque a leitura é 100× a escrita e o conjunto quente
de 30 GB cabe em memória. Com 95% de acerto, o banco vê
600 leituras por segundo em vez de 12 mil

banco relacional porque 10 TB e 120 escritas por segundo
cabem com folga, e podemos ter consultas não previstas"

Volumes nas setas:

cliente → serviço 12 120/s
serviço → cache 12 000/s, 95% acerto
serviço → banco 600/s leitura + 120/s escrita

A pergunta ao entrevistador:

"Esse fluxo atende aos requisitos que levantamos. Onde você
quer que eu aprofunde: geração do código curto, estratégia
de cache, disponibilidade, ou análise de cliques?"

Se ele pedir análise de cliques, o desenho ganha uma caixa — e a justificativa vem junto:

"cliques são 12 mil eventos por segundo, e a análise tolera
minutos de atraso. Colocar isso no caminho síncrono do
redirecionamento adicionaria latência ao que é mais crítico.

Vou emitir um evento assíncrono e agregar fora do caminho:
serviço → fila → agregador → armazenamento de métricas.

Isso mantém o redirecionamento com uma leitura de cache e
nada mais."

Note que a caixa nova entrou com um requisito, um número e uma consequência — e que ela só apareceu quando foi pedida.

Conceitos Relacionados

Exercício Prático

Desenhe, em cinco minutos, a arquitetura de um sistema de agendamento — e escreva ao lado de cada caixa a razão dela em uma frase.

As caixas sem frase são as que você colocou por hábito. Remova-as e veja se o fluxo ainda funciona.

Perguntas de Entrevista

  • Por que começar com poucas caixas é melhor que começar completo?
  • Por que perguntar ao entrevistador onde aprofundar é um movimento forte?
  • Por que nomear componentes por responsabilidade e não por produto?

Para Aprofundar

  • Xu, Alex. System Design Interview. Byte Code, 2020.
  • Brown, Simon. Software Architecture for Developers. Leanpub, 2015.
  • Newman, Sam. Building Microservices. 2ª ed. O'Reilly, 2021.
Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.