Noel Röhrig

Noel Röhrig

Softwareentwickler auf Rädern 🚎

02.10.2024 | 4 min Lesezeit

Azure Durable Functions

Durable Functions sind eine stateful Erweiterung von klassischen Azure Functions.

Azure Durable Functions blog image

Azure Functions repräsentieren die Zuspitzung von Cloud Computing: eine serverlose, hochskalierbare Plattform, die als Verkörperung von Microservice-Architekturen jeden Anwendungsfall in einer separaten, unabhängigen Instanz abbilden. Dieser Ansatz minimiert den infrastrukturellen Aufwand und ermöglicht es Entwicklern, sich voll und ganz auf die Geschäftslogik zu konzentrieren, ohne sich um die Verwaltung der zugrunde liegenden Infrastruktur kümmern zu müssen. Aber wie passen Komplexe oder langanhaltende Prozesse in dieses Konzept?

On Azure Functions

Azure Functions sollten idealerweise leichtgewichtige, unkomplizierte Prozesse darstellen. Sie sind ereignisgesteuerte (event-driven) und bedarfsorientierte (compute-on-demand) Ressourcen, die in der (Azure) Cloud ausgeführt werden. Ein entscheidendes Merkmal ist ihre "stateless" Natur: Jede Ausführung ist unabhängig von der vorherigen, ohne den Zustand zwischen den Aufrufen zu speichern. Unterstützt werden alle gängigen Sprachen.

Azure Functions werden typischerweise durch verschiedene Arten von Ereignissen ausgelöst, darunter:

  • HTTP-Trigger: zum Beispiel für API-Calls.
  • Geplante Aufgaben: wie regelmäßige Cron-Jobs.
  • Reaktionen auf Ereignisse: z.B. Änderungen in einer Datenbank (Changefeed) oder Nachrichten in einem Service Bus.

Functions werden in einer sogenannten Function App gehostet, die gemeinsame Konfigurationen und Identitymanagement bietet. Dadurch wird die Verwaltung und das Monitoring mehrerer logisch zusammenhängender functions vereinfacht und zentralisiert.

Vorteile von Azure Functions:

  • Skalierbarkeit: Automatische Anpassung der Ressourcen je nach Bedarf.
  • Schnelles und unabhängiges Deployment: Funktionen können isoliert entwickelt und bereitgestellt werden.
  • Granulare Kontrolle: Jede Funktion deckt einen spezifischen Anwendungsfall ab, was eine gezielte Fehlerbehebung und Optimierung ermöglicht.

Was sind Azure Durable Functions?

Azure Durable Functions erweitern die Azure Functions um die Möglichkeit, einen Zustand über lang laufende Workflows zu wahren. So lässt sich komplexe Businesslogik orchestrieren, bei denen der Status zwischen verschiedenen Verarbeitungsschritten erhalten bleiben muss.

Im Kern von Durable Functions stehen sogenannte Entity Functions (oder auch activities), die ähnlich wie normale Azure Functions einzelne Schritte eines Workflows abbilden. Darüber hinaus gibt es eine Orchestrator Function, die den Zustand des gesamten Workflows verwaltet und die verschiedenen Entity Functions entsprechend aufruft.

Eine Durable Function kann mehrfach für den gleichen Kontext aufgerufen werden. Deshalb ist ein wichtiger Aspekt, dass die einzelnen Entity Functions wiederholbar (replayable) sein müssen, oder dass die Orchestrator Function sicherstellt, dass sie nur einmal ausgeführt werden.

Die von Microsoft selbst angeführten typische Anwendungsfälle für Durable Functions sind:

  • Chaining: Verkettung mehrerer Funktionen, die nacheinander ausgeführt werden.
  • Fan-out/Fan-in: Parallele Ausführung mehrerer Funktionen und anschließende Konsolidierung der Ergebnisse.
  • Wiederholungen und Zeitverzögerungen: Verzögerte Ausführung von Funktionen oder periodische Wiederholungen.
  • Menschliche Interaktion: Prozesse, die auf Eingaben oder Genehmigungen von Menschen warten müssen.

Azure Durable Functions lösen einige der Kernprobleme, die bei der Verwendung von normalen Azure Functions auftreten können: Sie bieten eine integrierte Lösung für Zustandsverwaltung und die Orchestrierung komplexer Prozesse, die über längere Zeiträume laufen. Darüber hinaus, lassen sich Workflows die z.b. von externen Prozessen abhängig sind, bequem automatisieren. Der Orchestrator kann wiederholt eine Entity Function, die auf den externen Prozess wartet, anstoßen, bis dieser abgeschlossen ist.

Kernunterschiede zwischen Azure Functions und Azure Durable Functions

Zustandsverwaltung: Azure Functions sind zustandslos, während Durable Functions den Zustand zwischen den einzelnen Aufrufen und während des gesamten Workflows speichern können.

Langlaufende Prozesse: Während Azure Functions für schnelle, einmalige Aufgaben ausgelegt sind, eignen sich Durable Functions für langandauernde, komplexe Workflows.

Fehlerbehandlung und Wiederholungen: Azure Functions erfordern eine benutzerdefinierte Fehlerbehandlung, während Durable Functions integrierte Mechanismen für Fehlerbehebung und Wiederholungen bieten.

Komplexität: Azure Functions sind einfach und schnell einzurichten, während Durable Functions mehr Planungs- und Orchestrierungslogik erfordern.

Kosten: Beide Ansätze basieren auf einem "pay-per-execution"-Modell, aber Durable Functions können aufgrund der zusätzlichen Orchestrierung und Zustandsverwaltung höhere Kosten verursachen.

Fazit

Azure Functions und Azure Durable Functions decken unterschiedliche Anwendungsfälle ab. Während Azure Functions eine hervorragende Wahl für einfache, schnelle und stateless Prozesse sind, bieten Durable Functions eine leistungsstarke Lösung für komplexe, langlaufende Workflows. Allerdings sollte bei der Entscheidung für Durable Functions auch die Kostenstruktur berücksichtigt werden, da diese in einigen Fällen Microsofts Preisplänen in die Karten spielt. Es lohnt sich, zu prüfen, ob eine traditionellere Architektur kostengünstiger implementiert werden kann oder die Vorteile von Durable Functions überwiegen.