Zum Inhalt springen
Logo von nextlevels
Projekt anfragen
Zurück zum Wiki

Workflow-Engine

Eine Workflow-Engine ist eine Softwarekomponente, die mehrstufige Geschäftsprozesse als definierte Abfolge von Schritten ausführt, ihren Zustand verlässlich speichert und bei Fehlern kontrolliert reagiert — durch Wiederholung, Kompensation oder Abbruch. Sie ist die Antwort auf die Frage, was passiert, wenn Schritt vier von sieben scheitert.

Warum es diese Komponente überhaupt gibt

Jeder nichttriviale Geschäftsprozess besteht aus mehreren Schritten, die nacheinander laufen und dabei fremde Systeme berühren. Eine Bestellung im Onlineshop: Bestand reservieren, Zahlung autorisieren, Bestellung anlegen, ans ERP übergeben, Bestätigungsmail versenden, Versanddienstleister informieren. Sechs Schritte, fünf davon über das Netzwerk, jeder einzelne mit einer realistischen Ausfallwahrscheinlichkeit.

Der naive Weg ist eine Kette von Funktionsaufrufen. Das funktioniert, solange nichts schiefgeht. Fällt der vierte Aufruf aus, steht das System in einem inkonsistenten Zwischenzustand: Geld autorisiert, Bestand reserviert, ERP weiß von nichts, Kundin hat keine Mail bekommen. Niemand weiß, wie weit der Prozess gekommen ist, und ein einfacher Neustart würde Zahlung und Reservierung doppelt auslösen.

Genau diese Lücke schließt eine Workflow-Engine. Sie macht den Prozess zu einem Objekt mit eigenem Zustand, statt ihn im Kontrollfluss eines einzelnen Requests zu verstecken. Die begriffliche Einordnung und Abgrenzung zu benachbarten Systemklassen beschreibt unter anderem der Artikel zur Workflow Engine.

Die Kernfunktionen

Zustandshaltung und Wiederaufnahme

Die Engine schreibt nach jedem Schritt fest, wie weit der Prozess gekommen ist. Fällt der Serverprozess aus, geht der Fortschritt nicht verloren — der Workflow wird an der letzten bekannten Stelle fortgesetzt, nicht von vorn begonnen. Das ist der entscheidende Unterschied zu einer Funktionskette, deren Zustand nur im Arbeitsspeicher existiert.

Praktisch heißt das auch, dass ein Prozess pausieren darf. Ein Freigabeschritt, der auf eine menschliche Entscheidung wartet, blockiert keine Ressource; der Workflow ruht schlicht, bis das Signal kommt. Prozesse, die Tage oder Wochen laufen, sind damit genauso normal wie solche, die in zweihundert Millisekunden durch sind.

Retry mit Backoff

Nicht jeder Fehler ist endgültig. Ein Timeout beim Zahlungsanbieter, ein kurzzeitig überlastetes ERP, ein Netzwerkschluckauf — solche transienten Fehler verschwinden oft von selbst. Eine Workflow-Engine wiederholt den betroffenen Schritt automatisch, typischerweise mit wachsendem Abstand zwischen den Versuchen, und gibt erst nach einer konfigurierten Zahl von Versuchen auf.

Wichtig ist die Unterscheidung: Wiederholt werden darf nur, was transient scheitert. Eine abgelehnte Kreditkarte ist kein Timeout und wird durch den zehnten Versuch nicht besser. Gute Engines trennen deshalb zwischen wiederholbaren und endgültigen Fehlern, und die Definition dieser Grenze gehört in die fachliche Verantwortung, nicht in die Infrastruktur.

Kompensation statt Rollback

Eine Datenbanktransaktion kann zurückgerollt werden. Ein Aufruf an einen fremden Zahlungsdienstleister kann das nicht — die Autorisierung ist raus. Was bleibt, ist die fachliche Umkehrung: Autorisierung stornieren, Bestand freigeben, Gutschrift erzeugen.

Diese Gegenoperationen heißen Kompensationsschritte. Jeder Schritt eines Workflows bringt seine eigene Kompensation mit, und scheitert der Prozess später endgültig, ruft die Engine die Kompensationen der bereits gelaufenen Schritte in umgekehrter Reihenfolge auf. Das Muster ist als Saga bekannt und die verbreitetste Antwort auf verteilte Prozesse ohne gemeinsame Transaktionsklammer.

Idempotenz

Wird derselbe Auslöser zweimal geliefert — ein doppelt gesendetes Webhook, ein Klick auf „Bestellen“ nach einem Timeout —, darf der Prozess nicht zweimal laufen. Engines arbeiten dafür mit Schlüsseln, die den Auslöser eindeutig identifizieren: Ist zu diesem Schlüssel bereits ein Workflow gestartet, wird das Ergebnis des ersten Laufs zurückgegeben statt ein zweiter gestartet.

Beobachtbarkeit

Weil der Zustand persistiert ist, lässt sich beantworten, was sonst nur Logfiles ahnen lassen: Welche Prozesse laufen gerade, welche hängen seit Stunden fest, an welchem Schritt scheitern die meisten Durchläufe. Diese Auswertbarkeit ist im Betrieb oft der größere Gewinn als die Fehlertoleranz selbst.

Zwei Bauarten

MerkmalEingebettete EngineEigenständige Plattform
Betriebläuft im Anwendungsprozesseigener Dienst, zentral
Definitionim Code der AnwendungModell oder Code, oft grafisch
ReichweiteProzesse einer Anwendungsystemübergreifend
Einstiegsaufwandgeringhöher, eigene Infrastruktur
Typisches UmfeldCommerce-Backend, FachanwendungKonzernprozesse, BPM

Die eingebettete Variante findet sich zunehmend direkt in Anwendungsframeworks. MedusaJS etwa liefert eine Workflow-Engine als festen Bestandteil des Commerce-Backends mit: Jeder Kernprozess — Warenkorb zur Bestellung, Retoure, Preisberechnung — ist dort als Workflow definiert, und eigene Erweiterungen werden nach demselben Muster gebaut statt als loser Event-Handler.

Die eigenständige Variante steht in der Tradition der Workflow-Management-Systeme und wird häufig über den Modellierungsstandard BPMN 2.0 beschrieben. Sie lohnt sich, wenn Prozesse über Abteilungs- und Systemgrenzen laufen und Fachbereiche sie mitlesen oder mitgestalten sollen.

Ein Beispiel aus der Praxis

Ein B2B-Händler nimmt Bestellungen über den Shop an, prüft die Kreditlinie gegen das ERP, holt bei Überschreitung eine Freigabe durch den Vertrieb ein und übergibt die Bestellung anschließend an die Logistik. Ohne Engine ist das ein Geflecht aus Statusfeldern in der Datenbank, Cronjobs, die nach hängengebliebenen Bestellungen suchen, und einer Handvoll Sonderfälle, die niemand mehr vollständig erklären kann.

Als Workflow ist es eine Abfolge mit vier Schritten, von denen einer auf ein externes Signal wartet. Die Kreditprüfung wird bei ERP-Timeout wiederholt. Verweigert der Vertrieb die Freigabe, laufen die Kompensationen: Reservierung auflösen, Kundin informieren, Vorgang schließen. Kommt binnen 48 Stunden keine Entscheidung, greift ein Zeitlimit und eskaliert. Die Fachlogik ist dieselbe wie vorher — der Unterschied liegt darin, dass sie an einer Stelle sichtbar steht statt über Statusfelder und Hilfsjobs verteilt.

Wie ein Workflow im Code aussieht

Konkret wird das Prinzip an der Struktur einer Definition. Unabhängig vom eingesetzten Produkt folgt sie fast immer demselben Muster: benannte Schritte, je eine Ausführungs- und eine Kompensationsfunktion, dazu die Regeln für Wiederholung und Zeitlimits.

workflow("bestellung-abschliessen")
  .step("bestand-reservieren")
    .run(reserviereBestand)
    .compensate(gibBestandFrei)
  .step("zahlung-autorisieren")
    .run(autorisiere)
    .compensate(storniereAutorisierung)
    .retry({ versuche: 3, backoff: "exponentiell" })
  .step("an-erp-uebergeben")
    .run(uebergebeAnErp)
    .retry({ versuche: 5, backoff: "exponentiell" })
  .step("bestaetigung-senden")
    .run(sendeBestaetigung)

Zwei Dinge fallen auf. Erstens steht die Fehlerbehandlung nicht verstreut in der Fachlogik, sondern deklarativ neben dem jeweiligen Schritt — sie ist damit lesbar und überprüfbar. Zweitens hat der letzte Schritt bewusst keine Kompensation: Eine versendete Bestätigungsmail lässt sich nicht zurückholen, und Schritte ohne Umkehrung gehören deshalb ans Ende einer Kette. Diese Reihenfolge ist keine Stilfrage, sondern eine Entwurfsregel.

Aus derselben Überlegung folgt eine zweite Regel: Je später ein Schritt liegt, desto teurer wird sein Scheitern, weil alle vorherigen Kompensationen anfallen. Schritte, die mit hoher Wahrscheinlichkeit fehlschlagen — Bonitätsprüfungen, Verfügbarkeitsabfragen, Validierungen gegen fremde Stammdaten — gehören deshalb so weit nach vorn wie fachlich vertretbar.

Was eine Workflow-Engine nicht ist

  • Keine Message Queue. Eine Queue transportiert Nachrichten zuverlässig, kennt aber den Prozess nicht, zu dem eine Nachricht gehört. Viele Engines nutzen intern eine Queue — ersetzen lässt sich das eine durch das andere nicht.
  • Kein Scheduler. Ein Cronjob startet etwas zu einer Zeit. Er weiß nichts über Zustand, Kompensation oder Wiederaufnahme.
  • Kein iPaaS. Integrationsplattformen verbinden Systeme über fertige Konnektoren. Das überschneidet sich an den Rändern, aber der Schwerpunkt liegt dort auf Anbindung, hier auf Prozesssteuerung und Fehlersemantik.
  • Kein Ersatz für saubere Fachlogik. Ein schlecht durchdachter Prozess wird durch eine Engine nachvollziehbar, aber nicht richtig.

Wann sich der Einsatz lohnt

Nicht jede Anwendung braucht eine Workflow-Engine. Drei Indikatoren sprechen dafür:

  1. Mehr als zwei externe Systeme sind an einem Prozess beteiligt, und ein Teilausfall hinterlässt einen fachlich inkonsistenten Zustand.
  2. Der Prozess überlebt den Request. Wartezeiten auf Freigaben, Lieferantenantworten oder Fristen gehören dazu.
  3. Der Support fragt regelmäßig nach. Wenn „Wo hängt dieser Vorgang?“ eine wiederkehrende Frage ist, fehlt die persistierte Prozesssicht.

Umgekehrt gilt: Ein einzelner Schritt gegen ein einzelnes System braucht keine Engine. Der Aufbau kostet konzeptionelle Disziplin, und diese Investition rechnet sich erst ab einer gewissen Prozesskomplexität.

Ausblick

Zwei Entwicklungen prägen das Feld. Erstens wandert die Engine näher an die Anwendung: Statt einer zentralen Plattform, die alle Prozesse eines Unternehmens hält, bringen immer mehr Frameworks eine eingebettete Variante direkt mit — mit dem Effekt, dass Prozesssteuerung Teil der normalen Entwicklungsarbeit wird statt eines separaten Projekts.

Zweitens rücken KI-gestützte Schritte in die Workflows hinein: ein Modell klassifiziert eine Reklamation, extrahiert Daten aus einem Dokument oder formuliert einen Antwortentwurf. Solche Schritte sind nicht deterministisch, was die klassischen Engine-Eigenschaften eher wichtiger macht als weniger wichtig. Ein Schritt mit unsicherem Ergebnis braucht definierte Wiederholungsregeln, eine Abbruchbedingung und einen Übergabepunkt an einen Menschen — genau die Mechanik, die eine Workflow-Engine ohnehin bereitstellt.

Häufige Fragen

Worin unterscheidet sich eine Workflow-Engine von einer Message Queue? Die Queue garantiert die Zustellung einzelner Nachrichten, die Engine verwaltet den Zustand eines mehrstufigen Prozesses. Sie ergänzen sich, meist nutzt die Engine eine Queue als Transportschicht.

Was ist ein Kompensationsschritt? Die fachliche Umkehrung eines bereits ausgeführten Schrittes — Storno statt Rollback. Sie wird gebraucht, weil Aufrufe an fremde Systeme nicht transaktional zurückgenommen werden können.

Brauche ich BPMN? Nur, wenn Fachbereiche Prozesse mitlesen oder mitgestalten sollen. Entwicklergetriebene Workflows werden in der Praxis meist direkt im Code definiert, was näher an der Implementierung bleibt.

Was passiert bei einem Deployment mitten im Prozess? Laufende Workflows werden nach dem Neustart fortgesetzt, weil ihr Zustand persistiert ist. Zu beachten ist die Versionierung: Ändert sich die Schrittfolge, muss definiert sein, ob laufende Instanzen nach der alten oder der neuen Definition weiterlaufen.

Ist das nicht Overengineering für einen Onlineshop? Für einen Shop mit Standard-Checkout und ohne Systemanbindung durchaus. Sobald Zahlung, Bestand, ERP und Versand in einem Vorgang zusammenkommen, ersetzt die Engine allerdings nur Arbeit, die man sonst selbst und meist schlechter erledigt.

Wie teste ich einen Workflow? Die einzelnen Schritte testest du wie normale Funktionen. Für den Gesamtprozess kommt eine zweite Ebene dazu: gezielt einen Schritt scheitern lassen und prüfen, ob die Kompensationen in der richtigen Reihenfolge laufen und das System danach wieder in einem konsistenten Zustand steht. Dieser Fehlerpfad wird in der Praxis häufig übersehen — er ist aber genau der Grund, aus dem die Engine überhaupt eingeführt wurde, und gehört deshalb in die Testabdeckung wie der Gutfall.

Weiterführende Artikel