Wie kann Google so schnell sein?


89

Welche Technologien und Programmierentscheidungen ermöglichen es Google, eine Anfrage so schnell zu bearbeiten?

Jedes Mal, wenn ich etwas suche (eines der mehreren Male am Tag), wundert es mich immer wieder, wie sie die Ergebnisse in nahezu oder weniger als einer Sekunde liefern. Welche Art von Konfiguration und Algorithmen könnten sie haben, um dies zu erreichen?

Randnotiz: Es ist überwältigend zu denken, dass selbst wenn ich eine Desktop-Anwendung auf meinem Computer verwenden würde, sie wahrscheinlich nicht halb so schnell wäre wie Google. Lerne weiter, sage ich.


Hier sind einige der großartigen Antworten und Hinweise:

Antworten:


47

Die Latenz wird durch Festplattenzugriffe verringert. Daher ist es vernünftig zu glauben, dass alle Daten, die zur Beantwortung von Anfragen verwendet werden, im Speicher bleiben. Dies impliziert Tausende von Servern, von denen jeder einen von vielen Shards repliziert. Daher ist es unwahrscheinlich, dass der kritische Pfad für die Suche eine der wichtigsten verteilten Systemtechnologien GFS, MapReduce oder BigTable trifft. Diese werden verwendet, um Crawler-Ergebnisse grob zu verarbeiten.

Das Praktische an der Suche ist, dass weder stark konsistente Ergebnisse noch vollständig aktuelle Daten erforderlich sind, sodass Google nicht daran gehindert wird, auf eine Anfrage zu antworten, da ein aktuelleres Suchergebnis verfügbar geworden ist.

Eine mögliche Architektur ist also recht einfach: Front-End-Server verarbeiten die Abfrage, normalisieren sie (möglicherweise durch Entfernen von Stoppwörtern usw.) und verteilen sie dann an eine beliebige Teilmenge von Replikaten, die diesen Teil des Abfragebereichs besitzt (eine alternative Architektur besteht darin, die Abfrage aufzuteilen Daten von Webseiten, so dass bei jeder Abfrage einer von jedem Replikatsatz kontaktiert werden muss). Viele, viele Replikate werden wahrscheinlich abgefragt, und die schnellsten Antworten gewinnen. Jedes Replikat verfügt über eine Indexzuordnung von Abfragen (oder einzelnen Abfragebegriffen) zu Dokumenten, mit denen die Ergebnisse sehr schnell im Speicher abgerufen werden können. Wenn unterschiedliche Ergebnisse aus unterschiedlichen Quellen stammen, kann der Front-End-Server sie beim Ausspucken des HTML-Codes bewerten.

Beachten Sie, dass dies wahrscheinlich ein großer Unterschied zu dem ist, was Google tatsächlich tut - sie haben das Leben aus diesem System heraus entwickelt, so dass es unter anderem mehr Caches in seltsamen Bereichen, seltsame Indizes und eine Art funky Lastausgleichsschema geben kann .



22

Eine Tatsache, die ich immer als lustig empfunden habe, ist, dass Google tatsächlich von Bioinformatik betrieben wird ('Kay, ich finde das lustig, weil ich ein Bioinf… Ding bin). Lassen Sie mich erklären.

Die Bioinformatik hatte schon früh die Herausforderung, sehr schnell nach kleinen Texten in gigantischen Strings zu suchen. Für uns ist die „gigantische Saite“ natürlich DNA. Oft keine einzelne DNA, sondern eine Datenbank mit mehreren DNAs verschiedener Arten / Individuen. Die kleinen Texte sind Proteine ​​oder ihr genetisches Gegenstück, ein Gen. Die meisten ersten Arbeiten von Computerbiologen beschränkten sich darauf, Homologien zwischen Genen zu finden. Dies geschieht, um die Funktion neu gefundener Gene festzustellen, indem Ähnlichkeiten mit bereits bekannten Genen festgestellt werden.

Jetzt werden diese DNA-Strings tatsächlich sehr groß und die (verlustbehaftete!) Suche muss äußerst effizient durchgeführt werden. Der größte Teil der modernen Theorie der String-Suche wurde daher im Kontext der Computerbiologie entwickelt.

Vor einiger Zeit war die konventionelle Textsuche jedoch erschöpft. Es war ein neuer Ansatz erforderlich, der es ermöglichte, große Zeichenfolgen in sublinearer Zeit zu durchsuchen, dh ohne jedes einzelne Zeichen zu betrachten. Es wurde festgestellt, dass dies gelöst werden kann, indem die große Zeichenfolge vorverarbeitet und eine spezielle Indexdatenstruktur darüber erstellt wird. Es wurden viele verschiedene solcher Datenstrukturen vorgeschlagen. Jeder hat seine Stärken und Schwächen, aber es gibt eine, die besonders bemerkenswert ist, weil sie eine Suche in konstanter Zeit ermöglicht. In den Größenordnungen, in denen Google tätig ist, ist dies nicht mehr unbedingt der Fall, da der Lastausgleich zwischen Servern, die Vorverarbeitung und einige andere anspruchsvolle Dinge berücksichtigt werden müssen.

Im Wesentlichen ermöglicht der sogenannte Q-Gramm-Index eine Suche in konstanter Zeit. Einziger Nachteil: Die Datenstruktur wird lächerlich groß. Um eine Suche nach Zeichenfolgen mit bis zu q Zeichen (daher der Name) zu ermöglichen, ist im Wesentlichen eine Tabelle erforderlich, die ein Feld für jede mögliche Kombination von q Buchstaben enthält ( dh q S , wobei S die Größe des Alphabets ist sagen wir 36 (= 26 + 10)). Außerdem muss für jede Buchstabenposition in der indizierten Zeichenfolge ein Feld vorhanden sein (oder im Fall von Google für jede Website).

Um die schiere Größe zu mildern, Google wird wahrscheinlich mehrere Indizes verwenden (in der Tat, sie tun , zu bieten Dienstleistungen wie Rechtschreibkorrektur). Die obersten funktionieren nicht auf Zeichenebene, sondern auf Wortebene. Dies reduziert q, aber es macht S unendlich größer, so dass sie Hashing- und Kollisionstabellen verwenden müssen, um mit der unendlichen Anzahl verschiedener Wörter fertig zu werden.

Auf der nächsten Ebene verweisen diese Hash-Wörter auf andere Indexdatenstrukturen, die wiederum Hash-Zeichen auf Websites verweisen.

Kurz gesagt, diese Q- Gramm-Indexdatenstrukturen sind wohl der zentralste Teil des Google-Suchalgorithmus. Leider gibt es keine guten nichttechnischen Dokumente, die erklären, wie q- Gramm-Indizes funktionieren. Die einzige Veröffentlichung, die ich kenne und die eine Beschreibung der Funktionsweise eines solchen Index enthält, ist… leider meine Bachelorarbeit .


4
Ich war 5 Jahre lang in der Bioinformatik und danach in Suchmaschinen - und Q-Gramme sind nicht so wichtig, wie Sie denken. Die grundlegende Datenstruktur für die Art der Suche, die Google durchführt (auf einer sehr, sehr einfachen Ebene), ist der invertierte Index.
SquareCog

Das scheint falsch. Google läuft oder lief auf einem invertierten Index. q-Gramm wird für Phrasen nützlich sein, aber nicht allgemein
Stefan Savev

@Stefan: Der gleiche Kommentar wurde bereits von SquareCog abgegeben - und ich bestreite nicht, dass invertierte Indizes eine große Rolle spielen (und wahrscheinlich viel größer als n-Gramm-Indizes). Ich habe diese eine Technologie ausgewählt, weil n-Gramm eine meiner Haustierdatenstrukturen sind, und ich denke, die wichtigste Erkenntnis: Google ist schnell, weil es nicht wirklich "suchen" muss, sondern mehr oder weniger direkt nachschlagen kann. hängt von einem solchen Index ab (nb: Dies geschieht wahrscheinlich über Hashing, aber dies ist immer noch ein n-Gramm-Index). Dass dieser Index auch invertiert ist, ist mir ein Rätsel (allerdings wahrscheinlich nicht für Google ;-)).
Konrad Rudolph


4

Sie haben gute, verteilte Algorithmen implementiert, die auf einer großen Menge an Hardware ausgeführt werden.


4

Eine der wichtigsten Verzögerungen ist, dass Webserver Ihre Anfrage an den Webserver senden und die Antwort zurückgeben. Diese Latenz ist an die Lichtgeschwindigkeit gebunden, die auch Google einhalten muss. Sie haben jedoch Rechenzentren auf der ganzen Welt. Infolgedessen ist der durchschnittliche Abstand zu einem von ihnen geringer. Dies hält die Latenz niedrig. Sicher, die Differenz wird in Millisekunden gemessen, aber es ist wichtig, ob die Antwort innerhalb von 1000 Millisekunden eintreffen muss.


4

Jeder weiß, dass es daran liegt, dass sie natürlich Tauben benutzen !

Oh ja, das und Mapreduce.


Wenn sie Ratten dazu bringen, auch für sie zu arbeiten, hätten zwei der nutzlosesten und nervigsten Kreaturen einen Job ...
Xn0vv3r

Ich lache viel mit diesem haha
victrnava

3

Sie haben so ziemlich eine lokale Kopie des Internets, die auf Tausenden von PCs in benutzerdefinierten Dateisystemen zwischengespeichert ist.


Das Aufrufen eines festplattenbasierten Dateisystems würde viel Latenz kosten (Amazon hat dies bei Dynamo festgestellt und dafür eine gewisse Ausfallsicherheit geopfert). Ich vermute, dass alles auf dem kritischen Pfad im Gedächtnis bleibt.
HenryR

3

Google stellt die Besten der Besten ein. Einige der klügsten IT-Mitarbeiter arbeiten bei Google. Sie haben praktisch unendlich viel Geld, um auf Hardware und Ingenieure zu werfen.

Sie verwenden hochoptimierte Speichermechanismen für die Aufgaben, die sie ausführen.

Sie haben geografisch lokalisierte Serverfarmen.


3

Ein Versuch, eine allgemeine Liste zu erstellen (dies hängt nicht davon ab, ob Sie Zugriff auf die internen Tools von Google haben):

  1. Parellelisieren von Anforderungen (z. B. Aufteilen einer einzelnen Anforderung in kleinere Gruppen)
  2. Asynchron (so asynchron wie möglich machen, z. B. die Benutzeranforderung nicht blockieren)
  3. Speicher / Cache (Festplatten-E / A ist langsam, so viel wie möglich im Speicher behalten)
  4. Vorberechnung (Machen Sie so viel Arbeit wie möglich vorher, warten Sie nicht, bis ein Benutzer nach Daten / Verarbeitung fragt)
  5. Kümmere dich um dein Front-End-HTML (siehe Yslow und Freunde)



1

Hardware.

Viele, viele Hardware. Sie verwenden massive Cluster von Standard-PCs als Serverfarm.


Nur um "massiv" zu verdeutlichen: Hunderttausende von Servern. Ich denke, niemand außerhalb von Google kennt die tatsächliche Nummer und sie muss sich ständig ändern.
Sergio Acosta

1

TraumaPony ist richtig. Tonnenweise Server und intelligente Architektur für Load Balancing / Caching und Voila können Sie Abfragen in weniger als 1 Sekunde ausführen. Es gab viele Artikel im Internet, die die Architektur von Google Services beschrieben. Ich bin sicher, Sie können sie über Google finden :)




0

Und Algorithmen , die diese Hardware-Leistung nutzen können. Wie zum Beispiel mapreduce .


MapReduce wird nicht zur Beantwortung von Anfragen verwendet.
MSalters

MapReduce läuft auf einem großen Cluster von Computern und ist hoch skalierbar: Eine typische MapReduce-Berechnung verarbeitet viele Terabyte Daten auf Tausenden von Computern. Hunderte von MapReduce-Programmen wurden implementiert und mehr als tausend MapReduce-Jobs werden täglich in Googles Clustern ausgeführt
Vinko Vrsalovic,

MapReduce wird mit ziemlicher Sicherheit zum asynchronen Indizieren von Crawlerdaten verwendet. Ich wäre sehr überrascht, wenn es auf dem kritischen Pfad für die Suche wäre. Das Auslösen eines MapReduce-Jobs würde die Latenz wirklich verringern.
HenryR

Henry - sie könnten es zum Routen in Richtungen / Karten verwenden. Aber ja, zum allgemeinen Fall. Sie möchten keine Hardcore-Berechnung durchführen, um auf eine reguläre Benutzeranfrage zu antworten.
SquareCog

0

Wenn Sie an weiteren Details zur Funktionsweise des Google-Clusters interessiert sind, empfehle ich diese Open-Source-Implementierung des HDFS .

Es basiert auf Mapreduce von Google.


HDFS ist ein verteiltes Dateisystem. Der Mapreduce-Klon heißt Hadoop und kann entweder auf HDFS oder auf Ihrem lokalen Dateisystem ausgeführt werden.
SquareCog

0
  1. Mehrstufiges Speichern, Verarbeiten und Abrufen von Daten

  2. EFFIZIENTE Verteilung (100 von 1000 Maschinen) der oben genannten Aufgaben

  3. Guter Rahmen zum Speichern der Rohdaten und der verarbeiteten Ergebnisse

  4. Guter Rahmen, um die Ergebnisse abzurufen

Wie genau dies alles gemacht wird, wird durch alle Links zusammengefasst, die Sie in der Fragenübersicht haben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.