Quelles sont les technologies et les décisions de programmation qui permettent à Google de servir une requête si rapidement?
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 moins d'une seconde. Quelle sorte de configuration et d'algorithmes pourraient-ils avoir en place pour accomplir cela?
Note latérale: C'est une sorte de pensée écrasante que même si je devais mettre une application de bureau et l'utiliser sur ma machine ne serait probablement pas à moitié aussi rapide comme Google. Continuez à apprendre, dis-je.
Voici quelques-unes des bonnes réponses et des conseils fournis:
Voici quelques-unes des bonnes réponses et des conseils fournis:
La latence est supprimé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 reproduisant 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 phares de systèmes distribués GFS, MapReduce ou BigTable. Ceux-ci seront utilisés pour traiter grossièrement les résultats du robot.
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, donc 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 à tout 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 que chaque jeu de réplicas doit être contacté pour chaque requête). Beaucoup, beaucoup de répliques sont probablement interrogées et les réponses les plus rapides gagnent. Chaque réplique possède un index mappant les requêtes (ou termes de requête individuels) vers des documents qu'ils peuvent utiliser pour rechercher des résultats en mémoire très rapidement. Si différents résultats reviennent de différentes sources, le serveur frontal peut les classer au fur et à mesure qu'il crache le code HTML.
Notez que cela 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 génial parmi d'autres différences possibles .
C'est un peu trop pour le mettre dans une seule réponse. http://en.wikipedia.org/wiki/Google_platform
Un fait que j'ai toujours trouvé drôle est que Google est en fait géré par la bioinformatique ('kay, je trouve ça drôle parce que je suis un bioinf… truc). Laissez-moi expliquer.
La bioinformatique avait très tôt le défi de rechercher très rapidement de petits textes dans des chaînes gigantesques. Pour nous, la "chaîne gigantesque" est bien sûr de 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 équivalent génétique, un gène. La plupart des premiers travaux de 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 les similitudes avec les gènes qui sont déjà connus.
Maintenant, ces chaînes d'ADN deviennent vraiment très grandes et la recherche (avec perte!) Doit être effectuée 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 était épuisée. Une nouvelle approche était nécessaire qui permettait de rechercher de grandes chaînes en temps sublinéaire, c'est-à-dire sans regarder chaque caractère. Il a été découvert que cela peut ê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. Chacun 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, ce n'est plus strictement vrai, car l'équilibrage de la charge sur les serveurs, le prétraitement et d'autres éléments sophistiqués doivent être pris en compte.
Mais dans son essence, le soi-disant indice q-gramme 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 nécessite 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 comme la correction d'orthographe). Les plus hauts ne fonctionneront pas au niveau du personnage mais au niveau de Word à la place. Cela réduit q mais cela fait [~ # ~] s [~ # ~] infiniment plus grand donc ils devront 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 comment q - les indices de gramme fonctionnent. La seule publication que je connaisse qui contienne une description du fonctionnement d'un tel index est… hélas, ma thèse de baccalauréat .
Ils ont mis en œuvre de bons algorithmes distribués fonctionnant sur une grande quantité de matériel.
L'un des retards les plus importants est que les serveurs Web envoient votre requête au 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 plus faible. Cela réduit la latence. Bien sûr, la différence est mesurée en millisecondes, mais cela importe si la réponse doit arriver dans les 1000 millisecondes.
Tout le monde sait que c'est parce que ils utilisent des pigeons , bien sûr!
Oh ouais, ça et Mapreduce.
Ils ont à peu près une copie locale d'Internet mise en cache sur des milliers de PC sur des systèmes de fichiers personnalisés.
Google embauche le meilleur des meilleurs. Certaines des personnes les plus intelligentes en informatique travaillent chez Google. Ils ont pratiquement de l'argent à dépenser pour le matériel et les ingénieurs.
Ils utilisent des mécanismes de stockage hautement optimisés pour les tâches qu'ils effectuent.
Ils ont des batteries de serveurs géographiquement situées.
Une tentative de liste généralisée (cela ne dépend pas de votre accès aux outils internes de Google):
Vous pouvez trouver dans la page d'accueil de recherche Google quelques conseils sur les articles de recherche rédigés par certains des gars de Google. Vous devriez commencer par l'explication du système de fichiers Google et du algorithme de carte/réduction pour essayer de comprendre ce qui se passe derrière les pages google.
Ce lien est également très informatif Dans les coulisses d'une requête Google
Matériel.
Beaucoup, beaucoup de matériel. Ils utilisent des grappes massives de PC de base comme batterie de serveurs.
TraumaPony a raison. Des tonnes de serveurs et une architecture intelligente pour l'équilibrage de charge/la mise en cache et le tour est joué, 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 :)
HenryR a probablement raison.
Map Reduce ne joue pas de rôle pour la recherche elle-même, mais n'est utilisé que pour l'indexation. Vérifiez cette interview vidéo avec les inventeurs de Map Reduce .
Une raison supplémentaire semble être qu'ils trichent sur l'algorithme de démarrage lent TCP.
http://blog.benstrong.com/2010/11/google-and-Microsoft-cheat-on-slow.html
Et algorithmes qui peuvent exploiter cette puissance matérielle. Comme mapreduce par exemple.
Stockage, traitement et récupération de données en plusieurs étapes
Distribution EFFICACE (100 de 1000 de machines) des tâches ci-dessus
Bon cadre pour stocker les données brutes et les résultats traités
Bon cadre pour récupérer les résultats
Comment exactement tout cela est résumé par tous les liens que vous avez dans le résumé de la question