bmap4j - Batch Management And Processing For Java

xinventa logo

Batch-Transaction-Processing Grundlagen - Robustheit

en

Robustheit

Robustheit ist die Eigenschaft von entsprechend gebauten Batch-Programmen, welche gewährleistet, dass die Datenkonsistenz sowohl bei inneren als auch äusseren Stör- bezw. Fehlfunktionen erhalten bleibt.

Innere Fehlfunktionen treten beispielsweise bei Programmfehlern oder durch die Nichtverfügbarkeit von Applikationskomponenten auf. Mögliche Ursachen für äussere Störungen sind Kommunikationsfehler, Server- oder sogar Rechenzentrums-Ausfälle.

Robustheit im Mikro-Bereich wird durch die Transaktionalität erreicht, indem die Konsistenz der Daten auf atomarer Ebenen gewährleistet ist.

Robustheit im Makro-Bereich ist die Fähigkeit eines Batchprogrammes die gestellte Aufgabe vollständig und richtig zu erledigen. Dies wird wesentlich bestimmt durch die Möglichkeit, bei einem Fehler das Programm neu zu starten und die Arbeit wieder aufzunehmen.

Folgende Eigenschaften spielen deshalb eine Rolle:

Idempotenz

Eine wichtige Eigenschaft von Programmen im Bereich Robustheit ist die sogenannte Idempotenz. Damit ist die Fähigkeit eines Programmes gemeint, nach einer Fehlersituation nochmals gestartet zu werden, die Arbeit an der richtigen Stelle fortzusetzen und korrekt abschliessen zu können. Batch-Programme sollten wenn immer möglich idempotent implementiert werden.

Idempotenz hat direkt mit den Daten zu tun, welche verarbeitet werden sollen. Abhängig wie stark die fachlichen Daten eine idempotente Verarbeitung direkt unterstützen, unterscheiden wir drei Arten von Idempotenz.

  • Natürliche Idempotenz : Die Verarbeitungsinformationen sind direkt in den fachlichen Daten enthalten. Bei einem Restart wird automatisch an der korrekten Stelle weitergearbeitet.
  • Abgeleitete Idempotenz : Fachliche Daten werden mit Verbeitungsinformationen erweitert. Bei einem Restart werden diese Verarbeitungsinformationen vom fachlichen Code ausgewertet und die Verarbeitung kann an der korrekte Stelle weitergeführt werden.
  • Unterstützte Idempotenz : Das Batch-System protokolliert die Verarbeitung in Zusammenarbeit mit dem fachlichen Code. Bei einem Restart liefert das Batch-System dem fachlichen Code den Stand der Verarbeitung und dieser setzt die Verarbeitung an der korrekten Stelle fort.

All-or-Nothing Strategie

Als Spezialfall der Idempotenz gilt die "All-or-Nothing Strategie". Durch geschickt gewählte Verarbeitung & Transaktionalität wird entweder der ganze Batch korrekt oder im Fehlerfall gar nichts verarbeitet. Bei einem Restart muss einfach der ganze Batch wiederholt werden.

Um ein Programm mit einer "All-Or-Nothing" Strategie zu implementieren, gibt es verschiedene Möglichkeiten, wie "Single Transaction per Batch" oder "One Transaction per Slice", wobei wir an dieser Stelle nicht weiter darauf eingehen wollen.

Wiederaufsetzen

Leider lässt es sich in der Realität nicht ganz vermeiden, dass Jobs abbrechen und dann anschliessend wieder aufgesetzt werden müssen. Je nach Batch Programm gestaltet sich das Aufsetzen mehr oder weniger aufwändig. Falls das Programm idempotent implementiert werden konnte, kann das Wiederaufsetzen eines Jobs automatisch erfolgen, indem das Programm mit denselben Parametern einfach nochmals gestartet wird.

Falls das automatische Aufsetzen nicht möglich ist, muss das manuelle Wiederaufsetzen eines Jobs durchgeführt werden. Dabei wird der Stand der Verarbeitung durch das Operating aus den Job Protokollen ermittelt. Allfällige Job Artefakte des abgebrochenen Jobs werden gelöscht oder zurückgesetzt, beispielsweise Message Queues, Print Output, Temporäre DB Tabellen. Anschliessend wird ein neuer Job mit Hilfe der Programm Parameter so geplant, dass er an der richtigen Stelle fortfährt.

Als Strategie für eine BTP-Plattform sollte ein manuelles Wiederaufsetzen wenn immer möglich vermieden werden, da dies normalerweise sehr aufwändig ist. Falls dies aus was für Gründen auch immer nicht möglich ist, sollten dem Betrieb wenigstens entsprechende Werkzeuge zum Reset des Jobs zur Verfügung gestellt werden. Eventuell kann der Betrieb zusätzlich unterstützt werden, indem im Fehlerfall allenfalls aus dem Enterprise Scheduling automatisch Korrekturjobs gestartet werden, welche einen Teil der "Aufräumarbeiten" übernehmen.