Azure Durable Functions – die Lösung für komplexe Business Szenarien

Azure Durable

Die Herausforderung

Der heutige Blogbeitrag gibt einen kurzen Einblick in das Thema Durable Functions und warum diese heute in der Entwicklung von Azure Functions für komplexe Business Szenarien nicht mehr wegzudenken sind.

Bevor mit Azure Durable Functions begonnen werden kann, muss Klarheit über den Begriff „serverless“ und die Eigenschaften von Azure Functions geschaffen werden. Grundlegend sind Azure Functions immer serverless.

Unter dem Begriff „serverless“ wird in diesem Beitrag folgendes verstanden:

  • 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.

Die typischen Eigenschaften einer Azure Function, neben den oben genannten serverless-Eigenschaften sind unter anderem:

  • 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.

Stateless: Eine Azure Function wird atomar ausgeführt. Dies bedeutet, dass die Azure Function keinen Zustand besitzt.

Durch die eben erwähnten Eigenschaften von serverless und stateless kann eine Vielzahl von Use-Cases einfach und schnell abgebildet werden. Weitere Informationen bzgl. Use-Cases mit Azure Functions können Sie HIER oder HIER nachlesen.

Sollen aber komplexere Business Szenarien oder andere komplexere Prozesse mittels Azure Functions gelöst werden, so treten an einigen Stellen Hürden auf, die nur mit dem richtigen Werkzeug bewältigt werden können. Ein einfaches Error-Handling oder das Steuern sequentieller Abläufe, ist mittels Azure Function nicht möglich. Wie soll beispielsweise innerhalb einer Azure Function auf Fehler reagiert werden, wenn die jeweilige Azure Function Ergebnisse für weitere Functions erzeugt? Des Weiteren treten Hürden bei dem sogenannten fanning out und fanning in auf.
Das fanning out bedeutet, dass mehrere parallellaufende Funktionen an einer gemeinsamen Aufgabe arbeiten und im fanning in zu einem einzigen Ergebnis gelangen, welches in weiteren Funktionen verwendet werden soll. Das Wissen über den aktuellen Zustand eines Prozesses oder einer Funktion ist bei der Eigenschaft stateless nicht gegeben. Somit kann die Folgeaktion nicht wissen, dass die voran gegangen Azure Functions all ihre Aufgaben erledigt haben. Hier bedarf es eines Zustandes zur Bewältigung dieser Aufgabe. Ein ähnliches Problem bringt die externe Event Korrelation mit sich. Hier muss auf mehrere Events oder Eingaben gewartet werden, um eine Azure Function auszulösen. Auch hier besteht wieder das Problem, dass nicht ermittelt werden kann, ab wann alle Funktionen eine Eingabe oder ein Event erhalten haben. Als nächste Hürde sind Interaktionen zwischen Mensch und Funktion zu erwähnen. Wie können menschliche Interaktionen in einer atomaren Ausführung aufgenommen und bearbeitet werden. Die Eigenschaft des kurzen Lebenszyklus widerspricht dieser Anforderung.
Ein weiteres Szenario, welches oftmals Anwendung in vielen Prozessen findet, ist ein langläufiger asynchroner API-Call. Beispielsweise das Abrufen von Daten eines Dritt-Anbieters mittels http kann viel Zeit in Anspruch nehmen. Der http-Trigger der Azure Functions ist laut Dokumentation von MS auf 120 Sekunden begrenzt. Wird innerhalb dieser Zeit keine Antwort erhalten, so bricht die Azure Function fehlerhaft ab. Es gibt eine Vielzahl weitere Hürden, die es für komplexere Prozesse zu lösen gilt.

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

End-To-End-Monitoring
Data Passion Milen & Carsten
Data Passion Milen & Carsten
HABEN WIR
IHR INTERESSE
GEWECKT?
Schreiben Sie uns eine kurze E-Mail oder rufen Sie uns einfach an! Wir kümmern uns um Ihr Anliegen innerhalb der nächsten 24 Stunden.

Tel.: +49 (40) 6963816–0
Tel.: +49 (151) 1176898-0
E-Mail: [email protected]

Kontaktanfrage

Kontaktanfrage