Projete um feed de notícias
Equilibre fan-out na escrita e fan-out na leitura numa timeline social.
- Comparar fan-out na escrita com fan-out na leitura.
- Lidar com contas de celebridades com uma abordagem híbrida.
- Paginar um feed com cursores e guardar mídia de forma eficiente.
Requisitos. Os usuários publicam posts, seguem outros usuários e veem um feed principal com os posts de quem seguem, dos mais novos para os mais antigos. Não funcionais: carregar o feed precisa ser rápido (é a requisição mais frequente), a disponibilidade importa mais do que ter tudo perfeitamente atualizado, e alguns segundos de atraso até um post aparecer são aceitáveis. Essa tolerância é uma dica: o feed pode ter consistência eventual.
Push, pull ou os dois
- Fan-out na escrita (push): quando alguém posta, grave o ID do post num feed pré-calculado de cada seguidor (por exemplo, um sorted set do Redis por usuário). Ler um feed é uma busca rápida, mas cada post custa uma escrita por seguidor.
- Fan-out na leitura (pull): na hora da leitura, busque os posts recentes de todo mundo que o usuário segue e junte tudo. Postar é barato; ler é lento e caro.
- Híbrido: push para contas comuns; para celebridades com milhões de seguidores, pule o fan-out e junte os posts recentes delas na hora da leitura.
A escala do problema: um post de alguém com 2 seguidores custa 2 escritas de feed. Um post de uma conta com 1 milhão de seguidores custa 1.000.000.
O cache do feed guarda IDs de posts, e não os posts inteiros; o serviço de feed depois hidrata esses IDs a partir de um cache de posts, então um post editado é corrigido num único lugar. O fan-out roda de forma assíncrona por uma fila. Pagine com um cursor (“posts mais antigos que o ID X”) em vez de um offset, para que posts novos não desloquem as páginas e causem duplicatas. Imagens e vídeos vão para um armazenamento de objetos servido por uma CDN, e os posts guardam só as URLs. Ordenar por relevância é uma extensão comum.
Prática: compare as estratégias de fan-out
Experimente
Até 15 XPPush, pull ou os dois?
Esta rede tem 10 milhões de contas comuns com 200 seguidores cada e 1.000 celebridades com 20 milhões de seguidores cada. Todo mundo posta uma vez por dia e segue 300 contas, 5 delas de celebridades.
Compare as três estratégias. Quanto custa um post de celebridade com push? Quanto custa carregar um feed com pull?
- Gravações em feeds por dia
- 22.000.000.000
- Gravações do maior post
- 20.000.000
- Timelines combinadas por carregamento
- 1
As leituras são as mais baratas possíveis, mas um post de celebridade cria uma tempestade de gravações.
Juntando tudo: uma simulação de entrevista
Experimente
Até 15 XPApresente um projeto em voz alta
Explique o seu projeto como faria na sala. Nomeie o problema difícil antes do entrevistador.
“Projete o feed principal de uma rede social.”
Avalia: Fan-out
A pergunta fica oculta até você começar. Responda em voz alta, como faria na entrevista.
Principais conclusões
Push barateia as leituras; pull barateia as escritas; o híbrido resolve as celebridades.
Guarde em cache os IDs dos posts de cada feed e hidrate-os a partir de um cache de posts.
Use paginação por cursor e sirva a mídia a partir de um armazenamento de objetos, por uma CDN.
Quiz da aula
6 perguntas · aprovação com 5 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…