Comment mettriez-vous en œuvre Google Search? [fermé]

44

Supposons qu'on vous demande dans une interview "Comment implémenteriez-vous Google Search?" Comment répondriez-vous à une telle question? Certaines ressources peuvent expliquer la mise en œuvre de certains éléments de Google (BigTable, MapReduce, PageRank, ...), mais cela ne convient pas à une interview.

Quelle architecture générale utiliseriez-vous et comment expliqueriez-vous cela dans un intervalle de temps de 15 à 30 minutes?

Je commencerais par expliquer comment créer un moteur de recherche capable de gérer environ 100 000 documents, puis de l’étendre en partageant environ 50 millions de documents, puis peut-être un autre saut architectural / technique.

C'est la vue à 20 000 pieds. Ce que j'aimerais, ce sont les détails - comment vous répondriez cela dans une interview. Quelles structures de données utiliseriez-vous? De quels services / machines votre architecture est-elle composée? Quelle serait une latence de requête typique? Qu'en est-il des problèmes de basculement / fractionnement du cerveau? Etc...

ripper234
la source
1
C'est toute une question d'entrevue. Combien de détails recherchaient-ils?
Paddy
1
En fait, c’est une question que j’avais utilisée lorsque j’avais fait des interviews il ya quelque temps. La beauté, c’est que la quantité de détails que vous donnez dépend vraiment de vous, et du temps que votre intervieweur veut consacrer à cela.
ripper234
2
"Carte réduite! Question suivante s'il vous plaît." "Nous vous appellerons."
2
bonne question mais le type que vous pourriez passer des heures à répondre. Peut-être que je ferais une percée dans Google avec une clé USB
Je pense que c'est une bonne question, même si je la trouverais assez pénible. Je pensais tout récemment à la construction d'un algorithme pour "pondérer" les articles sur un site d'actualités (en théorie seulement, quelque chose qui me tient occupé sous la douche :) et j'avoue que même cette idée est assez difficile /complexe.

Réponses:

45

Considérez le méta-point: que recherche l'intervieweur?

Une question gigantesque comme celle-là ne vous cherche pas à perdre votre temps à mettre en œuvre un algorithme de type PageRank ou à effectuer une indexation distribuée. Concentrez-vous plutôt sur l’ image complète de ce que cela prendrait. On dirait que vous connaissez déjà toutes les grandes pièces (BigTable, PageRank, Map / Reduce). La question est donc, comment les connectez-vous réellement?

Voici mon coup de poignard.

Phase 1: Infrastructure d'indexation (consacrez 5 minutes à expliquer)

La première phase de mise en œuvre de Google (ou de tout moteur de recherche) consiste à créer un indexeur. Il s’agit du logiciel qui explore le corpus de données et produit les résultats dans une structure de données plus efficace pour la lecture.

Pour implémenter cela, considérons deux parties: un robot et un indexeur.

Le travail du robot d'indexation Web consiste à spider des liens de page Web et à les transférer dans un ensemble. L'étape la plus importante ici consiste à éviter de se faire prendre dans une boucle infinie ou sur un contenu généré à l'infini. Placez chacun de ces liens dans un fichier texte massif (pour le moment).

Deuxièmement, l'indexeur sera exécuté dans le cadre d'un travail de mappage / réduction. (Mappez une fonction sur chaque élément de l'entrée, puis réduisez les résultats en une seule chose.) L'indexeur prend un lien Web unique, récupère le site Web et le convertit en fichier d'index. (Discuté ensuite.) L’étape de réduction consistera simplement à regrouper tous ces fichiers d’index en une seule unité. (Plutôt que des millions de fichiers volants.) Étant donné que les étapes d'indexation peuvent être effectuées en parallèle, vous pouvez alimenter ce travail Mapper / Réduire sur un centre de données de taille arbitraire.

Phase 2: Spécificités des algorithmes d'indexation (consacrez 10 minutes à expliquer)

Une fois que vous avez indiqué comment vous allez traiter les pages Web, la partie suivante explique comment vous pouvez calculer des résultats significatifs. La réponse courte ici est «beaucoup plus de cartes / réductions», mais considérez le genre de choses que vous pouvez faire:

  • Pour chaque site Web, comptez le nombre de liens entrants. (Des pages plus fortement liées devraient être "meilleures".)
  • Pour chaque site Web, regardez comment le lien a été présenté. (Les liens dans un <h1> ou <b> devraient être plus importants que ceux enfouis dans un <h3>.)
  • Pour chaque site Web, regardez le nombre de liens sortants. (Personne n'aime les spammeurs.)
  • Pour chaque site Web, examinez les types de mots utilisés. Par exemple, "hash" et "table" signifient probablement que le site Web est lié à l'informatique. 'hash' et 'brownies' impliqueraient par contre que le site était quelque chose de très différent.

Malheureusement, je ne connais pas suffisamment les moyens d'analyser et de traiter les données pour être extrêmement utile. Mais l'idée générale est de disposer de moyens évolutifs pour analyser vos données .

Phase 3: Résultats des services (consacrez 10 minutes à expliquer)

La phase finale sert réellement les résultats. J'espère que vous avez partagé des informations intéressantes sur la manière d'analyser les données de pages Web, mais la question est de savoir comment l'interroger réellement. De manière anecdotique, 10% des requêtes de recherche Google effectuées chaque jour sont inédites. Cela signifie que vous ne pouvez pas mettre en cache les résultats précédents.

Vous ne pouvez pas avoir une seule "recherche" dans vos index Web, alors que tenteriez-vous? Comment regarderiez-vous les différents index? (Peut-être que la combinaison de résultats - le mot-clé 'stackoverflow' est peut-être apparu très fréquemment dans plusieurs index.)

Aussi, comment vous y prendreriez-vous quand même? Quelles sortes d'approches pouvez-vous utiliser pour lire rapidement des données à partir de quantités énormes d'informations? (N'hésitez pas à nommer ici votre base de données NoSQL préférée et / ou à vous interroger sur la BigTable de Google.) Même si vous disposez d'un index impressionnant et extrêmement précis, vous avez besoin d'un moyen de trouver rapidement des données. (Par exemple, recherchez le numéro de classement de 'stackoverflow.com' dans un fichier de 200 Go.)

Problèmes aléatoires (temps restant)

Une fois que vous avez couvert les "os" de votre moteur de recherche, n'hésitez pas à choisir n'importe quel sujet sur lequel vous êtes particulièrement bien informé.

  • Performance de la façade du site
  • Gestion du centre de données pour vos travaux de mappage / réduction
  • Améliorations du moteur de recherche des tests A / B
  • Intégration du volume / des tendances de recherche précédents dans l'indexation. (Par exemple, attendez-vous à ce que les charges du serveur frontal atteignent 9-5 et disparaissent au début de la matinée.)

Il y a évidemment plus de 15 minutes de matériel à discuter ici, mais j'espère que cela suffira pour vous aider à démarrer.

Chris Smith
la source
1
C’est une excellente réponse, mais j’ai l’impression que cela ne commence pas à résoudre les problèmes d’échelle avec la construction de Google. Je pense que la partie la plus difficile est celle de la réponse à la question des résultats au service et de la magie de Google. J'ai une idée de la façon de concevoir quelque chose comme ça, mais il est intéressant d'entendre les autres.
ripper234
J'ai posé cette question à Quora. Je pense que le public pourrait répondre à cette question. quora.com/…
ripper234
Regarde ma réponse.
Ripper234