Design clássico · Pleno
Agregador de notícias (Google News)
Projeto de entrevista clássico. Pontos centrais: estruturas probabilísticas.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: estruturas probabilísticas. Um agregador de notícias reúne artigos de milhares de publishers em uma interface rolável, para quem quer acompanhar os acontecimentos. O exemplo deste caso é o Google News, e a tarefa de entrevista que serve de base descreve o produto assim.
01 · CONTEXTO E REQUISITOS
O que um agregador de notícias faz
Um agregador de notícias reúne artigos de milhares de publishers em uma interface rolável, para quem quer acompanhar os acontecimentos. O exemplo deste caso é o Google News, e a tarefa de entrevista que serve de base descreve o produto assim.
A página lista três requisitos centrais: ver um feed agregado de artigos de milhares de publishers do mundo todo, rolar o feed “infinitamente” e clicar num artigo para ser redirecionado ao site do publisher, onde está o conteúdo completo. É um bom ponto de partida para o levantamento de requisitos.
Personalizar o feed por interesses é um dos itens que a página deixa fora do escopo inicial. Entre os requisitos não funcionais, ela prioriza a disponibilidade sobre a consistência: os usuários preferem ver um conteúdo levemente desatualizado a não ver conteúdo nenhum.
02 · INGESTÃO
Como os artigos chegam ao sistema
Antes de montar qualquer feed, o sistema precisa descobrir os artigos. Uma fonte de descoberta documentada é o news sitemap: a documentação do Google para publishers diz que ele serve para o publisher informar ao Google sobre seus artigos de notícias e dados adicionais sobre eles.
O publisher deve atualizar o sitemap com artigos novos à medida que os publica, e o Google News rastreia esses sitemaps com a mesma frequência com que rastreia o resto do site.
A documentação pede que o sitemap inclua só URLs de artigos criados nos últimos dois dias. Cada sitemap aceita até 1.000 tags news:news; acima disso, a orientação é dividir em sitemaps menores.
A data de publicação informada deve ser a original, de quando o artigo saiu no site do publisher, e não a hora em que ele foi adicionado ao sitemap.
O publisher mantém um news sitemap e o atualiza à medida que publica.
O rastreador consulta o sitemap em busca de URLs novas. Segundo a documentação, o Google News rastreia esses sitemaps na mesma frequência com que rastreia o resto do site.
Cada sitemap lista só artigos recentes e tem um limite de entradas; acima dele, a orientação é dividir em sitemaps menores.
Cada URL nova vira uma mensagem na fila, e o rastreador segue para a próxima.
O processador lê da fila e extrai título, texto e a data de publicação. A data deve ser a original do artigo, não a de entrada no sitemap.
O resultado é gravado no armazém de artigos.
03 · DUPLICATAS
Deduplicação por fingerprint
O artigo “Detecting Near-Duplicates for Web Crawling”, apresentado na conferência WWW de 2007, trata de documentos da web, não especificamente de notícias. Ele separa dois problemas: duplicatas exatas são fáceis de identificar com técnicas padrão de checksum; o mais difícil são os quase-duplicados, idênticos em conteúdo mas diferentes numa pequena parte do documento, como anúncios, contadores e timestamps.
A técnica central é o simhash, uma impressão digital (fingerprint) com a propriedade de que os fingerprints de quase-duplicados diferem em poucas posições de bit. Para calculá-lo, o documento vira um conjunto de características, cada uma com um peso, e esse conjunto é reduzido a um fingerprint de tamanho fixo.
| Técnica | Comportamento |
|---|---|
| Checksum padrão | Identifica com facilidade as duplicatas exatas. |
| SHA-1 ou MD5 | Para dois documentos que diferem num byte, gera hashes completamente diferentes. |
| simhash | Para esses mesmos documentos, gera hashes parecidos; a distância de Hamming é pequena. |
No experimento do artigo, para um repositório de 8B páginas, fingerprints de 64 bits e k igual a 3 foram considerados razoáveis. O critério é declarar dois documentos quase-duplicados quando seus fingerprints diferem em no máximo 3 bits, e k igual a 3 é razoável porque precisão e recall ficam perto de 0,75.
| Escolha de k | Efeito |
|---|---|
| k muito baixo | Deixa passar quase-duplicados (falsos negativos). |
| k muito alto | Marca pares incorretos como quase-duplicados (falsos positivos). |
O artigo também lembra que, na prática, a presença de quase-duplicata pode não virar um sim ou não para eliminar páginas; ela pode ser um de poucos componentes de pontuação.
O detector recebe da fila cada artigo recém-processado.
Ele converte o texto em um conjunto de características com pesos e reduz esse conjunto a um fingerprint de tamanho fixo. O paper descreve o passo para páginas da web.
Em seguida, consulta o índice: existe algum fingerprint conhecido que difira deste em no máximo k bits?
O método do paper constrói várias tabelas guardadas na memória principal de um conjunto de máquinas; a alternativa de sondar uma tabela ordenada com todas as variações possíveis exige um número proibitivo de buscas.
Se encontra um fingerprint parecido, o detector pode agrupar o artigo com o anterior; se não, grava um artigo novo e inclui o fingerprint no índice. O paper observa que, na prática, a presença de quase-duplicata pode ser só um componente de pontuação.
Há ainda outro tipo de semelhança. O artigo menciona o caso de, dada uma notícia, localizar notícias de outras fontes que relatam o mesmo evento, e diz que essa noção de similaridade é semântica, bem diferente da noção de duplicatas e quase-duplicatas.
04 · LEITURA DO FEED
Servir o feed com rapidez e disponibilidade
Servir o feed é o caminho de leitura. Entre as perguntas de aprofundamento que a página levanta estão a paginação, a latência, o frescor dos artigos, o tratamento de mídia e os picos de tráfego em notícias de última hora. O quadro resume cada uma.
| Tema | Pergunta levantada pela página |
|---|---|
| Paginação | Como melhorar a consistência e a eficiência da paginação? |
| Latência | Como obter baixa latência, abaixo de 200 ms, nas requisições de feed? |
| Frescor | Como garantir que os artigos apareçam nos feeds em até 30 minutos da publicação? |
| Mídia | Como tratar imagens e vídeos com eficiência? |
| Picos | Como tratar picos de tráfego em notícias de última hora? |
O leitor abre o aplicativo; o pedido do feed passa pela borda e chega à API do feed.
A API consulta primeiro o cache de feed, que guarda páginas já montadas.
Se o cache não tem a página, a API monta o feed a partir do armazém de artigos e preenche o cache.
Quando o cache oferece uma versão levemente antiga do feed, o desenho aceita entregá-la: a página prefere conteúdo um pouco desatualizado a nenhum conteúdo.
Ao rolar a lista, o aplicativo pede a próxima página à API, que repete o caminho.
Ao clicar num artigo, o leitor é redirecionado ao site do publisher para ler o conteúdo completo.
05 · LIMITES E EXTENSÕES
O que a fonte pública não cobre
A página lista dois aprofundamentos bônus: dar suporte a feeds por categoria, como esporte, política e tecnologia, e gerar feeds personalizados a partir do comportamento de leitura e das preferências de cada pessoa.
A parte pública da página mostra os requisitos e as perguntas de aprofundamento, mas termina antes do design final: o texto pede assinatura para continuar a leitura. Por isso este caso não traz números de capacidade nem uma arquitetura atribuída ao produto real.
Perguntas frequentes
O que é Agregador de notícias (Google News)?
Projeto de entrevista clássico. Pontos centrais: estruturas probabilísticas.
O que o design de Agregador de notícias (Google News) cobre?
Ele está organizado nestas seções: O que um agregador de notícias faz, Como os artigos chegam ao sistema, Deduplicação por fingerprint, Servir o feed com rapidez e disponibilidade e O que a fonte pública não cobre.
Quanto tempo leva Agregador de notícias (Google News) e qual é o nível?
Leva cerca de 14 minutos para ler e tem nível Pleno.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.