Die Herausforderung
- Volle Abstraktion der Server: Dies bedeutet, dass der Entwickler sich voll und ganz auf die Entwicklung der jeweiligen Funktion fokussieren kann. Bereitstellung und Ausführung auf verschieden Servern wird abstrahiert und muss nicht weiter beachtet werden. Es wird in diesem Zusammenhang oftmals von Function as a Service (FaaS) programming gesprochen.
- Eventbasierte und sofortige Skalierung.
- Bezahlung nach dem pay-as-you-go / pay-per-use Prinzip: Dies bedeutet, dass nur für die Zeit der Nutzung einer Ressource ein Preis bezahlt werden muss. Beispielsweise kostet die Ausführung einer Azure Function nur dann, wenn diese auch tatsächlich ausgeführt wird. Die Möglichkeit, dass die Azure Function ausgeführt werden kann (Bereitstellung), muss nicht bezahlt werden.
- Azure Functions haben für gewöhnlich nur eine einzige Aufgabe, die schnell abgearbeitet werden kann. Beispielsweise kann dies das Verschicken einer Mail oder das Ausrechnen eines gewissen Betrages sein.
- Wiederverwendbar: Durch die Tatsache aus dem eben genannten, ist eine Azure Function immer wiederverwendbar. Die Funktion kann beliebig oft aufgerufen werden und wird immer dasselbe tun ohne durch voran gegangen Durchläufe beeinflusst zu werden.
- Azure Functions werden eventbasiert gestartet: Oftmals werden die Funktionen über http-, queue oder andere Trigger gestartet.
Die Lösung
Wer jetzt auf den Gedanken gekommen ist Azure Function sei keine gute Möglichkeit, seine Business Prozesse abzubilden, der sollte diese Gedanken ganz schnell wieder beiseiteschieben, denn die Lösung für alle oben genannten Probleme bietet das freie opensource Framework Durable Functions. Es handelt sich hierbei um eine Erweiterung von Azure Functions, mit der es möglich ist, zustandsbehaftete Funktionen in einer serverless-Umgebung zu implementieren. Dies wird realisiert durch das Schreiben einer langlaufenden Orchestrierung als eine einzige Funktion, die über einen Zustand verfügt und alle zu erledigenden Aufgaben übernimmt. Das Framework unterstützt momentan hauptsächlich .Net C#. Durch die Community wurde allerdings die Möglichkeit geschaffen, das Framework auch innerhalb JavaScript oder F# zu verwenden. Der grundlegende Funktionsweise des Frameworks besteht aus drei verschieden Funktionstypen und einer Ausführungshistorie. Um Durable Functions nutzen zu können, bedarf es immer einer sogenannten Start-Funktion, einer Orchestrator-Funktion und einer oder mehrere Aktivitätsfunktionen. Die Starter-Funktion, welche üblicherweise über einen http-Endpunkt realisiert ist, stellt den Einstiegspunkt dar. Die Orchestrator-Funktion wird von der Starter-Funktion Benachrichtigung und verwaltet alle Aufrufe aller im Prozess verwendeten Komponenten. Die Orchestrator-Funktion bildet das Herz von Durable Functions und hält zusätzlich den State des kompletten Prozesses. Jeder Aufruf aus dem Orchestrator heraus, ruft eine sogenannten Aktivitätsfunktion auf. Diese Aktivitätsfunktion hat erstmal nichts weiter mit dem Durable Functions Framework zu tun. So können gewöhnliche Code-Abschnitte in Form von Azure Functions Aktivitätsfunktionen darstellen. Innerhalb dieser Funktionen ist es dem Entwickler überlassen, welche Aufgaben erledigt oder bearbeitet werden. Die letzte Komponente ist die Ausführungshistorie. Hier wird jeder Aufruf inklusive Rückgabe dokumentiert und gespeichert.
Einen guten Einstieg in das Thema Durable Functions mit Implementierungsbeispielen bietet das folgende Video an. Weitere gute Informationsquellen ist die folgende Microsoft Webseite.
Resümee
Über die Mechanismen von Durable Functions ist es nun möglich komplexe Workflows und Business Prozesse im Unternehmen durch einfachen C# Code zu implementieren. Wenn wir einen Blick in die Vergangenheit werfen würden, sind die Durable Azure Functions eine gute leichtgewichtige Alternative zu BizTalk Orchestrierungen oder Windows Workflow Foundation. Neben der Durable Functions stehen Ihnen natürlich auch weitere Orchetrierungs-Komponenten wie z.B. die Logic Apps oder Flow.
Die Vorteile einer solchen Implementierung auf Basis von Durable Functions liegen auf der Hand:
- Serverless Implementierung: Um die Infrastruktur und Skalierung kümmert sich der Hersteller Microsoft
- Pay as You go: im Endeffekt kann man behaupten, dass Sie nur Transaktionale Kosten haben -sprich per Workflowdurchlauf. So können Sie diese Kosten z.B. einem Businesesprozess, einer Fachabteilung oder einem Kunden direkt zuordnen.
- 24 x 7 SLA per Default: keine Bereitschaften, keine teuren Supportvertäge für die Infrastruktur, diese wird von Microsoft in 24 x 7 Modus betrieben.
- Optimierte Time to Market: Businessprozessimplementierung kann zu 100% im C# realisiert werden. Keine komplexen und empfindlichen Designer, die von Ihren Entwicklern erst erlernt werden müssen. Sie können einfach mit C# loslegen.
Weitere Hinweise
Eine Sache dürfen Sie bei der Modellierung Ihrer Businessprozesse nich vergessen und zwar das End-to-End-Monitoring. Denn Sie wollen den Überblick über die aktuell laufenden Prozessen in Ihrem Unternehmen behalten. Hierfür bieten wir eine ganz gute Lösung, welche die Integration der Durable Functions nativ Unterstützt. Werfen Sie hier für einen Blick auf folgenden Blogbeitrag.
