1 de Outubro de 2025
Design de Feed de Redes Sociais
Como desenhar um feed tipo Twitter ou Instagram sem cair em resposta decorada, separando leitura, publicação, fanout e custo real.
Andrews Ribeiro
Founder & Engineer
5 min Intermediario Sistemas
Trilha
Trilha de system design para entrevistas
Etapa 16 / 19
O problema
Feed parece simples para quem olha só a interface.
O usuário abre o app e vê uma lista de posts. Só isso.
Mas, por trás dessa lista, o sistema precisa lidar com:
- leitura massiva
- escrita que pode disparar trabalho para milhões de pessoas
- atualização constante
- contas normais e contas gigantes no mesmo produto
É por isso que feed aparece tanto em entrevista. Ele parece familiar, mas obriga você a mostrar julgamento de arquitetura de verdade.
Modelo mental
A forma mais limpa de pensar em feed é separar o sistema em dois caminhos:
- o caminho de publicar
- o caminho de ler
Quando alguém publica, o sistema precisa salvar o post e decidir como esse conteúdo vai chegar ao feed dos seguidores.
Quando alguém abre o app, o sistema precisa devolver uma timeline rápida, consistente o suficiente e barata o bastante para rodar em escala.
Daí nascem os dois modelos clássicos:
fanout on write: o sistema já empurra o post para as timelines dos seguidores quando ele é publicadofanout on read: o sistema monta a timeline quando o usuário pede para ler
O primeiro paga mais cedo. O segundo paga mais tarde.
Quase sempre a resposta madura é híbrida.
Quebrando o problema
Primeiro alinhe o tipo de feed
Antes do desenho, vale travar algumas perguntas:
- o feed é cronológico ou ranqueado?
- a primeira página precisa ser muito rápida?
- a maioria dos usuários segue poucas pessoas ou muitas?
- existem contas gigantes com dezenas de milhões de seguidores?
Sem isso, a conversa vira diagrama bonito sem critério.
O write path: quando alguém publica
No fluxo de publicação, o sistema normalmente:
- persiste o post
- registra um evento ou job
- decide como distribuir esse post
Se a estratégia for fanout on write, o sistema vai gravar esse post nas timelines pré-computadas dos seguidores.
Isso costuma deixar a leitura muito boa, mas pode explodir custo quando o autor tem muitos seguidores.
O read path: quando alguém abre a timeline
No fluxo de leitura, o sistema precisa devolver uma lista pronta ou quase pronta.
Ele pode:
- ler uma timeline já materializada
- montar a timeline na hora
- ou combinar uma base pronta com alguns trechos montados no read path
Essa decisão define boa parte do custo da arquitetura.
O problema da celebridade
Se um usuário com poucos seguidores publica, fanout on write é tranquilo.
Se uma conta enorme publica, essa mesma estratégia pode virar tempestade de escrita, fila e cache invalidado ao mesmo tempo.
Por isso, sistemas reais costumam fazer algo como:
- usuários comuns usam
fanout on write - contas gigantes usam
fanout on readou algum tratamento especial
Esse tratamento especial existe porque a distribuição de seguidores não é uniforme.
Poucas contas concentram carga demais para uma solução ingênua continuar barata.
Esse é um ponto importante de entrevista, porque mostra que você não está assumindo distribuição uniforme.
Cache, paginação e ranking
Feed quase sempre tem cache em algum lugar, principalmente na primeira página.
Mas cache sozinho não resolve o desenho. Ele melhora o que já foi decidido.
Você ainda precisa explicar:
- o que está sendo cacheado
- por quanto tempo
- como a paginação funciona
- e quanto de frescor você realmente precisa
Se a primeira página precisa parecer instantânea, ela merece um desenho diferente das páginas mais fundas.
Se o feed tem ranking, entra outro custo: recomputar relevância. Isso deixa a explicação melhor quando você mostra que ranking muda o read path e não é só um detalhe visual.
Exemplo simples
Uma resposta boa em entrevista poderia soar assim:
“Eu separaria o feed em dois fluxos: publicar e ler. Quando um usuário publica, o post é salvo e um evento é emitido. Para usuários comuns, eu faria fanout on write e colocaria o post em timelines pré-computadas dos seguidores. Para contas muito grandes, eu evitaria espalhar para todo mundo na escrita e montaria parte da timeline no read path. Na leitura, eu tentaria servir a primeira página de uma timeline pronta ou em cache. Assim eu preservo boa experiência para a maioria dos casos sem transformar conta gigante em hotspot permanente.”
Essa resposta funciona porque ela:
- separa os fluxos
- mostra o trade-off central
- trata exceção importante
- evita prometer consistência perfeita sem custo
Erros comuns
- Responder “eu usaria Redis” como se isso fosse o desenho.
- Não separar publicação de leitura.
- Tratar usuário comum e celebridade do mesmo jeito.
- Ignorar paginação e primeira página quente.
- Falar de ranking sem reconhecer o custo extra.
Como um senior pensa
Quem já viu esse tipo de sistema em produção costuma reduzir a conversa a duas perguntas:
Onde eu quero pagar: na escrita ou na leitura?
Quem foge do comportamento normal e precisa de tratamento especial?
Isso limpa muita confusão.
Em vez de tentar parecer sofisticado, a pessoa mostra que sabe localizar o custo e proteger o sistema dos casos extremos.
Esse é o tipo de cenário em que resposta madura costuma dizer cedo o que aceita atrasar, o que precisa ficar rápido e para quem o desenho muda.
O que o entrevistador quer ver
Nesse cenário, o entrevistador quer ver se você:
- separa write path e read path
- entende fanout como custo real, não como buzzword
- reconhece hotspot de contas gigantes
- usa cache como apoio, não como desculpa
- explica um desenho coerente sem tentar cobrir tudo ao mesmo tempo
Feed bom não nasce de um diagrama complexo. Nasce de decidir com clareza onde o sistema vai pagar pela rapidez da timeline.
Quando você separa usuário comum de caso extremo, o desenho para de parecer teórico e começa a parecer real.
Resumo rápido
O que vale manter na cabeça
- Feed tem dois fluxos diferentes: publicar e ler.
- Fanout on write melhora leitura e pressiona escrita.
- Fanout on read simplifica escrita e encarece leitura.
- Conta gigante quase sempre exige tratamento diferente do usuário comum.
- A resposta boa não tenta achar uma arquitetura perfeita; ela explica um trade-off defensável.
Checklist de pratica
Use isto ao responder
- Consigo separar o write path do read path sem me enrolar?
- Sei explicar fanout on write e fanout on read em linguagem simples?
- Consigo dizer por que celebridade quebra uma solução ingênua?
- Sei explicar onde cache ajuda e onde ele não resolve o problema sozinho?
Você concluiu este artigo
Parte da trilha: Trilha de system design para entrevistas (16/19)
Próximo passo
Design de Sistema de Notificações Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.