Carregando
0xB0Lição 12 de 13

Projete um feed de notícias

Equilibre fan-out na escrita e fan-out na leitura numa timeline social.

20 min Questionário com 6 perguntas
Ao final desta lição, você saberá
  • 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 XP

Push, 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?

Estratégia
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 XP

Apresente um projeto em voz alta

Explique o seu projeto como faria na sala. Nomeie o problema difícil antes do entrevistador.

Pergunta 1

“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…