Asynchrone, hochperformante Ereignisprotokollierung bei ShareThis

von Fadi Obeid, Principal Engineer & Tech Lead, Werbeprodukte

Wenn Sie an oder mit Echtzeit gearbeitet haben, mussten Sie sich wahrscheinlich mit Event Logging auseinandersetzen. Bei ShareThis dreht sich alles um Echtzeit - wir sammeln soziale Signale, während sie passieren, wenden Geschäftslogik auf diese Signale an und verwandeln diese Signale schließlich in komplexe Ad-Targeting-Regeln. 

In diesem Beitrag werden wir die Ereignisprotokollierung im Maßstab behandeln. Eine vereinfachte Version unserer Pipeline sieht wie folgt aus:

Abbildung

Der Kafka-Stream fördert rund 800 Millionen bis 1 Milliarde Ereignisse / Tag. Jedes Ereignis erweitert sich auf durchschnittlich 12 virtuelle Ereignisse, so dass die Geschäftslogik innerhalb des Kafka Consumer Clusters 9-12 Milliarden Ereignisse pro Tag verarbeiten und auswerten muss und qualifizierte Ereignisse auf Festplatte protokolliert.

Zuerst hatten wir eine 1×1 Zuordnung von Rohereignis zu virtuellem Ereignis, was keine große Sache war, da wir "genügend Maschinen" hatten. Die Clusterkapazität betrug 3 c3.xlarge Instanzen und wurde durch einen selbst entwickelten synchronen Logger unterstützt.

Mit der Zeit nahm die Zuordnung zu - von 1×1 auf 1×3 und so weiter. Jede Kafka-Box im Cluster lief mit 25 Threads, und unter Last war der Effekt der Sperrung des Schreibvorgangs, wie in diesem Codeausschnitt zu sehen, lähmend. Der Thread-Pool-Execuutor fiel in seiner Fähigkeit, eingehende Anfragen zu bearbeiten, zurück, und der Kafka-Offset begann zu verzögern, manchmal bis zu einem Punkt, an dem er nie aufholen konnte.

Abbildung

Ein Profil der laufenden Threads zeigte, dass die Threads fast immer blockiert sind, yikes!

Abbildung

Wir begannen, unsere Optionen zu prüfen. Auf unsere Liste kam es an: 

  • Weitere Maschinen hinzufügen
  • Hausgemachter asynchroner Logger
  • Log4j2 asynchron + Disruptor + Zufallszugriffsdatei

Wir haben Vor- und Nachteile durchgemacht und sind auf Log4j2 gelandet. Wir haben ihn verglichen, und die Ergebnisse waren sehr beeindruckend. Für die Zwecke dieses Beitrags zeigen wir zwei Diagramme: die erste zeigt den Durchsatz bei niedrigen Lasten und die zweite den Durchsatz bei hohen Lasten. Der schöne Teil war, wie einfach es war, es in das bestehende Projekt, den Support und die umfangreiche Dokumentation zu integrieren.

Abschließend können wir mit Sicherheit sagen, dass unsere Wahl "log4j2 asynchron + disruptor + RandomAccessFile" für die Protokollierung die richtige war. Wenn Sie einen ähnlichen Prozess durchlaufen, empfehlen wir Ihnen dringend, Ihre Bewerbung zu profilieren, Ihre Optionen auszuarbeiten und zu bewerten.

Abbildung
Abbildung

Über ShareThis

ShareThis erschließt seit 2007 die Macht des globalen digitalen Verhaltens durch die Synthese von Social Share-, Interessen- und Absichtsdaten. Auf der Grundlage des Verbraucherverhaltens auf mehr als drei Millionen globalen Domains beobachtet ShareThis Echtzeit-Aktionen von echten Menschen auf echten digitalen Zielen.

Abonnieren Sie unseren Newsletter

Erhalten Sie die neuesten Nachrichten, Tipps und Updates

Abonnieren

Verwandte Inhalte