Wie das Inhaltssystem der Turbo-Seiten aufgebaut ist: Schemata, Fakten und ein bisschen Geschichte



Laut TelecomDaily haben fast 30% der mobilen Internetnutzer in Russland täglich Probleme beim Herunterladen von Websites. Der Grund kann jedoch nicht nur in einer ungleichmäßigen Abdeckung liegen, sondern auch in einem zu hohen "Gewicht" der Seite.

Wir können die Qualität der Verbindung nicht beeinflussen, aber um Webmastern zu helfen, den Inhalt der Website zu vereinfachen, machen Sie es einfacher - warum nicht? Die Technologie der Turbo-Seiten wurde in Yandex veröffentlicht: Alles, was für die Platzierung benötigt wird, wird auf unser Content-System übertragen und diese Daten werden in einfache und schnelle Materialien umgewandelt.

Wie funktioniert diese Magie? Was ist der Datenpfad, bevor Sie eine vollständige Turbo-Seite werden? Mein Name ist Stas Makeev, ich leite die Entwicklung von Technologie-Turbo-Seiten. Jetzt werde ich versuchen, alles zu erklären.

Aber zuerst ist es eine kleine Zusammenfassung, damit Sie sich nicht verlaufen, wenn ich mich mit den Details befasse.

Ein wesentlicher Vorteil des Turbo-Seitensystems ist die schnelle Konvertierung von Daten vom Originalformular in das endgültige: Die Materialien von Nachrichtenseiten sind in den ersten Minuten nach Veröffentlichung am gefragtesten, und die Warenkarten von Online-Shops sollten umgehend aktualisiert werden und immer dem aktuellen Verfügbarkeitsstatus entsprechen. Der zweite wichtige Parameter ist die Zuverlässigkeit: Das Content-System sollte so stabil wie möglich sein und den Ausfall einzelner Server oder sogar ganzer Rechenzentren überstehen können. Und natürlich war es wichtig, eine übermäßige Belastung der Hosts unserer Partner zu vermeiden, die mit den Turbo-Seiten verbunden sind. Das heißt, beim Entwerfen des Dienstes musste irgendwie ein Gleichgewicht zwischen der Geschwindigkeit der Datenverarbeitung und der Zunahme der Anzahl von Anforderungen gefunden werden.

Websitebesitzer haben verschiedene Möglichkeiten, eine Verbindung zum System herzustellen:

  • . : YML — -, RSS – ;
  • API: ( );
  • : - .

Das Inhaltssystem speichert die Ergebnisse seiner Arbeit in einem speziellen Speicher vom Typ "Schlüsselwert" (Schlüsselwertspeicher oder KV-Speicher), wobei der Schlüssel die URL der ursprünglichen Site ist und der Wert den Inhalt der Turbo-Seite speichert. Sobald die Daten in diesen KV-Speicher gelangen, wird die nächste Turbo-Seite sofort für Suchbenutzer verfügbar, und in Yandex-Diensten verfügt das entsprechende Dokument über ein spezielles Symbol mit einer Rakete. Um die Arbeit zu beschleunigen, speichern wir Bilder und Videos in unseren CDNs.

Ein sehr vereinfachtes allgemeines Arbeitsschema sieht folgendermaßen aus:



Wie alles begann


Die allererste Version des Content-Systems war ganz einfach aufgebaut: Alle paar Minuten wurde gemäß Zeitplan das gleiche Programm auf dem internen Cloud-Server von Yandex gestartet. Es bestand aus mehreren Schritten, die jeweils ausgeführt wurden, nachdem die vorherigen Daten für alle uns bekannten Feeds bereit waren:

  • Die Liste der RSS-Feeds wurde heruntergeladen, der Dokumentparser wurde gestartet.
  • Aus den Parser-Ergebnissen wurde eine Liste von Bildern extrahiert.
  • Es wurden noch keine zwischengespeicherten Bilder in das CDN geladen.
  • verarbeitete Dokumente wurden in das KV-Repository gegossen.

Ein solches Schema funktionierte perfekt, wenn das System mehrere tausend eher leichte RSS-Feeds von Nachrichtenagenturen (insgesamt - Informationen zu etwas weniger als 100.000 Dokumenten) behandelte. Mit der Zunahme der Anzahl der Feeds wurde jedoch schnell ein Problem entdeckt: Jeder Schritt dauerte immer länger, es gab eine Verzögerung zwischen dem Erscheinen eines neuen Dokuments in der Originalquelle und seiner Anzeige im Turbo-Modus.

Wir haben es geschafft, die Situation mit Hilfe verschiedener Tricks unter Kontrolle zu halten: Als erstes haben wir den ersten Schritt (Herunterladen von RSS-Feeds + Dokumentparser) in einem separaten Prozess ausgewählt. Das heißt, während einer Bilder für die vorherige Iteration verarbeitete, lud der andere Prozess bereits Feeds für die nächste herunter. Nach einiger Zeit wurde klar: In dieser Form ist das System sehr schwer zu skalieren. Wir brauchen etwas grundlegend Neues.

Verarbeitung von RSS, API und YML im neuen Inhaltssystem


Das Hauptproblem des alten Inhaltssystems bestand darin, dass alle Daten in einem Stück verarbeitet wurden: Es gab keinen Übergang zum nächsten Schritt, bis jedes Dokument das vorherige bestanden hatte. Um dies zu beseitigen, wurde beschlossen, eine bestimmte Pipeline zu erstellen: Lassen Sie die Feeds und einzelnen Dokumente so unabhängig wie möglich verarbeiten. Alle Schritte wurden in separate Service-Cubes unterteilt - auf der obersten Ebene stellte sich das Schema folgendermaßen heraus:



  • Der erste Cube lädt RSS-Feeds herunter und gibt sie weiter.
  • Die zweite - nimmt Feeds einzeln auf und analysiert den Inhalt. Am Ausgang - separate Dokumente;
  • Die dritte - nimmt Dokumente einzeln auf, verarbeitet Bilder und Videos, zeichnet alles im KV-Speicher auf.

Dieselben Feeds können nicht nur in Turbo, sondern auch in unseren anderen Diensten registriert werden - beispielsweise in den Nachrichten oder auf dem Markt. Wenn jeder von ihnen Daten für sich herunterlädt, ist die Belastung des Webmaster-Servers um ein Vielfaches höher als die zulässige. Wie richtig? Laden Sie den Feed einmal herunter und verteilen Sie ihn dann an alle Verbraucherdienste - Yandex.Robot erledigt dies. Wir nutzen seine Dienste zum Herunterladen von Inhalten: Wir nehmen von Yandex.Webmaster eine Liste der in Turbo registrierten RSS- und YML-Feeds, übertragen sie an Robot und abonnieren die Download-Ergebnisse.

Starten Sie auf den empfangenen Daten den Parser. Für alle Fälle möchte ich Sie daran erinnern: Ein RSS-Feed ist nur eine Datei im XML-Format, auf die über eine statische URL auf dem Host des Partners zugegriffen werden kann. Diese Datei enthält Informationen zu allen Aktualisierungen auf der Website - welche Dokumente neu sind, welche geändert werden. Nur die aktuellsten Informationen der letzten Stunden wären in idealen Feeds enthalten: nicht mehr als 100 Dokumente pro mehrere hundert Kilobyte.

Reality Bites: Manchmal befinden sich die Dateien sehr lange im Feed und ändern sich nie. Wie kann in solchen Fällen eine Wiederaufbereitung vermieden werden? Wir berechnen den Hash jedes Dokuments, speichern ihn in der Datenbank und tun nichts, bis sich der Hash ändert.

Die Verarbeitung von YML-Feeds und APIs aus Sicht des Inhaltssystems unterscheidet sich praktisch nicht von der Interaktion mit RSS: Für YML starten wir einen weiteren Parser, und die über die API übertragenen Daten werden direkt von Yandex.Webmaster abgerufen.



Bild- und Videoverarbeitung


Das am Ausgang des Parsers empfangene Dokument ist fast fertig zum Schreiben in den KV-Speicher. Vor dem Senden müssen Sie nur noch die Bilder und Videos verarbeiten: Cache im CDN und Ersetzen der Links im Dokument. Auch hier wenden wir uns an den Roboter, um Hilfe zu erhalten.

Zunächst überprüfen wir jedes Bild und Video: Sind sie im CDN? Wenn bereits alles zwischengespeichert ist, ersetzen Sie die Links und senden Sie das aktualisierte Dokument an das KV-Repository. Sonst:

  • Wir senden die Liste der fehlenden URLs zur Planung und zum Herunterladen an den Roboter.
  • Das Dokument selbst wird vorübergehend gespeichert. Versuchen Sie daher nach einer Weile, es erneut zu überprüfen.

Ein anderer Cube empfängt zu diesem Zeitpunkt die Download-Ergebnisse, lädt die Daten auf das CDN hoch und aktualisiert die Datenbank.

In einem solchen Schema kann ein weiteres wichtiges Planungsproblem gelöst werden: Der Roboter versteht, wie schnell Daten von verschiedenen Hosts heruntergeladen werden können, und lässt keine Überlastungen zu.



Typischer Pfad, dem ein neues Dokument folgt:

  • Das Dokument wird im Feed angezeigt.
  • Der Roboter lädt den Feed herunter.
  • Der Parser erkennt ein neues Dokument und sendet es weiter.
  • Wir prüfen, ob die Bilder aus dem Dokument nicht in der Datenbank erwähnt sind. Bestellen Sie den Download. Das Dokument wird an einen temporären Speicher gesendet (Verzögerung). Während das Dokument vorhanden ist, lädt der Roboter die Bilder herunter, sie werden im CDN zwischengespeichert und die Links werden in der Datenbank angezeigt.
  • , CDN, KV-.
  • : , Delay.


Es gibt eine andere Möglichkeit, eine Verbindung zu Turbo-Seiten herzustellen, für die der Webmaster nichts tun muss - Autoparser. Es erstellt Turbo-Seiten basierend auf den Quelldaten der Inhaltsseite. In Yandex.Webmaster können Sie eine Verbindung herstellen, Beispiele für fertige Seiten anzeigen, Anzeigen und Analysen konfigurieren.

Die Hauptschwierigkeit von AutoParser besteht darin, anhand des HTML-Markups zu erkennen, welche grundlegenden Informationen beim Erstellen einer Turbo-Seite verwendet werden sollten. Zu diesem Zweck haben wir mehrere Offline-Prozesse, die versuchen, genau zu verstehen, wie ein bestimmter Host analysiert wird. Ich werde mich auf zwei Hauptpunkte konzentrieren:

  • Der Erste RSS- HTML- . — , RSS- ( ), . , . CatBoost , , . , , , . , . , , , HTML . ? : . – , .
  • : .. , , , , — . — .

Übrigens ein weiteres häufiges Hindernis: Viele Websites blockieren das Herunterladen von Bildern durch Roboter in robots.txt. Leider ist es unmöglich, dieses Problem zu umgehen, und der Autoparser ist für solche Seiten nicht verfügbar.

Infolgedessen sieht das vollständige Schema des Inhaltssystems folgendermaßen aus:



Das System erwies sich als gut skalierbar: Jetzt wird eine erhebliche Menge an Ressourcen für die Wartung der Datenbank, des Autoparsers und anderer Komponenten des Systems verwendet (nur der Cube, der für das Parsen von RSS, YML und API verantwortlich ist, verwendet mehr als 300 Prozessoren Kerne), und im Falle einer erhöhten Last wird es nicht zu schwierig sein, zusätzliche Kapazitäten anzuschließen.

Vielen Dank für das Lesen bis zum Ende! Ich hoffe, dass Sie nach diesem Material in der Arbeit der Turbo-Seiten mehr Logik und weniger Magie erhalten (übrigens hier)- noch mehr Details zu Turbo-Seiten). Wenn etwas noch unverständlich ist, schreiben Sie in die Kommentare - wir sind in Kontakt.

All Articles