Komplexe Prozesse mit AWS Step Functions skalieren
Der Schmerz
Die Implementierung von digitalen Prozessen kann sehr komplex sein. Dabei liegt die Komplexität einerseits in der Implementierung und andererseits im Betrieb und der Skalierbarkeit.
In der Implementierung steigt die Komplexität durch die Anzahl der Prozessschritte und besonders durch die Verzweigungen und Fehlerbehandlungen. Der Prozess wird als Monolith sehr schnell unübersichtlich und durch die steigende Anzahl von Verzweigungen ist unklar, ob alle möglichen Zustände und Fehlerfälle adäquat verarbeitet werden.
Im Betrieb kann vor allem die Skalierbarkeit und Fehleranfälligkeit der Lösung problematisch sein. Die Ausführungszeit der Prozesse kann je nach Anwendungsfall mehrere Stunden, Tage oder Monate betragen. Dabei ist es besonders wichtig, dass die Ausführung fehlerfrei weiterläuft, auch wenn Server oder Container gewartet, hinzugefügt oder entfernt werden. Im Bereich der Skalierbarkeit sollte der Prozess mit dem Unternehmen wachsen. Beispielsweise sollte ein Abrechnungsprozess auch schnell wachsende Nutzer- oder Verbrauchsdaten verarbeiten können.
AWS Step Functions
AWS Step Functions ist ein visueller Workflow-Service, der zur Orchestration von Services und Automatisieren von Prozessen verwendet wird. Dabei können Zustandsautomaten (State Machines) erstellt werden, die aus Aufgaben, Verzweigungen, Parallelisierungen, Error-Handling etc. bestehen. Für die Implementierung von Prozessen eignen sich besonders Zustandsautomaten, da die einzelnen Zustände, Aktionen über Übergänge genauer definiert und visualisiert werden.
Step Functions unterstützt dabei, Prozesse in kleine Bausteine zu zerlegen, die miteinander verbunden sind. Aufgaben können beispielsweise Ausführungen von serverlosen AWS Lambda-Funktionen sein, die Verbrauchsdaten auslesen, Preise berechnen, Rechnungen generieren etc. Über die Übergänge werden die Aufgaben miteinander verbunden. Dabei ist standardmäßig der Ausgabewert der einen Aufgabe der Eingabewert der Folgenden (Input and Output Processing). Des Weiteren können Verzweigungen, Pausen, Parallelausführungen und Schleifen implementiert werden, um beliebig komplexe Prozesse abzubilden.
Der Zustand der Ausführung wird jederzeit von Step Functions verwaltet. Die Ausführung kann dabei bis zu einem Jahr laufen, ohne dass ein Timeout auftritt. Es können vollständig skalierbar viele Millionen Ausführungen parallel durchgeführt werden. Über die AWS Managementkonsole können dabei Ausführungen visuell inspiziert werden. Das hilft besonders beim Debugging, da Fehler und die jeweiligen Ein- und Ausgaben direkt betrachtet werden können.
Außerdem bietet Step Functions viele eingebaute Funktionen an, die häufig bei der Implementierung von Prozessen benötigt werden. Dazu zählen z. B. Wiederholungsversuche und Funktionen der Fehlerbehandlung.
Vorteile von AWS Step Functions
Zu den Hauptvorteilen von AWS Step Functions zählt die hohe Skalierbarkeit in Kombination mit dem Pay-as-you-go-Preismodell. Die definierten Step Functions skalieren problemlos mit wachsenden Anforderungen. Da der Service mit keinen Grundkosten verbunden ist, lohnt sich der Einsatz von AWS Step Functions besonders bei Prozessen, die gelegentlich gestartet werden, wie z. B. monatliche Abrechnungen.
Das Zerteilen von Prozessen in einzelne Prozessschritte reduziert die Komplexität und erhöht die Wartbarkeit des Quellcodes. Entwickler*innen können entkapselte Prozessschritte unabhängig ausimplementieren. Durch die Visualisierung der Step Function sind außerdem alle Schritte und Übergänge auch für den Fachbereich ersichtlich. Außerdem wird die Step Function bei dem Deployment validiert. Fehlerhafte Übergänge oder unerreichbare Aufgaben werden dadurch frühzeitig identifiziert.
Wenn Sie serverless Dienste wie AWS Lambda nutzen, profitieren Sie ebenfalls von der hohen Ausführungsdauer der Prozesse. Während Lambda-Funktionen nach 15 Minuten in Timeouts laufen, können Standard Step Functions mit einer Ausführungsdauer von bis zu einem Jahr durchgeführt werden.
Durch die visuelle Darstellung in der AWS Console sind außerdem alle Übergänge und möglichen Zustände auch für den nichttechnischen Fachbereich einfach ersichtlich. Die vergangenen Ausführungen können visuell inspiziert und nachvollzogen werden. Dadurch wird es in dem DevOps-Bereich deutlich vereinfacht, Fehler in den Prozessen zu identifizieren.
Step Functions bietet außerdem leistungsstarke Funktionen der Fehlerbehebung. Beispielsweise können gescheiterte Aufgaben über einfache Parameter erneut gestartet werden. Dabei kann die maximale Anzahl an Ausführungsversuchen und die (zufällige) Wartezeit zwischen den Versuchen über Parameter konfiguriert werden.
Über Activities können externe Worker-Schritte in die Zustandsautomaten eingebettet werden. Damit können beispielsweise manuelle Freigabeprozesse implementiert werden. Ein Worker-Programm kann dabei neue Ausführungen abrufen, in denen eine Freigabe aussteht und beispielsweise den Fachbereich informieren. Für die Ausführung kann dann zu einem späteren Zeitpunkt mithilfe eines Task-Tokens das Ergebnis von dem Schritt gesendet werden, beispielsweise indem eine Person am nächsten Tag über eine Weboberfläche die weitere Ausführung freigibt.
Anwendungsfälle
Ein alltagsnahes Beispiel für den Einsatz von AWS Step Functions wäre eine Bestellung über einen Online Shop. In Abbildung 1 wird ein minimalistischer Prozess vorgestellt. Zuerst wird von einer Funktion geprüft, ob die gewünschten Artikel auf Lager sind. Wenn die Waren verfügbar sind, wird zunächst die Bestellung angelegt/aktualisiert, eine Rechnung generiert, der Rechnungsbetrag eingezogen und schließlich wird die Bestätigung versendet. Falls die Waren nicht verfügbar sind, wird der/die Kunde/-in informiert.
Ein weiteres Beispiel ist die monatliche Kundenabrechnung von SaaS-Unternehmen. In dem Beispiel werden die Abrechnungen zum Anfang des Monats erstellt. Die State Machine wird dazu automatisch zum Beginn des Monats gestartet. Im ersten Schritt werden die Kunden geladen, die abgerechnet werden müssen. Über eine Map werden parallel die notwendigen Schritte bearbeitet. Dabei kann eingestellt werden, wie viele Ausführungen maximal gleichzeitig durchlaufen werden. Für jeden Kunden wird dann der Preis berechnet, die Rechnung generiert und versendet.
Die dargestellten Prozesse wurden für ein besseres Verständnis minimalisiert. Häufig werden deutlich mehr Aufgaben und Verzweigungen benötigt. Hilfreich bei dem Einsatz von AWS Step Functions ist, dass Aufgaben selber Step Functions sein können. Beispielsweise kann die Aufgabe “Rechnung generieren” ein eigener Prozess sein, der aus den Schritten wie Rechnungsnummer generieren, Rechnung anlegen, PDF generieren, PDF ablegen etc. besteht.
Fazit
AWS Step Functions ist ein sehr hilfreicher Service, um digitale Prozesse zu implementieren. Der Einsatz ist in vielen Bereichen sinnvoll, besonders wenn es sich um komplexe Vorgänge handelt.
In der Entwicklung profitieren Unternehmen von Step Functions, da die Komplexität reduziert und die Wartbarkeit erhöht wird. Der Prozess wird in kleine Aufgaben geschnitten, die unabhängig voneinander implementiert werden können. Durch die Visualisierung sind alle Zustände und Übergänge einfach ersichtlich.
Im Betrieb profitieren Unternehmen durch die hohe Skalierbarkeit und das Pay-as-you-go-Preismodell. Besonders Prozesse wie monatliche Abrechnungen, die gelegentlich ausgeführt werden, können skalierbar für wenige Cents betrieben werden.
Wie implementieren Sie digitale Prozesse in Ihrem Unternehmen und welche Vor- und Nachteile entstehen?