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.