Pular para o conteúdo
System Design

Como projetar um feed de rede social para 300 milhões de usuários

Como pensar, simular, otimizar e responder em entrevistas técnicas de alto nível sobre system design de timelines como o Twitter/X.

Por que isso é importante

Resposta direta: em “Como projetar um feed de rede social capaz de escalar para”, meça no seu contexto — hype e ranking não substituem eval e aceite.

Por que isso é importante

Como projetar um feed de rede social para 300 milhões de usuários. Como pensar, simular, otimizar e responder em entrevistas técnicas de alto nível sobre system design de timelines como o Twitter/X.

Nem todo conteúdo nasce para viralizar: e tudo bem

Este artigo nasceu para quem quer dominar system design de verdade, não para seguir moda passageira. Aqui, a vibe é resolver juntos — do zero ao top das entrevistas — um dos problemas mais práticos do mercado tech: projetar um feed como o do Twitter/X, explicando cada decisão e mostrando o raciocínio por trás do sistema. Não é sobre IA do momento, e sim sobre fundamentos que vão te destacar tanto em processos seletivos quanto na vida real de dev.

Atenção

Esse desafio aparece em entrevistas e simulações técnicas, com cobrança sobre cada detalhe da escolha do design! Saber explicar seu raciocínio é mais importante do que acertar a solução.

O desafio: desenhe o feed perfeito (sem IA)

O cenário: sua entrevista pede para criar um sistema de feed tipo Twitter/X, com suporte a 300 milhões de usuários ativos/dia, timeline carregando em menos de 200ms, tweets de até 280 caracteres e posts só de quem você segue — tudo ordenado por tempo. Nada de IA, só timeline bruta. Você precisa explicar fanout, caching, message queues e decisão por NoSQL… E justificar cada escolha técnica.

Atenção

Volume, performance e consistência nem sempre andam juntos — toda decisão tem tradeoff! Mostre leituras, cálculos, hipóteses e questione os requisitos: isso conta pontos na entrevista.

Calcule antes de codar: simule o problema real

Não caia direto no desenho. Antes: discuta, calcule, questione números com o entrevistador — quantos tweets por dia? Qual o tamanho real de cada post? Organize seus dados: por exemplo, 300 milhões de usuários postando 2 vezes ao dia = 600 milhões de tweets/dia, 168GB só de texto. Calcule leituras e escritas — é a base para identificar gargalos futuros.

Atenção

O segredo da entrevista é pensar alto: faça cálculos, peça médias, mostre domínio em prever volume real! Só assim o seu design faz sentido e gera impacto.

Desenhando o caminho básico: client até NoSQL

O fluxo mais simples: client → load balancer → app server → NoSQL. Tanto leitura (timeline) quanto escrita (tweet). Rode assim no simulador e… pronto, gargalo! O banco NoSQL vira o elo fraco rapidamente, tudo trava em cascata — exatamente como aconteceria na vida real diante de milhões de usuários ativos. O diagnóstico é claro: evite fazer fanout apenas on read.

Entenda

Se sua timeline lê tudo direto do banco NoSQL sem cache, você afunda sob alta concorrência, gerando timeouts, conexões perdidas e baixa experiência do usuário. Escalabilidade exige desacoplar leituras do banco principal.

Por que Fanout on Read não escala?

Cada vez que um usuário abre o feed, o app server consulta direto o banco — agora imagine isso acontecendo para 300 milhões de pessoas. O resultado? Leitura massiva e repetitiva. Sem cache, nenhuma arquitetura suporta — e toda a infraestrutura começa a travar. Isso evidencia onde estará seu primeiro gargalo operacional.

Atenção

Em sistemas de alta escala, a leitura sempre supera a escrita. O custo de ir no banco primário toda hora é altíssimo!

Cache: a muralha para sua timeline sobreviver

Solução clássica: adicionar uma camada de cache entre o app server e o NoSQL. Use Cache Aside. Configure a chave (exemplo: "timeline: "), defina TTL (ex: 5min) e estratégia de eviction (LRU funciona bem). Suba o hit rate: timelines são lidas múltiplas vezes, logo é seguro esperar 90% de acerto no cache. Cada hit no cache equivale a redução de pressão sobre o banco.

Dica técnica

Justifique seu hit rate: quanto maior a repetição dos acessos, maior o impacto positivo do cache. Assuma o padrão e explique a lógica por trás do número na entrevista.

Grandes leituras, poucas escritas: otimize para o real

Lembre: escrever um tweet acontece bem menos do que ler feeds. A arquitetura deve aguentar centenas de milhões de leituras rápidas — e agrupar escritas para não sobrecarregar o banco. O cache reduz leitura no banco, mas a atualização dele precisa ser eficiente.

Cuidado

Se o cache não for atualizado após cada tweet novo, seguidores terão cache miss e puxarão do banco, perdendo performance.

Message Queue e Workers: entregando fanout de verdade

Para manter a timeline pronta, use message queues para notificar atualizações novas para stacks de seguidores. Consuma filas com workers — cada novo tweet "espalha" nos caches dos seguidores. Combinando fanout on write + cache, você entrega performance sem sobrecarregar a leitura.

Estratégia

Combine message queue com múltiplos workers para distribuir o workload e aumentar resiliência. Assim, o gargalo deixa de ser linear!

Escalando horizontalmente: réplicas onde faltar

Escale app servers, workers e até bancos (quando possível). O segredo está em identificar onde estão os bottlenecks e horizontalizar as camadas adequadas. Simule tráfego extra e veja como a parte mais lenta se desloca conforme os recursos aumentam.

Boas práticas

Nunca escale só por escalar — monitore, ajuste e, só então, some réplicas estratégicas. Métricas em tempo real valem ouro para antecipar rupturas.

Partitioning e consistência: detalhes que fazem diferença

Para banco e cache, particione por userID, garantindo balanceamento e performance. Em sistemas assim, escolha consistência eventual para leitura da timeline; atualização em realtime depende do seu tradeoff entre complexidade e escalabilidade.

Comparação

Consistência forte só é necessária para dados críticos. Feeds podem ser eventual consistent — e isso é esperado pelo usuário!

Checklist de requisitos-chave para devs de elite

Sempre repita os requisitos antes de desenhar. Garanta: suporte a 300M de usuários/dia, timeline carregando em menos de 200ms, cache com TTL e hit rate alto, fanout para atualização rápida dos seguidores, message queue e workers bem dimensionados, particionamento correto, escalabilidade horizontal monitorada.

Simule e questione: diferença de profissional para amador

O segredo está em pegar o simulador (System Design Arena ou papel/quadro branco) e prever: onde será o gargalo? O que muda se o tráfego dobra? O que acontece nos misses e timeouts? Questione, ajuste, explique — é isso que as big techs querem ver.

Não existe só uma resposta: comente, debata, evolua

System design é área de tradeoffs. Há dezenas de caminhos possíveis. O ponto é argumentar, ouvir alternativas e melhorar. Compartilhe sua arquitetura no GitHub, adapte, suba no simulador — e veja como ela se comporta. Bônus: traga feedbacks para a comunidade!

Aprenda com erros, otimize e avance

Garanta que suas decisões técnicas tenham justificativas. Erro faz parte, o importante é iterar, simular e ir ajustando para reduzir gargalos e aumentar performance. Teste novas configurações, aumente o hit rate, altere o modelo de fanout — pratique até seu raciocínio ficar automático.

Comece a treinar seu system design agora

Pronto para criar, simular e treinar? Use a System Design Arena, nem que seja com os exemplos da própria comunidade, e desafie seu raciocínio. O próximo passo é escalar do papel para o teste prático e se destacar onde importa.

Aprofunde-se: recursos e estudos para dominar o tema

1. Vídeos detalhados em https://www.youtube.com/@DevDoido para consultas rápidas 2. Gists no GitHub com soluções em Mermaid para subir e testar no simulador 3. Clubes de prática para debater architecture com pessoas experientes Ambos recursos ajudam a acelerar seu crescimento técnico e garantir diferencial em processos seletivos.

Perguntas frequentes

Em Como projetar um feed de rede social capaz de escalar para, o que «O desafio: desenhe o feed perfeito (sem IA)» resolve de verdade?

O cenário: sua entrevista pede para criar um sistema de feed tipo Twitter/X, com suporte a 300 milhões de usuários ativos/dia, timeline carregando em menos de 200ms, tweets de até 280 caracteres e posts só de quem você segue — tudo ordenado por tempo. Nada de. Em «O desafio: desenhe o feed perfeito (sem IA)», o texto trata isso como prática — não como slogan.

Como transformar «Calcule antes de codar: simule o problema real» em checklist?

Comece pelo mecanismo descrito: Não caia direto no desenho. Antes: discuta, calcule, questione números com o entrevistador — quantos tweets por dia? Qual o tamanho real de cada post? Organize seus dados: por exemplo, 300 milhões de usuários postando 2 vezes ao dia = 600 milhões de.

Qual métrica combina com «Desenhando o caminho básico: client até NoSQL»?

Use o critério do material: O fluxo mais simples: client → load balancer → app server → NoSQL. Tanto leitura (timeline) quanto escrita (tweet). Rode assim no simulador e… pronto, gargalo! O banco NoSQL vira o elo fraco rapidamente, tudo trava em cascata — exatamente como aconteceria na. Se precisar de segundo sinal, Se sua timeline lê tudo direto do banco NoSQL sem cache, você afunda sob alta concorrência, gerando timeouts, conexões perdidas e baixa experiência do usuário. Escalabilidade exige.

O que o material alerta sobre «Por que Fanout on Read não escala?»?

O artigo alerta: Cada vez que um usuário abre o feed, o app server consulta direto o banco — agora imagine isso acontecendo para 300 milhões de pessoas. O resultado? Leitura massiva e repetitiva. Sem cache, nenhuma arquitetura suporta — e toda a infraestrutura começa a travar. Ajuste ao seu contexto em `esse-video-nao-vai-dar-view` antes de virar regra.

Perguntas frequentes

Em Como projetar um feed de rede social capaz de escalar para, o que «O desafio: desenhe o feed perfeito (sem IA)» resolve de verdade?

O cenário: sua entrevista pede para criar um sistema de feed tipo Twitter/X, com suporte a 300 milhões de usuários ativos/dia, timeline carregando em menos de 200ms, tweets de até 280 caracteres e posts só de quem você segue — tudo ordenado por tempo. Nada de. Em «O desafio: desenhe o feed perfeito (sem IA)», o texto trata isso como prática — não como slogan.

Como transformar «Calcule antes de codar: simule o problema real» em checklist?

Comece pelo mecanismo descrito: Não caia direto no desenho. Antes: discuta, calcule, questione números com o entrevistador — quantos tweets por dia? Qual o tamanho real de cada post? Organize seus dados: por exemplo, 300 milhões de usuários postando 2 vezes ao dia = 600 milhões de.

Qual métrica combina com «Desenhando o caminho básico: client até NoSQL»?

Use o critério do material: O fluxo mais simples: client → load balancer → app server → NoSQL. Tanto leitura (timeline) quanto escrita (tweet). Rode assim no simulador e… pronto, gargalo! O banco NoSQL vira o elo fraco rapidamente, tudo trava em cascata — exatamente como aconteceria na. Se precisar de segundo sinal, Se sua timeline lê tudo direto do banco NoSQL sem cache, você afunda sob alta concorrência, gerando timeouts, conexões perdidas e baixa experiência do usuário. Escalabilidade exige.

O que o material alerta sobre «Por que Fanout on Read não escala?»?

O artigo alerta: Cada vez que um usuário abre o feed, o app server consulta direto o banco — agora imagine isso acontecendo para 300 milhões de pessoas. O resultado? Leitura massiva e repetitiva. Sem cache, nenhuma arquitetura suporta — e toda a infraestrutura começa a travar. Ajuste ao seu contexto em `esse-video-nao-vai-dar-view` antes de virar regra.

Por que Fanout on Read não escala?

Cada vez que um usuário abre o feed, o app server consulta direto o banco — agora imagine isso acontecendo para 300 milhões de pessoas. O resultado? Leitura massiva e repetitiva. Sem cache, nenhuma arquitetura suporta — e toda a infraestrutura começa a travar. Isso evidencia onde estará seu primeiro gargalo operacional.