Pular para o conteúdo

Design clássico · Pleno

Agregador de notícias (Google News)

Projeto de entrevista clássico. Pontos centrais: estruturas probabilísticas.

14 min de leitura · Conteúdo revisado em 23 de outubro de 2026

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.

  1. O publisher mantém um news sitemap e o atualiza à medida que publica.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publisheratualiza o sitemap
    CPRastreador
    QFila de artigos
    CPProcessador
    DBArmazém de artigos
  2. 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.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publisher
    CPRastreadorlê o sitemap
    QFila de artigos
    CPProcessador
    DBArmazém de artigos
  3. Cada sitemap lista só artigos recentes e tem um limite de entradas; acima dele, a orientação é dividir em sitemaps menores.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publishersitemaps menores
    CPRastreador
    QFila de artigos
    CPProcessador
    DBArmazém de artigos
  4. Cada URL nova vira uma mensagem na fila, e o rastreador segue para a próxima.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publisher
    CPRastreador
    QFila de artigosrecebe a mensagem
    CPProcessador
    DBArmazém de artigos
  5. 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.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publisher
    CPRastreador
    QFila de artigos
    CPProcessadorextrai a data original
    DBArmazém de artigos
  6. O resultado é gravado no armazém de artigos.

    Diagrama da arquitetura: Agregador: ingestão de artigos
    CPSite do publisher
    CPRastreador
    QFila de artigos
    CPProcessador
    DBArmazém de artigosgrava o artigo

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écnicaComportamento
Checksum padrãoIdentifica com facilidade as duplicatas exatas.
SHA-1 ou MD5Para dois documentos que diferem num byte, gera hashes completamente diferentes.
simhashPara 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 kEfeito
k muito baixoDeixa passar quase-duplicados (falsos negativos).
k muito altoMarca 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.

  1. O detector recebe da fila cada artigo recém-processado.

    Diagrama da arquitetura: Agregador: detecção de duplicatas
    QFila de artigos novos
    CPDetector de duplicatasum artigo por vez
    CHTabelas de fingerprints
    DBArmazém de artigos
  2. 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.

    Diagrama da arquitetura: Agregador: detecção de duplicatas
    QFila de artigos novos
    CPDetector de duplicatascalcula o fingerprint
    CHTabelas de fingerprints
    DBArmazém de artigos
  3. Em seguida, consulta o índice: existe algum fingerprint conhecido que difira deste em no máximo k bits?

    Diagrama da arquitetura: Agregador: detecção de duplicatas
    QFila de artigos novos
    CPDetector de duplicatas
    CHTabelas de fingerprintsbusca por proximidade
    DBArmazém de artigos
  4. 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.

    Diagrama da arquitetura: Agregador: detecção de duplicatas
    QFila de artigos novos
    CPDetector de duplicatas
    CHTabelas de fingerprintsvárias tabelas em memória
    DBArmazém de artigos
  5. 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.

    Diagrama da arquitetura: Agregador: detecção de duplicatas
    QFila de artigos novos
    CPDetector de duplicatas
    CHTabelas de fingerprints
    DBArmazém de artigosgrava ou agrupa

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.

TemaPergunta levantada pela página
PaginaçãoComo melhorar a consistência e a eficiência da paginação?
LatênciaComo obter baixa latência, abaixo de 200 ms, nas requisições de feed?
FrescorComo garantir que os artigos apareçam nos feeds em até 30 minutos da publicação?
MídiaComo tratar imagens e vídeos com eficiência?
PicosComo tratar picos de tráfego em notícias de última hora?
  1. O leitor abre o aplicativo; o pedido do feed passa pela borda e chega à API do feed.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitor
    EDGBorda
    CPAPI do feedmonta a página
    CHCache de feed
    DBArmazém de artigos
    CPSite do publisher
  2. A API consulta primeiro o cache de feed, que guarda páginas já montadas.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitor
    EDGBorda
    CPAPI do feed
    CHCache de feedtenta primeiro
    DBArmazém de artigos
    CPSite do publisher
  3. 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.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitor
    EDGBorda
    CPAPI do feed
    CHCache de feedguarda a página
    DBArmazém de artigosfonte dos artigos
    CPSite do publisher
  4. 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.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitor
    EDGBorda
    CPAPI do feed
    CHCache de feeddisponibilidade primeiro
    DBArmazém de artigos
    CPSite do publisher
  5. Ao rolar a lista, o aplicativo pede a próxima página à API, que repete o caminho.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitorrolagem contínua
    EDGBorda
    CPAPI do feed
    CHCache de feed
    DBArmazém de artigos
    CPSite do publisher
  6. Ao clicar num artigo, o leitor é redirecionado ao site do publisher para ler o conteúdo completo.

    Diagrama da arquitetura: Agregador: leitura do feed
    CLAplicativo do leitor
    EDGBorda
    CPAPI do feed
    CHCache de feed
    DBArmazém de artigos
    CPSite do publisherconteú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.