bmap4j - Batch Management And Processing For Java

xinventa logo

Das bmap4j Framework - Parallele Verarbeitung

en

Parallele Verarbeitung mit bmap4j

Bei 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.

Batch

Ein 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.

Slice

Eine 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.

Lot

Damit 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.

All-Slices Lot Strategie

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.

One-Slice Lot Strategie

Falls viele Slices erzeugt werden müssen, dann kann aus Effizienzgründen ein Lot auch mehrere Slices enthalten.

N-Slices Lot Strategie

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.