Entrevista de Design de Sistemas: Projete o Twitter

"Projete o Twitter" é o problema canônico de geração de feed. Parece simples — postar um tweet, ler uma timeline — mas a parte interessante é gerar a timeline inicial de cada usuário em escala, onde a resposta certa é uma estratégia híbrida de fan-out. O entrevistador quer ver você descobrir que ambas as abordagens ingênuas falham, e raciocinar até chegar à mistura.

Avance deliberadamente: esclareça os requisitos, estime a proporção de leitura/escrita, projete o armazenamento de tweets, depois a timeline — comparando fan-out-on-write com fan-out-on-read e chegando ao híbrido que trata o problema das celebridades. O guia abaixo segue esse caminho.

1. Esclarecer os requisitos

Limite-se ao problema central do feed. Usuários postam tweets, seguem outros, e leem uma timeline inicial que mescla tweets de todos que seguem, do mais novo para o mais antigo.

  • Funcional: postar um tweet, seguir/deixar de seguir, timeline inicial (pessoas que você segue), timeline de usuário (um autor); busca básica fora do escopo a menos que solicitada.
  • Não funcional: muito intensivo em leitura, leituras de timeline de baixa latência, alta disponibilidade; consistência eventual para a timeline é aceitável.
  • Esclarecer: mídia, respostas/threads e ranking — reconheça-os, e delimite um feed cronológico para esta rodada.

2. Estimar a escala e a proporção de leitura/escrita

A proporção direciona todo o design. As leituras superam amplamente as escritas — usuários rolam a timeline com muito mais frequência do que postam. Com centenas de milhões de usuários, o sistema precisa tornar as leituras de timeline baratas, mesmo que isso torne as escritas mais caras. Essa única observação aponta para pré-computar as timelines.

3. Armazenamento de tweets

Os tweets em si são dados simples, pesados em append. Armazene-os em um armazenamento particionado horizontalmente, com chave pelo ID do tweet (com um ID ordenável por tempo, como um Snowflake ID, para que a ordenação já venha embutida). Um armazenamento separado para o grafo social guarda as relações de seguidores/seguidos.

  • Tweets: armazenamento distribuído, particionado por ID do tweet; IDs ordenáveis por tempo dão uma ordenação cronológica barata.
  • Grafo social: quem segue quem, otimizado para 'obter todos os seguidores de X' e 'obter todos os seguidos de X'.
  • Um cache (Redis) guarda dados quentes — tweets recentes e timelines pré-computadas.

4. Geração da timeline: fan-out na escrita vs na leitura

Este é o coração do problema. Fan-out-on-write (push) insere cada novo tweet na lista de timeline pré-computada de cada seguidor no momento da postagem — as leituras da timeline se tornam uma consulta de cache barata, mas uma postagem de alguém com milhões de seguidores dispara milhões de escritas. Fan-out-on-read (pull) constrói a timeline no momento da leitura, mesclando tweets recentes de todos que você segue — escritas baratas, mas leituras caras e lentas para usuários que seguem muitas contas.

  • Fan-out-on-write: leituras rápidas, escritas caras; ótimo para usuários normais.
  • Fan-out-on-read: escritas baratas, leituras caras; necessário para contas com um número enorme de seguidores.

5. O problema das celebridades e o híbrido

Nenhuma abordagem pura vence, então combine-as. Use fan-out-on-write para a grande maioria dos usuários, mas para contas 'celebridade' com um número de seguidores muito grande, NÃO faça fan-out de seus tweets na escrita. Em vez disso, no momento da leitura, mescle a timeline pré-computada de um seguidor com uma busca em tempo real das poucas celebridades que ele segue. Isso limita a amplificação de escrita mantendo as leituras rápidas — a resposta que os entrevistadores esperam ouvir.

6. Trade-offs a verbalizar

Encerre com as tensões: amplificação de escrita versus latência de leitura (toda a decisão de fan-out), o custo de armazenamento das timelines pré-computadas versus recalculá-las, e a consistência — alguns segundos de atraso antes de um tweet aparecer nas timelines dos seguidores é aceitável, então a consistência eventual permite escalar. Declarar explicitamente o limiar do híbrido (como você classifica uma 'celebridade') demonstra julgamento sênior.

Pratique o design de sistemas do Twitter com ajuda em tempo real

O assistente de entrevistas de design de sistemas da Natively pode te manter estruturado durante uma rodada em tempo real — sugerindo a próxima dimensão a cobrir e mostrando os trade-offs em tempo real, tudo no seu próprio dispositivo.

Instale no seu próprio computador.

Um assistente para conversas em tempo real que roda localmente. Nada sai do seu computador.

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Código-fonte disponível sob a Natively Personal Use Source License v1.0 · Geolocalização por IP por DB-IP