Spring Batch Performance Monitoring

Licht in der Dunkelverarbeitung

... auf GitHub

Spring Batch Performance Monitoring

Zweck

Ein Batchjob ist zur Laufzeit eine Black Box: Einzelne Prozessschritte werden sukzessive abgearbeitet, ohne dass dabei Benutzerinteraktionen nötig bzw. möglich sind. Dennoch kommt es immer wieder zu Situationen, in denen die „Black Box Batch“ geöffnet werden muss. Neben dem Bugfixing erfordert insbesondere die Performance-Optimierung eine detaillierte Analyse von einzelnen Verarbeitungsschritten ggf. bis auf das Detailniveau der individuellen Batch-Items. Um dies zu erreichen, werden bspw. Zeitmessungspunkte oder andere Hooks in die Prozessschritte eingefügt. Aber wer möchte fachlichen Code dauerhaft mit Laufzeitmessungen verschmutzen oder in separaten Versionen pflegen? Und das auch noch individuell für jede einzelne Spring Batch Anwendung?

Stattdessen haben wir eine Lösung gesucht, die detaillierte Messungen ermöglicht und aussagekräftige Metriken liefert, ohne dass die analysierten Batchjobs dafür angepasst werden müssen. Das Ergebnis dieser Suche und Entwicklung ist das Open-Source Tool Spring Batch Performance Monitoring.

Es liefert detaillierte Messungen zur Laufzeit eines Spring Batch Jobs bis hin zur atomaren Ebene der einzelnen Items, ohne dabei die fachliche Prozessstruktur des Jobs zu verändern. Zudem misst es den Durchsatz der einzelnen Job-Komponenten (Reader, Processor, Writer), sodass eine Optimierung der Black Box sich auf die relevanten Stellen konzentrieren bzw. bei diesen beginnen kann – deutlich detaillierter als mit den Basiswerkzeugen der Spring Batch Welt.

Vom SBPM gemessene Spring-Batch Bausteine

Wie funktioniert das?

Das Tool realisiert das Batch Monitoring per AspectJ oder über die vom Spring-Batch Framework angebotenen Listener – das macht Quellcode-Änderungen an den zu überwachenden Prozessen und fachlichen Klassen überflüssig. Das Einbinden eines JAR-Files sowie das Miteinbeziehen einer Klasse in den Spring Context reicht aus, so kann auch sichergestellt werden, dass Test-Code im Produktivbetrieb nicht einmal mehr enthalten ist.

Projektstatus und Planung

Das Projekt ist aus Erfahrungen aus diversen Projekten abgeleitet, dann prototypisch erprobt worden und jetzt bei einem viadee-Kunden im aktiven Einsatz. Es ist in stabilem Zustand und steht jetzt zur freien Verfügung als Open Source und wird dies auch dauerhaft bleiben.

Es gibt nur zwei Schnittstellen nach außen, die potenziell zu warten sind:

  • Das Tool ist auf die Spring Batch API angewiesen, die sich in der Vergangenheit schon als sehr stabil erwiesen hat. Eine eigene API hat das Tool aufgrund der AspectJ-Herangehensweise nicht – hier stellt sich also die Frage der Stabilität gar nicht erst.
  • Das Tool bietet mit dem erzeugten DB-Schema eine Datenschnittstelle für andere Tools, bspw. OLAP-Tools oder ein Data-Mining, an. Für dieses DB-Schema sichern wir die Stabilität zu – soweit möglich wird es keine Änderungen bzw. nur rückwärtskompatible Änderungen geben.

Wir freuen uns auf weitere Nutzer und Beiträge aus der Community.

Das Ergebnis ist eine relationale Datenbank, in der man sich schnell zurechtfindet und auf die beliebige Analysewerkzeuge schnell aufsetzen können. Per Default ist dies eine H2-Datenbankdatei, die sich einfach sichern oder gemeinsam im Team analysieren lässt. Eine Benutzeroberfläche gibt es nicht, typische Abfragen sind aber als View schon vorbereitet.

Installation

Vorausgesetzt ein lauffähiges Spring Batch Projekt existiert bereits, erfolgt die Installation wie folgt in wenigen Schritten:

  • Einbinden des Monitorings per bspw. Apach Maven
  • Aktivieren der Überwachung in der Spring Configuration bspw. wie folgt:
@Configuration
  @Import({ StandaloneInfrastructureConfiguration.class,
  de.viadee.spring.batch.infrastructure.Configurator.class,
  JobCreator.class,
  JobLaunchController.class })
  public class ApplicationConfiguration {
  private static Logger LOG = Logger.getLogger(ApplicationConfiguration.class);
  @Autowired
  JobLaunchController jobLaunchController;
}
  • Ausführen des Jobs mit gewohnten Mitteln, bspw. als JUnit-Test
  • Auslesen der Ergebnisse: Es wird ein Script mit ausgeliefert, mit dem die erstellte H2-Datenbank im Browser angezeigt wird. Es befindet sich im Ordner /src/main/resources/H2Starter.jar. Es kann mit dem folgenden Befehl gestartet werden:
java -jar H2Starter.jar
  • Nachdem der Projektordner ausgewählt wurde, wird ein Browserfenster mit dem Inhalt der Protokolldatenbank geöffnet (Nutzer sa, Passwort sasa). Die View „Denormalized“ dort ist ein guter Startpunkt für eine Analyse des Ergebnisses und der Datenstrukturen.

Grenzen und bekannte Einschränkungen

  • Das Monitoring verlangsamt zwangsläufig den beobachteten Batch-Job. Der Einfluss ist aber gering und gemessene Zeiten auf Entwickler-Rechnern sind ohnehin nicht mit den Serverlaufzeiten identisch – es ist aber sichergestellt, dass der Einfluss des Tools gleichmäßig ist, es also keine Aussagen zur Performance von bspw. einzelnen Steps verzerrt. Das Logging auf Einzel-Datensatzebene (Item) kann flexibel an- und ausgeschaltet werden, um Laufzeit zu sparen, falls das notwendig werden sollte.
  • Der AspectJ-Ansatz beschränkt das Monitoring auf solche Projekte, die die relevanten Spring-Mechanismen für Batch-Verarbeitung in üblicher Weise nutzen und nicht „unterlaufen“.

Eine Beispielanwendung mit dem SBPM-Tooling findet sich auch auf GitHub.

Das Tool ist Open Source und frei verfügbar. Quellcode und Details stehen auf GitHub zur Verfügung.

Ansprechpartner

Christian Nockemann

Christian Nockemann

Tel: +49 251 777 77 0

Jetzt kostenlos zum Workshop anmelden!

buchen

Aktuelle Blogbeiträge

Schon sehr viele IT-Projekte haben wir auf Basis der Java-Technologie erfolgreich realisiert. Und so große Expertise angesammelt. Das spiegelt sich auch im viadee-Blog wieder. Im Java-Blog finden Sie außerdem spannende Beiträge zu Themen wie „Clean Code“, JUnit oder Scrum.

zum Blog #Java

Unsere Lösungen,
ob Start-Up oder etabliertes Unternehmen

Business Process Management

Java

Testautomatisierung

Agile Methoden

Mobile- und Weblösungen

Business Intelligence