bmap4j - Batch Management And Processing For Java |
Das bmap4j Framework - Parallele Verarbeitung |
en | |
Parallele Verarbeitung mit bmap4jBei grossen zu verarbeitenden Datenmengen und beschränktem Zeitfenster kann es vorteilhaft sein, die anstehende Arbeit durch einen WorkManager unterteilen zu lassen und an verschiedene Worker zu verteilen, welche die Arbeit parallel verrichten. Dabei kommt das WorkManager-Worker Pattern zum Zug. Das WorkManager-Worker Pattern setzt die Begriffe Batch, Record, Slice und Lot voraus, welche nachfolgend beschrieben werden. BatchEin Batch (engl. für Stapel) ist die Menge 1..R aller Records (auch einfacher Geschäftsfall EGF, siehe Grundlagen ) welche ein Job zu verarbeiten hat. Vielfach ist der Umfang eines Batches zu gross, um mit einer angemessenen Laufzeit in einer Transaktion verarbeitet werden zu können. Dann muss man alternative Strategien anwenden. SliceEine mögliche Strategie ist, den Batch in 1..S Slices (engl. für Scheibe, Tranche), d.h. Teilstapel zu zerlegen. Ein Slice enthält dann 1..M Records. Die Summer dieser Records ist dann wieder R. Ein Slice wird im Normalfall in einer Transaktion verarbeitet, d.h. es wird nicht für jeden Record eine Transaktion gestartet, was je nach Verarbeitungsdauer eines Records die Effizienz erhöht. Während man die Anzahl der Records aus Effizienzgründen so gross als möglich machen möchte, muss man doch aufpassen, dass die Verarbeitungszeit den Transaktions-Timeout des Transaktions-Managers nicht überschreitet. Ein Slice kann voneinander abhängige Records enthalten, da die in einem Slice enthaltenen Records sequenziell verarbeitet werden. Es ist dann lediglich darauf zu achten, dass die Reihenfolge der Verarbeitung geordnet erfolgt. Da die Slices parallel nebeneinander verarbeitet werden können und von JMS keine Garantie für eine bestimmte Startreihenfolge erhalten werden kann, müssen die Slices untereinander selber unabhängig sein. LotDamit die Slices von den Workern (MDB's) verarbeitet werden können, müssen diese zuerst an das Messaging System gesandt werden. Dieser Vorgang wird mit Vorteil unter Transaktionskontrolle durchgeführt. Wie viele Slices nun in einer Transaktion geschrieben werden, definiert der Lot. Der Lot enthält 1..N Slices, welche in einer Transaktion an das Messaging System gesandt werden. Die Anzahl der Lots eines Batches ist L. Die Summer der Slices über alle Lots ist S. Enthält der Batch nun genau einen Lot, dann wird damit eine All-or-nothing Strategie umgesetzt, da keine Worker anlaufen, bis nicht alle Slices in der JMS Queue sind und die Transaktion abgeschlossen ist.
Ist der Worker eines Batch Programmes idempotent, kann auch mit mehr als einem Lot ein automatisches Wiederaufsetzen erreicht werden. Vielfach enthält in diesem Fall ein Lot genau einen Slice.
Falls viele Slices erzeugt werden müssen, dann kann aus Effizienzgründen ein Lot auch mehrere Slices enthalten.
In der Praxis wird man versuchen, alle Slices in einem Lot an das Messaging System zu senden, da damit ein einfaches Wiederaufsetzen erreicht werden kann. Nur falls dies nicht möglich ist, kommt eine der anderen Strategien zum Zug. |
||
25.05.2018 12:24 | Copyright © 2007 - 2018 by Xinventa GmbH, Luzern |