Como você implementaria a Pesquisa do Google? [fechadas]


44

Suponhamos que você fosse questionado em uma entrevista "Como você implementaria a Pesquisa do Google?" Como você responderia a essa pergunta? Pode haver recursos por aí que explicam como algumas partes do Google são implementadas (BigTable, MapReduce, PageRank, ...), mas isso não se encaixa exatamente em uma entrevista.

Que arquitetura geral você usaria e como explicaria isso em um período de 15 a 30 minutos?

Começaria explicando como criar um mecanismo de pesquisa que lida com ~ 100k documentos, depois expanda isso via sharding para cerca de 50 milhões de documentos, talvez outro salto técnico / arquitetural.

Esta é a visão de 20.000 pés. O que eu gostaria são os detalhes - como você realmente responderia isso em uma entrevista. Quais estruturas de dados você usaria. De quais serviços / máquinas é sua arquitetura composta. Qual seria uma latência de consulta típica? E quanto a failover / problemas de cérebro dividido? Etc ...


1
Essa é uma pergunta e tanto de entrevista. Quantos detalhes eles estavam procurando?
Paddy

1
Na verdade, essa é uma pergunta que eu usei quando fiz algumas entrevistas há algum tempo. O bom é que a quantidade de detalhes que você dá depende de você e do tempo que o entrevistador deseja gastar com isso.
precisa saber é o seguinte

2
"Mapa reduzido! Próxima pergunta, por favor." "Nós ligamos para você."

2
boa pergunta, mas o tipo que você pode passar horas respondendo. Talvez eu iria quebrar em google drive flash witha

Penso que esta é uma boa pergunta, embora a ache bastante esmagadora. Recentemente, estive pensando em como criar um algoritmo para "ponderar" artigos em um site de notícias (apenas em teoria, algo para me manter ocupado no chuveiro :) e admito que até essa ideia seja bastante difícil /complexo.

Respostas:


45

Considere o meta-ponto: o que o entrevistador está procurando?

Uma pergunta gigantesca como essa não está procurando você desperdiçar seu tempo no âmago da questão da implementação de um algoritmo do tipo PageRank ou como fazer indexação distribuída. Em vez disso, concentre-se na imagem completa do que seria necessário. Parece que você já conhece todas as peças grandes (BigTable, PageRank, Map / Reduce). Então a questão é: como você realmente os une?

Aqui está minha facada.

Fase 1: Infraestrutura de indexação (gaste 5 minutos explicando)

A primeira fase da implementação do Google (ou de qualquer mecanismo de pesquisa) é criar um indexador. Este é o software que rastreia o corpus de dados e produz os resultados em uma estrutura de dados mais eficiente para fazer leituras.

Para implementar isso, considere duas partes: um rastreador e um indexador.

O trabalho do rastreador da Web é criar links para páginas da Web e colocá-los em um conjunto. O passo mais importante aqui é evitar ser pego em loop infinito ou em conteúdo gerado infinitamente. Coloque cada um desses links em um grande arquivo de texto (por enquanto).

Segundo, o indexador será executado como parte de um trabalho de Mapa / Redução. (Mapeie uma função para cada item da entrada e reduza os resultados em uma única "coisa".) O indexador pegará um único link da Web, recuperará o site e o converterá em um arquivo de índice. (Discutido a seguir.) A etapa de redução simplesmente agregará todos esses arquivos de índice em uma única unidade. (Em vez de milhões de arquivos soltos.) Como as etapas de indexação podem ser realizadas em paralelo, você pode cultivar esse trabalho de Mapear / Reduzir em um data center arbitrariamente grande.

Fase 2: Específicos dos Algoritmos de Indexação (dedique 10 minutos a explicar)

Depois de declarar como você processará as páginas da web, a próxima parte explicará como você pode calcular resultados significativos. A resposta curta aqui é 'muito mais Mapa / Reduz', mas considere o tipo de coisa que você pode fazer:

  • Para cada site, conte o número de links recebidos. (Páginas com links mais pesados ​​devem ser 'melhores'.)
  • Para cada site, veja como o link foi apresentado. (Os links em um <h1> ou <b> devem ser mais importantes do que os enterrados em um <h3>.)
  • Para cada site, verifique o número de links externos. (Ninguém gosta de spammers.)
  • Para cada site, observe os tipos de palavras usadas. Por exemplo, 'hash' e 'table' provavelmente significam que o site está relacionado à Ciência da Computação. 'hash' e 'brownies', por outro lado, implicariam que o site era sobre algo muito diferente.

Infelizmente, não sei o suficiente sobre as formas de analisar e processar os dados para serem super úteis. Mas a ideia geral são maneiras escalonáveis ​​de analisar seus dados .

Fase 3: Resultados da publicação (dedique 10 minutos a explicar)

A fase final está realmente servindo os resultados. Espero que você tenha compartilhado algumas idéias interessantes sobre como analisar dados de páginas da web, mas a questão é como você realmente os consulta? Anedoticamente, 10% das consultas de pesquisa do Google por dia nunca foram vistas antes. Isso significa que você não pode armazenar em cache os resultados anteriores.

Você não pode ter uma única 'pesquisa' nos seus índices da Web; então, o que você tentaria? Como você olharia em diferentes índices? (Talvez combinando resultados - talvez a palavra-chave 'stackoverflow' tenha aparecido muito em vários índices.)

Além disso, como você procuraria assim? Que tipo de abordagem você pode usar para ler dados de grandes quantidades de informações rapidamente? (Sinta-se à vontade para nomear seu banco de dados NoSQL favorito aqui e / ou analisar o que é o BigTable do Google.) Mesmo se você tiver um índice impressionante e altamente preciso, precisará de uma maneira de encontrar dados nele rapidamente. (Por exemplo, encontre o número de classificação para 'stackoverflow.com' dentro de um arquivo de 200 GB.)

Problemas aleatórios (tempo restante)

Depois de cobrir os "ossos" do seu mecanismo de pesquisa, sinta-se à vontade para comentar sobre qualquer tópico individual sobre o qual você tenha conhecimento especial.

  • Desempenho do front-end do site
  • Gerenciando o datacenter para seus trabalhos de Mapa / Redução
  • Melhorias no mecanismo de pesquisa de testes A / B
  • Integração de tendências / volume de pesquisa anterior à indexação. (Por exemplo, esperando que as cargas do servidor front-end aumentem 9-5 e desapareçam no início da manhã.)

Obviamente, há mais de 15 minutos de material para discutir aqui, mas espero que seja o suficiente para você começar.


1
Essa é uma ótima resposta, mas acho que ela não começa a resolver os problemas de escala na criação do Google. Acho que a parte mais desafiadora está na exibição de resultados, parte da sua resposta e onde está a maior parte da mágica do Google. Eu tenho alguma idéia sobre como arquitetar algo assim, mas sou interessante em ouvir outras pessoas.
Ripper234

Eu perguntei isso no Quora - acho que pode ter o público para responder a essa pergunta. Quora.com/…
ripper234

Confira minha resposta.
Ripper234

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.