Messaging mit dem Service Bus ermöglicht die...

Read more

Sebastian Meyer, Microsoft & SAP...

Read more

Für Entwickler, Architekten, Projektleiter und...

Read more

In der Welt der Softwareentwicklung ist die...

Read more

QUIBIQ spendet für den guten Zweck – und für...

Read more

Eine bestimmte Antwort auf einen HTTP Request zu...

Read more

In einer Welt, die von stetigem Wandel geprägt...

Read more

In einem unserer Kundenprojekte, war das Ziel eine...

Read more

QUIBIQ Hamburg wird mit dem Hamburger...

Read more

Zwei Tage lang wurde vom 14.-15.11 wieder das...

Read more

How-to: Azure Durable Function und was sie von den normalen Functions unterscheidet

Durable Function ist eine Erweiterung der bestehenden Azure Function. Für sie gibt es eine Vielzahl von Anwendungsmöglichkeiten.

Verkettung von Functions

In erster Linie lassen sich damit die Möglichkeiten der Function erweitern, um etwa mehrere Functions zu verketten, die nacheinander aufgerufen werden (F1 -> F2 -> F3 -> F4). Unter normalen Umständen kann so etwas nur sehr unübersichtlich und umständlich umgesetzt werden. Functions, die aufeinander aufbauen, weil das Ergebnis von F1 für den Aufruf von F2 benötigt wird usw., können dagegen mit der Durable-Function einfach und übersichtlich gestaltet werden. Auch die Reihenfolge lässt sich einfach und auf einen Blick sehen.

Es lassen sich darüber hinaus mehrere Functions asynchron ausführen, um ein Gesamtergebnis zu bekommen (F1 -> F2, F3, F4 -> F5). Hat man mehrere Functions, die unterschiedlichen Aufgaben erledigen, unabhängig voneinander und/ oder auch parallel, muss am Ende nur das Gesamtergebnis abgewartet werden. Man kann also alle Functions asynchron/ parallel starten und das Ergebnis abwarten, was entsprechend der Function-Runtime auch im Vergleich zur sequenziellen Ausführung viel Zeit sparen kann.

Damit lässt sich z.B. aber auch ein HTTP-Call asynchron ausführen. Mithilfe der Durable-Funktion kann man dann zur Laufzeit den Status abfragen, wenn man auf eine Fremd-API zugreift oder selbst eine HTTP-Function zur Verfügung stellt, die für die Datenbeschaffung oder Konvertierung mehr Zeit benötigt. Wenn ein Ergebnis länger braucht, bis es zur Verfügung steht, lässt sich die Function per Durable-Function antriggern. Während der Laufzeit kann man den Status abfragen (z.B. Running, Finish …). Ist die Function dann fertig, bekommt man über dieselbe URL die Info Finish und das Ergebnis. Die Antwort kommt allerdings nicht automatisch. Man muss sie manuell per Status-URL abfragen.
 

Timeout frei einstellbar

Wichtigster Pluspunkt für die Durable-Function ist jedoch, dass es ein Timeout für die Ausführung gibt, der nicht wie bei der Standard Function bei 10-30 Minuten liegt. Für die Durable-Function lässt sich das Timeout variabel gestalten. Es sind sowohl fünf Minuten möglich, als auch, je nach Anwendungsfall, mehrere Stunden oder Tage, sogar bis hin zu „keinem“ Timeout. Dafür wird im Durable-Function-Projekt, in der Datei "Host.json" die Zeile „"functionTimeout": "06:00:00"“ eingefügt. In diesem Fall bedeutet diese Zeile ein Timeout von sechs Stunden.

Das kann notwendig sein, wenn man eine Function hat, die bei der Ausführung den Timeout-Rahmen für eine normale Function sprengt, weil die Ausführung eine Stunde dauert. Dieses Timeout bezieht sich auf den Aufruf der gesamten Durable-Function. Hier kann zum Beispiel ein Aufruf von fünf einzelnen Functions erfolgen, wobei F1-F4 dann 40 Minuten Runtime haben, aber F5 benötigt nochmal für Berechnungen oder ähnliches fünf Stunden. Bei einer Standard-Function wäre die Ausführung so nicht möglich, da sich hier ein Timeout von maximal 30 Minuten einstellen lässt. Entsprechend würde sich die Function nie testen lassen, da vor der Beendigung immer das Timeout eingreift und die Function mit Timeout beendet wird.

Fazit

Es gibt mehrere Anwendungsmöglichkeiten für eine Durable-Function, dennoch ist ihr Einsatz nicht immer sinnvoll und sollte auf den Anwendungsfall abgestimmt werden. Eine Durable-Function bringt viel zusätzlichen Code mit, der sonst nicht benötigt wird. Das kann die Übersichtlichkeit beeinträchtigen. Hinzu kommen mehrere zusätzliche Functions in der Liste, wovon nur eine aufgerufen wird, um die Durable-Function zu starten. Auch das Überwachen einer Durable-Function eine sehr aufwendige und komplexe Angelegenheit, weil man die Durable-Function und jede einzelne Function zusätzlich im Auge behalten muss.

Eine Durable-Function ist dann sinnvoll, wenn man an die Timeout-Grenze kommt oder eine Function durch verschiedene Aufgaben an Komplexität immer weiter zunimmt, weil man immer mehr Abhängigkeiten und asynchrone Aufgaben beachten und abwarten muss. Deshalb sollte bei der Entscheidung über die Verwendung einer Durable-Function immer Aufwand und Nutzen abgewogen werden.

Dieser quiTeq-Tipp kommt von Florian, QUIBIQ Stuttgart

© QUIBIQ GmbH · Imprint · Data protection