Comment Google peut-il être si rapide?

89

Quelles sont les technologies et les décisions de programmation qui permettent à Google de répondre si rapidement à une requête?

Chaque fois que je recherche quelque chose (l'une des plusieurs fois par jour), je suis toujours étonné de voir comment ils servent les résultats en près ou en moins d'une seconde. Quel type de configuration et d'algorithmes pourraient-ils avoir en place pour y parvenir?

Note latérale: C'est un peu écrasant de penser que même si je devais mettre une application de bureau et l'utiliser sur ma machine, ce ne serait probablement pas deux fois moins rapide que Google. Continuez à apprendre, dis-je.


Voici quelques-unes des bonnes réponses et des conseils fournis:

Jorge Ferreira
la source

Réponses:

47

La latence est détruite par les accès au disque. Il est donc raisonnable de croire que toutes les données utilisées pour répondre aux requêtes sont conservées en mémoire. Cela implique des milliers de serveurs, chacun répliquant l'un des nombreux fragments. Par conséquent, il est peu probable que le chemin critique de la recherche atteigne l'une de leurs technologies de systèmes distribués phares GFS, MapReduce ou BigTable. Ceux-ci seront utilisés pour traiter les résultats des robots d'exploration, grossièrement.

La chose pratique à propos de la recherche est qu'il n'est pas nécessaire d'avoir des résultats fortement cohérents ou des données complètement à jour, de sorte que Google n'est pas empêché de répondre à une requête car un résultat de recherche plus à jour est devenu disponible.

Une architecture possible est donc assez simple: les serveurs frontaux traitent la requête, la normalisent (éventuellement en supprimant les mots vides, etc.) puis la distribuent à n'importe quel sous-ensemble de répliques qui possède cette partie de l'espace de requête (une architecture alternative consiste à diviser le données par pages Web, de sorte qu'un de chaque jeu de réplicas doit être contacté pour chaque requête). De très nombreuses répliques sont probablement interrogées et les réponses les plus rapides l'emportent. Chaque réplica a un index mappant des requêtes (ou des termes de requête individuels) vers des documents qu'ils peuvent utiliser pour rechercher très rapidement des résultats en mémoire. Si des résultats différents proviennent de sources différentes, le serveur frontal peut les classer au fur et à mesure qu'il crache le html.

Notez que c'est probablement très différent de ce que Google fait réellement - ils auront conçu la vie de ce système afin qu'il puisse y avoir plus de caches dans des zones étranges, des index étranges et une sorte de schéma d'équilibrage de charge funky parmi d'autres différences possibles .

HenryR
la source
22

Un fait que j'ai toujours trouvé drôle, c'est que Google est en fait géré par la bioinformatique («ok, je trouve ça drôle parce que je suis un bioinf… truc). Laisse-moi expliquer.

La bioinformatique a dès le début eu le défi de rechercher très rapidement de petits textes dans des chaînes gigantesques. Pour nous, la «corde gigantesque» est bien sûr de l'ADN. Souvent, pas un ADN unique mais une base de données de plusieurs ADN de différentes espèces / individus. Les petits textes sont des protéines ou leur homologue génétique, un gène. La plupart des premiers travaux des biologistes computationnels se sont limités à trouver des homologies entre les gènes. Ceci est fait pour établir la fonction des gènes nouvellement trouvés en notant des similitudes avec des gènes déjà connus.

Maintenant, ces chaînes d'ADN deviennent vraiment très volumineuses et la recherche (avec perte!) Doit être effectuée de manière extrêmement efficace. La plupart de la théorie moderne de la recherche de chaînes a donc été développée dans le contexte de la biologie computationnelle.

Cependant, il y a assez longtemps, la recherche de texte conventionnelle était épuisée. Une nouvelle approche était nécessaire qui permettait de rechercher de grandes chaînes dans le temps sous-linéaire, c'est-à-dire sans regarder chaque caractère. On a découvert que cela pouvait être résolu en prétraitant la grande chaîne et en construisant une structure de données d'index spéciale dessus. De nombreuses structures de données de ce type ont été proposées. Chacun a ses forces et ses faiblesses mais il y en a un qui est particulièrement remarquable car il permet une recherche en temps constant. Maintenant, dans les ordres de grandeur dans lesquels Google opère, ce n'est plus strictement vrai car l'équilibrage de charge entre les serveurs, le prétraitement et d'autres éléments sophistiqués doivent être pris en compte.

Mais en substance, le soi-disant index q-gram permet une recherche en temps constant. Le seul inconvénient: la structure des données devient ridiculement grande. Essentiellement, pour permettre une recherche de chaînes avec jusqu'à q caractères (d'où le nom), il faut une table qui a un champ pour chaque combinaison possible de q lettres (c'est-à-dire q S , où S est la taille de l'alphabet , disons 36 (= 26 + 10)). De plus, il doit y avoir un champ pour chaque position de lettre dans la chaîne qui a été indexée (ou dans le cas de google, pour chaque site Web).

Pour atténuer la taille, Google utilisera probablement plusieurs indices (en fait, ils le font , pour offrir des services tels que la correction orthographique). Les plus hauts ne fonctionneront pas au niveau des caractères mais au niveau des mots. Cela réduit q mais cela rend S infiniment plus grand, ils devront donc utiliser des tables de hachage et de collision pour faire face au nombre infini de mots différents.

Au niveau suivant, ces mots hachés pointeront vers d'autres structures de données d'index qui, à leur tour, hacheront des caractères pointant vers des sites Web.

Pour faire court, ces structures de données d'index q -gram sont sans doute la partie la plus centrale de l'algorithme de recherche de Google. Malheureusement, il n'y a pas de bons articles non techniques expliquant le fonctionnement des indices q- gramme. La seule publication que je connaisse qui contienne une description du fonctionnement d'un tel index est… hélas, ma thèse de licence .

Konrad Rudolph
la source
4
J'ai été en bioinformatique pendant 5 ans, et les moteurs de recherche après cela - et les q-grammes ne sont pas aussi importants que vous le pensez. La structure de données fondamentale pour le type de recherche effectué par Google (à un niveau très, très basique) est l'index inversé.
SquareCog
Cela semble faux. Google fonctionne ou fonctionnait sur un index inversé. q-gram sera utile pour les phrases mais pas en général
Stefan Savev
@Stefan: Le même commentaire a déjà été fait par SquareCog - et je ne nie pas que les indices inversés jouent un rôle important (et probablement beaucoup plus important que les indices n-gramme). J'ai choisi cette technologie parce que les n-grammes sont une de mes structures de données pour animaux de compagnie, et je pense que le point clé - Google est rapide parce qu'il n'a pas vraiment besoin de «rechercher», il peut faire une recherche plus ou moins directe - dépend d'un tel index (nb: cela se fait probablement par hachage mais c'est toujours un index n-gramme). Que cet index se trouve également inversé est accessoire à mon propos (mais probablement pas pour Google ;-)).
Konrad Rudolph
4

Ils ont mis en œuvre de bons algorithmes distribués fonctionnant sur une grande quantité de matériel.

Anders Sandvig
la source
4

L'un des retards les plus importants est que les serveurs Web acheminent votre requête vers le serveur Web et la réponse. Cette latence est liée à la vitesse de la lumière, à laquelle même Google doit obéir. Cependant, ils ont des centres de données partout dans le monde. En conséquence, la distance moyenne à l'un d'eux est inférieure. Cela réduit la latence. Bien sûr, la différence est mesurée en millisecondes, mais il est important que la réponse arrive dans les 1000 millisecondes.

MSalters
la source
4

Tout le monde sait que c'est parce qu'ils utilisent des pigeons , bien sûr!

Oh ouais, ça et Mapreduce.

HanClinto
la source
S'ils font travailler des rats pour eux aussi, deux des créatures les plus inutiles et les plus ennuyeuses auraient un travail ...
Xn0vv3r
Je ris beaucoup avec celui-ci haha
victrnava
3

Ils ont à peu près une copie locale d'Internet en cache sur des milliers de PC sur des systèmes de fichiers personnalisés.

Richard Walton
la source
Frapper un système de fichiers basé sur un disque coûterait beaucoup en termes de latence (Amazon a trouvé cela avec Dynamo et a sacrifié une certaine résilience pour cela); Je soupçonne que tout ce qui se trouve sur le chemin critique est conservé en mémoire.
HenryR
3

Google embauche le meilleur des meilleurs. Certaines des personnes les plus intelligentes de l'informatique travaillent chez google. Ils ont pratiquement une somme infinie à consacrer au matériel et aux ingénieurs.

Ils utilisent des mécanismes de stockage hautement optimisés pour les tâches qu'ils exécutent.

Ils ont des fermes de serveurs géographiquement localisées.

Matthew Watson
la source
3

Une tentative de liste généralisée (qui ne dépend pas de votre accès aux outils internes de Google):

  1. Mettre en parallèle les demandes (par exemple, diviser une seule demande en ensembles plus petits)
  2. Async (rendre autant asynchrone que possible, par exemple ne bloquera pas la demande de l'utilisateur)
  3. Mémoire / cache (les E / S disque sont lentes, conservez autant que possible en mémoire)
  4. Pré-calcul (faites autant de travail que possible à l'avance, n'attendez pas qu'un utilisateur demande des données / traitement)
  5. Prenez soin de votre HTML frontal (voir Yslow et ses amis)
Jilles
la source
1

Matériel.

Beaucoup de matériel. Ils utilisent des grappes massives de PC de base comme leur ferme de serveurs.

TraumaPoney
la source
Juste pour clarifier «massif»: des centaines de milliers de serveurs. Je suppose qu'aucun en dehors de Google ne connaît le nombre réel et il doit changer tout le temps.
Sergio Acosta
1

TraumaPony a raison. Des tonnes de serveurs et une architecture intelligente pour l'équilibrage de charge / la mise en cache et voilà, vous pouvez exécuter une requête en moins d'une seconde. Il y avait beaucoup d'articles sur le net décrivant l'architecture des services Google. Je suis sûr que vous pouvez les trouver via Google :)

aku
la source
0

Et des algorithmes qui peuvent exploiter cette puissance matérielle. Comme mapreduce par exemple.

Vinko Vrsalovic
la source
MapReduce n'est pas utilisé pour répondre aux requêtes.
MSalters le
MapReduce fonctionne sur un grand cluster de machines et est hautement évolutif: un calcul MapReduce typique traite de nombreux téraoctets de données sur des milliers de machines. Des centaines de programmes MapReduce ont été mis en œuvre et plus d'un millier de tâches MapReduce sont exécutées quotidiennement sur les clusters de Google
Vinko Vrsalovic
MapReduce est presque certainement utilisé pour indexer de manière asynchrone les données des robots d'exploration. Je serais très surpris s'il était sur le chemin critique de la recherche. Lancer un travail MapReduce tuerait vraiment la latence.
HenryR
Henry - ils pourraient l'utiliser pour l'itinéraire dans les directions / cartes. Mais oui, au cas général. Vous ne voulez pas de calcul hardcore pour répondre à une requête utilisateur régulière.
SquareCog
0

Si vous souhaitez plus de détails sur le fonctionnement du cluster Google, je vous suggère cette implémentation open source de leur HDFS .

Il est basé sur Mapreduce par google.

yann.kmm
la source
HDFS est un système de fichiers distribué. Le clone mapreduce s'appelle Hadoop et peut s'exécuter sur HDFS ou sur votre système de fichiers local.
SquareCog
0
  1. Stockage, traitement et récupération de données en plusieurs étapes

  2. Distribution efficace (100 sur 1000 de machines) des tâches ci-dessus

  3. Bon cadre pour stocker les données brutes et les résultats traités

  4. Bon cadre pour récupérer les résultats

Comment exactement tout cela est fait est résumé par tous les liens que vous avez dans le résumé de la question

vie informatique
la source