Azure Logic Apps sind eine hervorragende Lösung zur Automatisierung von Workflows und verschiedenen Arbeitsprozessen. Wir haben bereits in unserem Blog über einige Tipps und Best Practices von Logic Apps geschrieben. In diesem Beitrag will ich näher auf Probleme und Lösungsoptionen bei der Verarbeitung von Massendaten mittels Logic Apps eingehen.
Massenaufruf von Logic Apps
Bei der Massenverarbeitung von Daten mittels Logic Apps können unterschiedliche Probleme auftreten. Häufig kommt es vor, dass verschiedene Services oder die Logic App selbst zu oft aufgerufen werden. Dies führt zu der HTTP-Antwort 429 Too Many Requests
.
Werden viele Daten in einer hohen Frequenz verarbeitet, ist es möglich, dass eine Logic App in kurzer Zeit viele Durchläufe tätigt. Ruft die Logic App während des Workflows andere Services auf, kann es sein, dass hier ein Maximum an Anfragen verschickt wird, sodass ein 429 Too Many Requests
Fehler in der Logic App auftritt. Ist es nicht möglich oder gewollt die aufzurufenden Services so abzuändern, dass er die Vielzahl an Requests bewerkstelligen kann, können sogenannte Retryoptionen im Aufruf in der Logic App genutzt werden. Bei diesen Einstellungen kann man nicht nur die Anzahl der Wiederholungsversuche konfigurieren, sondern auch eine Zeit zwischen diesen festlegen. Diese Zeit kann entweder exponentiell zwischen den Wiederholungen gesteigert werden oder fix festgelegt werden.
Eine weitere Möglichkeit ist es, die Durchläufe der Logic App selbst zu limitieren. Diese Begrenzung kann in den Einstellungen des Triggers der Logic App vorgenommen werden. Hier ist es möglich, eine Anzahl an erlaubten gleichzeitigen Durchläufen, zwischen 1 und 100 auszuwählen.
Ist die Anzahl der eingestellten maximalen simultanen Durchläufe erreicht, werden weitere Aufrufe in die Warteschlange der Logic App hinzugefügt. Auch für diese Warteschlange ist es möglich, die Anzahl der maximal zu wartenden Logic Apps Aufrufe zu begrenzen. Für die maximale Anzahl an wartenden Durchläufen kann ein Wert zwischen 10 und 100 (bzw. 200 für Multitenant) eingestellt werden.
Hat die Anzahl der wartenden Instanzen diese Grenze erreicht, akzeptiert die Azure Logic Apps-Engine keine neuen Workflow-Instanzen mehr zur Ausführung. Der Webhook-Trigger gibt in diesem Fall den Fehler 429 Too Many Requests
zurück.
Werden die Daten kein erneutes Mal an die Logic App übermittelt, können wichtige Daten im Prozess verloren gehen. Eine Möglichkeit dies zu verhindern, ist die Nutzung einer Azure Queue. Auf die Nutzung von Azure Queues mittels Logic Apps werde ich im Folgenden genauer eingehen.
Nutzung von Azure Queues zum Handeln von Massendaten
Azure Queue Storage ist ein Dienst für die Speicherung großer Nachrichtenmengen. Der aufrufende Service, kann folglich so umstrukturiert werden, dass dieser nicht direkt die Logic App aufruft, sondern den zu sendenden Payload in eine Azure Queue schreibt. Jede dieser Nachrichten wird dann einzeln in der Queue gespeichert. In der Logic App, die zuvor den Payload im Aufruf erhalten hat, wird der Trigger so geändert, dass er auf die jeweilige Queue hört. Sobald eine oder eine beliebig eingestellte Anzahl an Nachrichten in der Queue liegt, startet die Logic App und liest die Nachrichten aus. Hierbei werden die Nachrichten, die zuerst in die Queue übertragen wurden, zuerst ausgelesen. Nach erfolgreicher Verarbeitung der Nachrichten in der Logic App, müssen die Daten aus der Queue gelöscht werden. So kann sichergestellt werden, dass keine weiterzuleitenden Nachrichten verloren gehen. Im bereits implementierten Azure Queue Trigger der Logic App, kann ebenfalls die Zeit eingestellt werden, wie oft überprüft werden soll, ob sich Nachrichten in der Queue befinden. Die Logic App wird nur dann aktiviert, wenn die festgelegte Zeit verstrichen ist und Nachrichten in der Warteschlange vorhanden sind. Dies ist besonders praktisch, falls der Durchfluss an Daten nicht dauerhaft ist und die Logic App somit nicht umsonst startet, falls keine neuen Nachrichten vorliegen.
Fazit
Bei einem hohen Durchsatz an Nachrichten, entsteht häufig das Problem, dass zu viele Nachrichten in zu kurzer Zeit gesendet werden. Um hier Fehler beim Aufrufen von Logic Apps oder anderen Services zu verhindern, können in den Einstellungen des Triggers unter dem Reiter Concurrency Control
die Logic App Durchläufe begrenzt werden. Außerdem können durch Retryoptionen in den Aufrufen anderer Services oder durch eine zwischengeschaltet Azure Queue Datenverlust verhindert werden.