Design clássico · Júnior
De zero a milhões de usuários
Projeto de entrevista clássico. Pontos centrais: estimativa de capacidade.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: estimativa de capacidade. Este caso não tem um produto específico: a pergunta é como um sistema cresce de poucos usuários para muitos, e o que muda a cada degrau. Em entrevista, a resposta boa não pula para a arquitetura final; ela parte do mais simples e só adiciona uma peça quando consegue dizer qual…
01 · CONTEXTO
Começar simples: tudo em um servidor
Este caso não tem um produto específico: a pergunta é como um sistema cresce de poucos usuários para muitos, e o que muda a cada degrau. Em entrevista, a resposta boa não pula para a arquitetura final; ela parte do mais simples e só adiciona uma peça quando consegue dizer qual gargalo ela resolve.
O ponto de partida é um único servidor rodando tudo: aplicação web, banco de dados e cache. Quando o tráfego cresce, o primeiro passo é separar a camada web da camada de dados, o que permite escalar cada uma de forma independente.
No começo, o cliente fala com um único servidor que concentra a aplicação e os dados; é simples de operar, mas qualquer limite dele é o limite do sistema.
O banco sai para o próprio servidor: agora a camada web e a camada de dados crescem em ritmos diferentes, cada uma com os recursos de que precisa.
02 · ESCALA
Vertical, horizontal e a camada web sem estado
Há duas formas de dar mais capacidade. A escala vertical coloca mais CPU e memória na mesma máquina; é simples, mas tem um limite rígido, e uma única máquina também é um ponto único de falha. A escala horizontal adiciona mais servidores e é o que sustenta sistemas grandes.
Com mais de um servidor web, alguém precisa repartir o tráfego. É o papel do balanceador de carga, que distribui as requisições de entrada entre os servidores do conjunto. Os clientes passam a falar só com o balanceador, e os servidores web deixam de ser acessados diretamente.
Para qualquer servidor poder atender qualquer requisição, o estado de sessão sai dos servidores web e vai para um armazenamento compartilhado. Um sistema sem estado é mais simples, mais robusto e mais escalável, e é isso que permite adicionar ou remover servidores web conforme a carga.
03 · DADOS E LEITURA
Replicação, cache e CDN
Na camada de dados, a replicação separa os papéis: o banco principal só aceita escritas, e as réplicas recebem cópias dos dados e atendem as leituras. Isso ajuda a desempenho e disponibilidade. Se o principal cai, uma réplica é promovida a novo principal e uma nova réplica entra no lugar; em produção, essa promoção é mais complicada do que parece.
Duas peças tiram carga do banco e da aplicação. O cache guarda em memória o que é lido com frequência e modificado raramente. A CDN é uma rede de servidores geograficamente dispersos que entrega conteúdo estático, como imagens, vídeos, CSS e JavaScript, a partir de um ponto próximo do usuário.
O balanceador reparte as requisições entre os servidores web; nenhum deles é o ponto de entrada único.
Os servidores web não guardam estado de sessão; por isso qualquer um deles atende qualquer requisição e é possível acrescentar ou retirar instâncias.
O conteúdo estático é entregue pela CDN, de perto do usuário, e nem chega aos servidores web.
O que é muito lido e pouco alterado fica no cache; os servidores web consultam o cache antes de ir ao banco.
As escritas vão ao banco principal e as leituras vão à réplica, que recebe cópias dos dados do principal.
Se o banco principal cai, a réplica é promovida a novo principal e o sistema segue operando.
| Peça | O que resolve | Quando usar |
|---|---|---|
| Balanceador de carga | Reparte o tráfego entre servidores web | Quando há mais de um servidor web |
| Réplicas do banco | Leituras saem do principal | Quando as leituras dominam o banco |
| Cache | Evita ir ao banco | Dado lido com frequência e pouco modificado |
| CDN | Entrega estáticos perto do usuário | Imagens, vídeos, CSS e JavaScript |
04 · ASSÍNCRONO E OPERAÇÃO
Filas, vários data centers e observabilidade
Trabalho lento não precisa bloquear a resposta. Com uma fila de mensagens, o produtor publica a mensagem e os consumidores a processam depois, em seu próprio ritmo. Esse desacoplamento permite escalar produtores e consumidores de forma independente, e é por isso que a fila é uma arquitetura preferida para aplicações escaláveis e confiáveis.
Para atender usuários em regiões distantes e sobreviver a uma queda de site, o sistema pode rodar em mais de um data center. Numa queda significativa, todo o tráfego é direcionado a um data center saudável. À medida que o sistema cresce, também ficam essenciais os logs, as métricas e a automação: monitorar logs de erro ajuda a identificar problemas no sistema.
O servidor web publica a tarefa na fila e responde sem esperar o resultado; a fila desacopla quem produz de quem consome.
Os consumidores retiram as mensagens da fila no próprio ritmo; se a fila encher, basta acrescentar consumidores.
Servidores web e consumidores enviam logs e métricas a um ponto central, onde os erros podem ser pesquisados.
05 · SHARDING
Quando um banco só não basta
Quando os dados crescem além do que um banco aguenta, a escala horizontal da camada de dados é o sharding: adicionar mais servidores e dividir os dados entre eles. O custo está em novos problemas, como o problema da celebridade, também chamado de chave quente: acesso excessivo a um shard específico pode sobrecarregá-lo.
Perguntas frequentes
O que é De zero a milhões de usuários?
Projeto de entrevista clássico. Pontos centrais: estimativa de capacidade.
O que o design de De zero a milhões de usuários cobre?
Ele está organizado nestas seções: Começar simples: tudo em um servidor, Vertical, horizontal e a camada web sem estado, Replicação, cache e CDN, Filas, vários data centers e observabilidade e Quando um banco só não basta.
Quanto tempo leva De zero a milhões de usuários e qual é o nível?
Leva cerca de 11 minutos para ler e tem nível Júnior.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.