89 votes

Comment Google peut-il être si rapide ?

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

Chaque fois que je cherche quelque chose (plusieurs fois par jour), cela m'étonne toujours comment ils servent les résultats en moins d'une seconde. Quel genre de configuration et d'algorithmes pourraient-ils avoir en place pour accomplir cela?

Note latérale: Il est un peu accablant de penser que même si je devais mettre une application de bureau en place et l'utiliser sur mon ordinateur, cela ne serait probablement pas la moitié aussi rapide que Google. Je dis continue d'apprendre.


Voici quelques-unes des excellentes réponses et indications fournies:

47voto

HenryR Points 3026

La latence est tuée 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'une des nombreuses parties. Par conséquent, le chemin critique pour la recherche est peu susceptible d'atteindre l'une de leurs technologies phares systèmes distribués GFS, MapReduce ou BigTable. Ceux-ci seront utilisés pour traiter les résultats du crawler, de manière grossière.

La chose pratique concernant 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, Google n'est donc pas empêché de répondre à une requête parce qu'un résultat de recherche plus récent est disponible.

Une architecture possible est donc assez simple : des serveurs frontaux traitent la requête, la normalisant (peut-être en supprimant les mots vides, etc.) puis la distribuent à tout sous-ensemble de répliques possédant cette partie de l'espace de requête (une architecture alternative consiste à diviser les données par pages Web, de sorte qu'une de chaque ensemble de répliques doit être contactée pour chaque requête). De nombreuses répliques sont probablement interrogées et les réponses les plus rapides l'emportent. Chaque réplique dispose d'un index qui associe les requêtes (ou les termes de requête individuels) aux documents, ce qui leur permet de rechercher rapidement les résultats en mémoire. Si des résultats différents proviennent de différentes sources, le serveur frontal peut les classer au fur et à mesure qu'il génère le html.

À noter que cela est probablement très différent de ce que Google fait réellement - ils auront optimisé ce système de manière intensive, il peut donc y avoir plus de caches dans des zones étranges, des index étranges et un certain type de schéma de répartition de charge funky, parmi d'autres différences possibles.

26voto

Vasil Points 11172

C'est un peu trop pour le mettre dans une seule réponse. http://en.wikipedia.org/wiki/Google_platform

22voto

Konrad Rudolph Points 231505

Un fait que j'ai toujours trouvé amusant est que Google est en fait dirigé par la bioinformatique (ok, je trouve ça drôle parce que je suis une sorte de bioinf…truc). Laissez-moi vous expliquer.

La bioinformatique a très tôt été confrontée au défi de rechercher de petits textes dans d'immenses chaînes de caractères de manière très rapide. Pour nous, la "chaîne de caractères immense" est bien sûr l'ADN. Souvent pas un seul ADN 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 du travail initial des biologistes computationnels était limité à trouver des homologies entre les gènes. Cela est fait pour établir la fonction des gènes nouvellement découverts en notant les similitudes avec des gènes déjà connus.

Maintenant, ces chaînes d'ADN deviennent vraiment très grandes et (perte de données!) la recherche doit être faite de manière extrêmement efficace. La majeure partie 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 quelque temps, la recherche de texte conventionnelle avait atteint ses limites. Une nouvelle approche était nécessaire pour permettre la recherche de grandes chaînes en temps sublinéaire, c'est-à-dire sans regarder chaque caractère individuel. Il a été 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 différentes ont été proposées. Chacune a ses forces et ses faiblesses, mais il y en a une qui est particulièrement remarquable car elle permet une recherche en temps constant. Maintenant, dans les ordres de grandeur dans lesquels Google opère, cela 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 essence, le prétendu index q-gram permet une recherche en temps constant. Le seul inconvénient : la structure de données devient ridiculement grande. Fondamentalement, pour permettre une recherche de chaînes comportant 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 le poids de la taille, Google utilisera probablement plusieurs indices (en fait, ils le font, pour offrir des services comme la correction orthographique). Les premiers ne fonctionneront pas au niveau des caractères, mais au niveau des mots. Cela réduit q mais cela rend S infiniment plus grand, donc ils devront utiliser le hachage et les tables de collision pour faire face au nombre infini de mots différents.

À un niveau inférieur, ces mots hachés pointeront vers d'autres structures de données d'index qui, à leur tour, hacheront les 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'existe pas de bons documents non techniques expliquant le fonctionnement des indices q-gram. La seule publication que je connaisse qui contient une description de la façon dont un tel index fonctionne est...hélas, mon mémoire de licence.

5voto

smink Points 39640

Voici quelques-unes des grandes réponses et points fournis :

4voto

Anders Sandvig Points 7964

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X