it-swarm.dev

Wie würden Sie die Google-Suche implementieren?

Angenommen, Sie wurden in einem Interview gefragt: "Wie würden Sie die Google-Suche implementieren?" Wie würden Sie eine solche Frage beantworten? Möglicherweise gibt es Ressourcen, die erklären, wie einige Teile in Google implementiert sind (BigTable, MapReduce, PageRank, ...), aber das passt nicht genau in ein Interview.

Welche Gesamtarchitektur würden Sie verwenden und wie würden Sie dies in einem Zeitraum von 15 bis 30 Minuten erklären?

Ich würde damit beginnen, zu erklären, wie man eine Suchmaschine erstellt, die ~ 100.000 Dokumente verarbeitet, und diese dann durch Sharding auf etwa 50 Millionen Dokumente erweitern, dann vielleicht einen weiteren architektonischen/technischen Sprung.

Dies ist die 20.000 Fuß Ansicht. Was ich möchte, sind die Details - wie Sie das in einem Interview tatsächlich beantworten würden. Welche Datenstrukturen würden Sie verwenden? Aus welchen Diensten/Maschinen besteht Ihre Architektur? Was wäre eine typische Abfragelatenz? Was ist mit Failover-/Split-Brain-Problemen? Usw...

47
ripper234

Das Beitrag auf Quora ergab das Originalartikel veröffentlicht von Sergey Brin und Larry Page. Es scheint eine ausgezeichnete Referenz für diese Art von Frage zu sein.

Google Architecture

19
ripper234

Betrachten Sie den Meta-Punkt: Was sucht der Interviewer?

Bei einer solchen Mammutfrage müssen Sie Ihre Zeit nicht damit verschwenden, einen Algorithmus vom Typ PageRank zu implementieren oder eine verteilte Indizierung durchzuführen. Konzentrieren Sie sich stattdessen auf das vollständige Bild dessen, was es aufnehmen würde. Es hört sich so an, als ob Sie bereits alle großen Teile kennen (BigTable, PageRank, Map/Reduce). Die Frage ist also, wie verdrahtet man sie eigentlich miteinander?

Hier ist mein Stich.

Phase 1: Indizierung der Infrastruktur (5 Minuten Erklärungszeit)

Die erste Phase der Implementierung von Google (oder einer Suchmaschine) besteht darin, einen Indexer zu erstellen. Dies ist die Software, die den Datenbestand crawlt und die Ergebnisse in einer Datenstruktur erzeugt, die für Lesevorgänge effizienter ist.

Berücksichtigen Sie dazu zwei Teile: einen Crawler und einen Indexer.

Die Aufgabe des Webcrawlers besteht darin, Webseiten-Links zu spinnen und sie in einem Set abzulegen. Der wichtigste Schritt dabei ist, zu vermeiden, dass Sie in eine Endlosschleife oder in unendlich generierte Inhalte geraten. Platzieren Sie jeden dieser Links (vorerst) in einer massiven Textdatei.

Zweitens wird der Indexer als Teil eines Map/Reduce-Jobs ausgeführt. (Ordnen Sie jedem Element in der Eingabe eine Funktion zu und reduzieren Sie dann die Ergebnisse in ein einzelnes Element.) Der Indexer verwendet einen einzelnen Weblink, ruft die Website ab und konvertiert sie in eine Indexdatei. (Wird als nächstes besprochen.) Im Reduktionsschritt werden einfach alle diese Indexdateien zu einer einzigen Einheit zusammengefasst. (Anstelle von Millionen loser Dateien.) Da die Indizierungsschritte parallel ausgeführt werden können, können Sie diesen Map/Reduce-Job in einem beliebig großen Rechenzentrum verarbeiten.

Phase 2: Besonderheiten der Indexierungsalgorithmen (10 Minuten Erklärungszeit)

Nachdem Sie angegeben haben, wie Sie Webseiten verarbeiten, wird im nächsten Teil erläutert, wie Sie aussagekräftige Ergebnisse berechnen können. Die kurze Antwort hier lautet "viel mehr Map/Reduces", aber überlegen Sie, was Sie tun können:

  • Zählen Sie für jede Website die Anzahl der eingehenden Links. (Stärker verknüpfte Seiten sollten "besser" sein.)
  • Sehen Sie sich für jede Website an, wie der Link dargestellt wurde. (Links in einem <h1> oder <b> sollten wichtiger sein als solche, die in einem <h3> vergraben sind.)
  • Überprüfen Sie für jede Website die Anzahl der ausgehenden Links. (Niemand mag Spammer.)
  • Sehen Sie sich für jede Website die verwendeten Wortarten an. Zum Beispiel bedeutet "Hash" und "Tabelle" wahrscheinlich, dass die Website mit Informatik zusammenhängt. "Hash" und "Brownies" hingegen würden bedeuten, dass es sich bei der Site um etwas ganz anderes handelt.

Leider weiß ich nicht genug über die Möglichkeiten, die Daten zu analysieren und zu verarbeiten, um sehr hilfreich zu sein. Die allgemeine Idee ist jedoch skalierbare Methoden zur Analyse Ihrer Daten .

Phase 3: Ergebnisse liefern (10 Minuten erklären)

Die letzte Phase dient tatsächlich den Ergebnissen. Hoffentlich haben Sie einige interessante Einblicke in die Analyse von Webseitendaten gegeben, aber die Frage ist, wie Sie diese tatsächlich abfragen. Anekdotisch 10% der Google-Suchanfragen pro Tag wurden noch nie zuvor gesehen. Dies bedeutet, dass Sie frühere Ergebnisse nicht zwischenspeichern können.

Sie können nicht eine einzige Suche in Ihren Webindizes durchführen. Welche würden Sie also versuchen? Wie würden Sie über verschiedene Indizes hinweg aussehen? (Vielleicht kombinieren Sie Ergebnisse - vielleicht kam das Schlüsselwort 'Stackoverflow' in mehreren Indizes hoch vor.)

Wie würden Sie es überhaupt nachschlagen? Welche Ansätze können Sie verwenden, um Daten aus riesigen Informationsmengen schnell zu lesen? (Sie können hier Ihre bevorzugte NoSQL-Datenbank benennen und/oder einen Blick auf Googles BigTable werfen.) Auch wenn Sie einen beeindruckenden Index haben, der sehr genau ist, müssen Sie schnell Daten darin finden. (Suchen Sie beispielsweise die Rangnummer für 'stackoverflow.com' in einer 200-GB-Datei.)

Zufällige Probleme (verbleibende Zeit)

Sobald Sie die "Knochen" Ihrer Suchmaschine abgedeckt haben, können Sie sich über jedes einzelne Thema, über das Sie sich besonders gut auskennen, informieren.

  • Leistung des Website-Frontends
  • Verwalten des Rechenzentrums für Ihre Map/Reduce-Jobs
  • A/B-Test Suchmaschinenverbesserungen
  • Integration des vorherigen Suchvolumens/der vorherigen Trends in die Indizierung. (Zum Beispiel wird erwartet, dass die Frontend-Serverlasten um 9-5 ansteigen und am frühen Morgen absterben.)

Es gibt natürlich mehr als 15 Minuten Material, das hier diskutiert werden kann, aber hoffentlich reicht es aus, um Ihnen den Einstieg zu erleichtern.

46
Chris Smith