Serverless Deployment in Form von Azure Functions
Vorteile zu konventionellen Alternativen

In diesem Blogartikel geben wir einen Einblick in Serverless Deployment mittels Azure Functions. Dafür werden wir folgend eine kurze Erklärung für Azure Functions geben, wie dies sich zu AKS (Azure Kubernetes Service) unterscheidet, welche Vorteile Azure Functions haben gegenüber konventionellen Alternativen und am Schluss einen Einblick in einen Use Case geben.
Was ist also Azure Functions?
Azure Functions ist ein serverloser Compute-Dienst von Microsoft, der es ermöglicht, Code auszuführen, ohne sich um die Bereitstellung oder Verwaltung von Servern kümmern zu müssen. Diese „Functions-as-a-Service“ Lösung entlastet Unternehmen von der Notwendigkeit, eine eigene Infrastruktur zu betreiben. Der Fokus liegt hier auf der Ausführung von Code in Reaktion auf bestimmte Ereignisse, wie z.B. HTTP-Anfragen, Datenbankänderungen oder Nachrichten in einer Warteschlange.
Warum sollten Unternehmen Azure Functions in Betracht ziehen?
Azure Functions bietet zahlreiche Vorteile, die gerade für Führungskräfte und Entscheidungsträger von Bedeutung sind:
- Kosteneffizienz: Mit Azure Functions bezahlen Unternehmen nur für die tatsächliche Rechenleistung, die sie nutzen. Dies reduziert unnötige Kosten, da keine ungenutzten Ressourcen vorgehalten werden müssen. Besonders für unregelmäßige oder sporadische Arbeitslasten ist dies ein großer Vorteil.
- Skalierbarkeit: Azure Functions skaliert automatisch, um den Anforderungen gerecht zu werden, egal ob es sich um wenige Anfragen oder Millionen handelt. Diese automatische Skalierung sorgt dafür, dass das Unternehmen immer die notwendige Leistung zur Verfügung hat, ohne dass manuell eingegriffen werden muss.
- Schnellere Markteinführung: Da keine Infrastruktur bereitgestellt oder verwaltet werden muss, können Entwickler sich auf das Wesentliche konzentrieren – die Entwicklung von Anwendungen. Dies beschleunigt die Entwicklungsprozesse erheblich und ermöglicht es Unternehmen, schneller auf Marktanforderungen zu reagieren.
- Integration mit anderen Azure-Diensten: Azure Functions lässt sich nahtlos in andere Azure-Dienste wie Azure Logic Apps, Azure Cosmos DB und Azure Event Grid integrieren. Diese Flexibilität erleichtert es, bestehende Cloud-Lösungen zu erweitern und neue Workflows zu automatisieren.
Wie unterscheiden sich Lösungen wie Azure Kubernetes und Azure Functions?
Azure Functions und Kubernetes sind beide beliebte Cloud-Computing-Plattformen, die zum Bereitstellen und Verwalten von Anwendungen verwendet werden. Hier sind die wichtigsten Unterschiede zwischen den beiden:
- Container-Orchestrierung: Kubernetes ist in erster Linie eine Container-Orchestrierungsplattform, die es Entwicklern ermöglicht, containerisierte Anwendungen über ein Cluster von Knoten zu verwalten und auszuführen. Es bietet erweiterte Funktionen wie Auto-Scaling, Lastenausgleich und Bereitstellungsmanagement. Azure Functions hingegen ist ein serverloser Compute-Dienst. Er ermöglicht es Entwicklern, Funktionen zu schreiben und bereitzustellen, ohne sich um Infrastrukturmanagement oder Skalierung kümmern zu müssen.
- Bereitstellungsmodell: Azure Kubernetes Service (AKS) und Azure Functions bieten unterschiedliche Ansätze für die Bereitstellung und Ausführung von Anwendungen. AKS basiert auf der Container-Orchestrierung und ermöglicht es, Anwendungen als eine Sammlung von miteinander kommunizierenden, containerisierten Services zu betreiben. Diese Services laufen in Pods, die auf mehreren Knoten verteilt werden können, wodurch komplexe und skalierbare Multi-Container-Workloads unterstützt werden. Jede Anwendung kann dabei aus mehreren Microservices bestehen, die unabhängig voneinander bereitgestellt und verwaltet werden. Im Gegensatz dazu stellt Azure Functions Funktionen als „serverless“ Code bereit, der nicht in Containern gekapselt ist, sondern als isolierter Code läuft. Jede Funktion wird nur aufgerufen, wenn ein spezifisches Ereignis ausgelöst wird, und führt eine einzelne Aufgabe aus.
- Skalierung: Kubernetes ermöglicht horizontale Skalierbarkeit, indem es Entwicklern erlaubt, zusätzliche Pods oder Knoten zu starten, um erhöhte Arbeitslasten zu bewältigen. Es unterstützt Auto-Scaling basierend auf Ressourcennutzung oder benutzerdefinierten Metriken. Azure Functions unterstützt ebenfalls Auto-Scaling, aber es skaliert auf Funktionsebene. Jede Funktion kann unabhängig skaliert werden, um unterschiedliche Arbeitslasten zu bewältigen.
- Serverloses Computing: Azure Functions ist um das Konzept des serverlosen Computings herum entwickelt. Es abstrahiert die zugrunde liegende Infrastruktur und berechnet nur den tatsächlichen Ressourcenverbrauch. Kubernetes hingegen erfordert, dass Entwickler die Infrastruktur für ihre Anwendungen bereitstellen und verwalten.
Entwicklungserfahrung: Kubernetes erfordert mehr anfängliche Konfiguration und Einrichtung im Vergleich zu Azure Functions. Entwickler müssen Bereitstellungsmanifeste, Dienste und andere Ressourcen definieren, um Anwendungen bereitzustellen. Azure Functions, als serverloser Dienst, bietet eine einfachere Entwicklungserfahrung. Entwickler können sich auf das Schreiben des Codes für einzelne Funktionen konzentrieren, ohne sich um die zugrunde liegende Infrastruktur zu kümmern.
Verwaltete Dienste: Azure Functions ist ein vollständig verwalteter Serverless-Dienst, bei dem Microsoft die gesamte Infrastrukturverwaltung, automatische Skalierung und Hochverfügbarkeit übernimmt, sodass sich Entwickler nur auf den Code konzentrieren müssen. AKS hingegen ist Microsofts verwalteter Kubernetes-Dienst und bietet die Möglichkeit, Kubernetes-Cluster ohne umfassende eigene Infrastrukturverwaltung bereitzustellen. Obwohl AKS Kubernetes-Cluster in der Cloud verwaltet und für automatische Skalierung, Sicherheit und Updates sorgt, bleibt die Konfiguration und Verwaltung der Container und Anwendungen innerhalb des Clusters in der Verantwortung des Nutzer.
Azure Functions - kurzgesagt:
Zusammenfassend lässt sich sagen, dass Azure Functions besonders geeignet ist für leichtgewichtige, serverlose Computing-Szenarien, die typischerweise kleine, eigenständige Anwendungen mit minimalen Abhängigkeiten umfassen. Diese Anwendungen sind oft ereignisgesteuert und benötigen keine kontinuierliche Ausführung, wodurch sie optimal von der automatischen Skalierung und den minimalen Verwaltungsanforderungen von Azure Functions profitieren.
Azure Kubernetes Service (AKS) hingegen bietet eine leistungsstarke Plattform für die Orchestrierung und Verwaltung komplexer, containerisierter Anwendungen, die aus mehreren Komponenten bestehen und häufig höhere Anforderungen an Skalierbarkeit, Netzwerkverwaltung und Integration haben. AKS eignet sich besonders gut für größere, dauerhaft laufende Anwendungen mit komplexen Abhängigkeiten und fein abgestimmten Anforderungen an die Infrastrukturverwaltung.
Ein Beispiel Use Case
In vielen Szenarien werden Daten von Webseiten benötigt, die jedoch keine API zur Verfügung stellen. Hier kommt der Einsatz eines Webcrawlers ins Spiel, um die erforderlichen Informationen automatisiert von der Webseite abzurufen.
In unserem Beispiel haben wir mithilfe von Azure Functions und C# eine Webcrawler-Anwendung entwickelt, die regelmäßig Webseiten durchsucht, Daten extrahiert und diese in Azure-Datenbanken historisiert und in Azure Tables zwischenspeichert. Die nahtlose Integration von Azure macht es einfach, eine solche Anwendung schnell und effizient in der Cloud zu betreiben, ohne eigene Server oder komplexe Infrastruktur verwalten zu müssen.
Oft durchsuchen Crawler Webseiten in festgelegten Intervallen, um die benötigten Daten zu extrahieren und in einer geeigneten Form abzuspeichern.
Azure Functions bietet die Möglichkeit, Event-basierte Trigger zu implementieren, die den Code automatisch ausführen. In unserem Fall haben wir uns für einen Timer-Trigger entschieden, da der Crawler regelmäßig Daten extrahieren soll.
Zur Datenerfassung setzen wir auf Selenium, eine zuverlässige Open-Source-Bibliothek, die den Zugriff auf Webseiten und deren Inhalte erleichtert.
Da wir uns bereits in der Azure-Umgebung befinden, war es unkompliziert, eine passende Speicherlösung einzurichten. Wir verwenden Azure Tables, um den aktuellen Status zu speichern, und eine Azure SQL-Datenbank zur Historisierung der Daten, falls diese später erneut benötigt werden. Nach der Implementierung mussten wir nur noch die Anwendung in der Azure Cloud starten.
Bei einer durchschnittlichen Laufzeit von 11949ms sind wir bei einer Gesamtlaufzeit von 4,77 Minuten pro Tag, wenn die Funktion jede Stunde einmal läuft. Die Kosten dieser 4,77 Minuten beziehen sich somit auf <€0.01 pro Tag. (Nur die function).
Fazit
Unser Beispiel zeigt, wie einfach es ist, eine Anwendung mit Azure Functions zu erstellen und zu betreiben. Es sind keine eigenen Server oder Datenbanken erforderlich – Azure übernimmt das Management. Bei Bedarf lässt sich die Infrastruktur per Knopfdruck skalieren, was das Ganze zudem kostengünstig macht, da keine eigene Hardware benötigt wird.
Sie sehen bei sich ebenfalls Umsetzungspotenzial? Dann zögern Sie nicht, sich mit uns in Verbindung zu setzen. Wir unterstützen Sie gerne bei Ihrem Vorhaben!