Frage Disruptor: Journaling Beispiel


Ich war neugierig auf die gängigsten (oder empfohlenen) Implementierungen von Disruptor über den Journaling-Schritt. Und die häufigsten Fragen von mir sind:

  • wie wird es tatsächlich umgesetzt (mit Beispiel)?
  • Ist es ratsam, JPA zu verwenden?
  • Welche DB wird üblicherweise verwendet (von der Community, die bereits Projekte mit Disruptor implementiert hat)?
  • Ist es sinnvoll, bei den Intermediate-Handlern (von EventProcessors) verwendet zu werden, so dass der Status jeder Nachricht gespeichert werden sollte, und nicht vor und nach dem Geschäftslogikprozess?

Übrigens: (Es tut mir leid, ich weiß, dass dies nicht mit dem Journaling-Schritt zusammenhängt), was ist der richtige Weg, um eine Nachricht aus dem RingBuffer während eines eventHandler-Prozesses zu löschen (vorausgesetzt, die Nachricht ist tot / abgelaufen und sollte durch entfernt werden das ganze Verfahren). Ich habe mich gefragt, etwas ähnliches wie die Dead Letter Kanal Muster.

Prost!


7
2017-09-06 07:53


Ursprung


Antworten:


Der Disruptor wird normalerweise für eine Verarbeitung mit niedriger Latenz und hohem Durchsatz verwendet. Z.B. Millionen von Nachrichten mit einer typischen Latenz in Hunderten von Mikrosekunden. Da nur sehr wenige Datenbanken diese Art von Aktualisierungen mit relativ begrenzten Verzögerungen bewältigen können, erfolgt die Aufzeichnung häufig in einer Raw-Datei mit Replikation zu einem zweiten (oder dritten) System.

Zu Berichtszwecken liest ein System diese Datei oder lauscht Nachrichten und aktualisiert eine Datenbank so schnell wie möglich, aber dies wird aus dem kritischen Pfad herausgenommen.

Ein Eintrag ist im Ringpuffer leer, wenn jeder Ereignisprozessor ihn verarbeitet hat.


Der Slot, den eine Nachricht verwendet, ist erst verfügbar, wenn jeder Event-Prozessor sie und alle Nachrichten davor verarbeitet hat. Das Löschen einer Nachricht wäre sowohl in Bezug auf die Leistung als auch auf das Design zu teuer

Jeder Event-Prozessor sieht jede Nachricht. Da dies gleichzeitig geschieht, sind die Kosten gering, aber es ist für Ereignisprozessoren normal, Nachrichten als Ergebnis zu ignorieren. (möglicherweise die meisten Nachrichten)


5
2017-09-06 08:00