Azure Container und Serverless Services: Die richtige Entscheidung fällen

Microsoft Azure bietet ein breites Angebot im Bereich von Container Services und Serverless Computing. Viele Cloud Architekten und Public-Cloud Leaders stehen somit vor der Frage, welche Services für ihren Anwendungsfall die passenden sind. In diesem Blog liefere ich eine Übersicht der Services und Szenarien und erleichtere damit Architekturentscheide.

Autor: Yu Li

Das Microsoft Azure Ökosystem bietet eine sehr breite Palette an Services in Bezug auf Container und Serverless Apps. Die Vielfalt des Public-Cloud-Angebots bringt Flexibilität, Effizienz und Innovationskraft. Aber sie stellt auch viele Cloud-Architekten und Public-Cloud-Verantwortliche vor Herausforderungen, wenn es um Architekturentscheide geht. Nicht selten kam bei mir schon das Gefühl auf, den Wald vor lauter Bäume nicht mehr zu sehen. Ein Entscheidungsbaum kann dabei wieder Klarheit und einen Überblick schaffen. 

Die Gretchenfrage: Welcher Service eignet sich wann?

Welcher Service wann Sinn macht, hängt von dem Einsatzszenario und der Kernfunktion ab. Um einen klaren Überblick zu geben, zeige ich in Abbildung 1 sechs relevante Microsoft Azure Services im Kontext Container und Serverless, ihre Kernfunktionen und die Einsatzszenarien.

Abbildung 1_6 relevante Microsoft Azure-Services.png
Abbildung 1: 6 relevante Microsoft Azure Services, ihre Kernfunktionen und Einsatzszenarien.

Sechs Azure Container & Serverless Services kurz erklärt

Die ausgewählten sechs Azure-Services decken eine oder mehrere der folgenden Kernfunktionen ab:

  • Container Service umfasst die Funktionen zum Betreiben eines Containers, von Networking, Sicherheit, Skalierung bis zum Deployment. 
  • Orchestration beinhaltet die Management-Funktionen von mehreren Containern, z.B. Deployment und Rollback von Containern, Scale-out und individuelle Skalierung, Zuweisung von Host-Ressourcen an Container, Load Balancing und Monitoring. 
  • Serverless ist eine Cloud-n Native Fähigkeit, die es Entwicklern ermöglicht, Anwendungen zu erstellen und auszuführen, ohne Server verwalten zu müssen.
    Service Mesh erweitert die Cloud-n Native Anwendungen um Beobachtbarkeit, Sicherheit und Zuverlässigkeit transparent auf der dem Infrastruktur-Layer. 
  • Bei der Hybrid Cloud werden die Public Cloud und die Private Cloud einheitlich verwaltet. 

Meine acht Anwendungsempfehlungen zu den Services

Zu den Services und unter den verschiedenen Szenarien kann ich folgende Empfehlungen machen, wann sie angewendet werden können: 

Azure Container Apps hat Microsoft im November 2021 lanciert und es verstärkt das Container- und Serverless-Portfolio, das aus bekannten Services wie Azure Kubernetes-Service besteht. Azure Container Apps ist eine gemanagete Serverless Kubernetes-Lösung von Microsoft, die das gesamte Paket für die Umsetzung der Microservices-Architekturen bietet. Azure Container integriert viele populäre Open-Source-Funktionen wie KEDA, DAPR und Envoy, um Herausforderungen wie Event-basierte Skalierung, Sicherheit, Beobachtbarkeit und Vernetzung in der Microservice-Architektur zu meistern. KEDA ermöglicht eine feinkörnige automatische Skalierung für Event-basierte Kubernetes-Workloads. DAPR abstrahiert die üblichen Aufgaben in Microservices wie State Management, Binding oder Service Invocation in einen separaten Layer, was wiederum Design, Sicherheit und Beobachtbarkeit massiv vereinfacht. 

Empfehlung 1

Setzen Sie Azure Container Apps für Event-basierte Applikationen und komplexe Microservice-Applikationen ein, um die Entwicklung zu beschleunigen und die Skalierbarkeit zu verbessern. Wägen Sie die Chancen und Risiken bei einer Modernisierung oder beim Neubau einer Applikation auf Basis von Azure Container Apps ab. 

Empfehlung 2

Setzen Sie Azure Container Apps für den Aufbau der Applikation-Hosting Plattform ein, wenn Sie keinen grossen Anpassungsbedarf für Kubernetes haben. Führen Sie Proof-of-Concepts durch, um die Machbarkeit zu überprüfen, wenn Sie Custom-Bedarf an Kubernetes haben.  

Azure App Service for Container betreibt containerisierte Applikationen auf einer vollständig verwalteten Art und Weise und bietet Features wie AuthN/AuthZ und CI/CD an. Sie stellt z.B. Integration mit Azure Active Directory zur Verfügung, oder auch Facebook und Google zur Authentisierung und Autorisierung out-of-the-box. Ein sogenannter “Easy-Auth”-Side-Car-Container [1] wird neben dem Applikations-Container deployed, um die AuthN/AuthZ Logikabfragen zu verarbeiten. Azure App Service for Container bietet beim Deployment auch out-of-the-box-Integration zu Azure Container Registry, sowie verschiedene Code Repo Provider wie Github und nimmt deshalb entweder Container Images oder Source Code mit einem Dockerfile als Input für das Deployment entgegen. Trotz vielen Vorteilen stösst diese Plattform an ihre Grenzen, wenn es zum Betrieb und Management von Applikationen kommt, die aus mehreren Microservices bestehen. 

Empfehlung 3

Setzen Sie Azure App Service for Container für einfache Applikationen mit wenigen Microservices ein.

Empfehlung 4

Setzen Sie Azure App Service for Container zum Starten des Projektes ein, wenn die fachlichen Anforderungen und technische Komplexität unklar sind. 

Azure Kubernetes Service ist der managed Kubernetes-Service von Microsoft und unterscheidet sich von self-managed Kubernetes bei der Fertigungstiefe (z.B. die Installation und ein Teil der Betriebsaufgaben werden von Azure Kubernetes Service übernommen) und der Integration mit dem Azure Ökosystem. Azure Kubernetes Service eignet sich für komplexe Applikationen auf Basis einer Microservice-Architektur. Die Kernfunktion von AKS ist die Container-Orchestrierung, die viele Aspekte vom Deployment über die Skalierung bis hin zum Monitoring umfasst. Beim Deployment sorgt Kubernetes dafür, dass z.B. alle Container-Services der Anwendung gleichzeitig mit einer neuen Version deployed werden. Im Falle eines Fehlers können diese dann synchronisiert auf die letzte Version zurückgerollt werden. AKS sorgt weiter auch dafür, dass nur einzelne Microservices, statt die gesamte Anwendung (alle Microservices) bei Lastspitzen auf Basis von Metriken wie CPU, Speicher und Queue-Füllstand, skalieren.

Empfehlung 5

Setzen Sie Azure Kubernetes Service für komplexe Applikationen ein. Komplex heisst in diesem Fall, dass die Applikationen aus mehreren Microservices bestehen und oft durch verschiedene Teams entwickelt werden. 

Azure Red Hat Openshift ist eine der beliebtesten Kubernetes-Varianten und wird von vielen Unternehmen für ihre Private Cloud verwendet. Seit einiger Zeit ist Openshift auch auf Azure in einer verwalteten Version verfügbar. Openshift bietet out-of-the-box zahlreiche Enterprise-freundliche Funktionen wie Monitoring, Logging, CI/CD an, die bei Kubernetes nicht dazu geliefert werden. Bei Azure Kubernetes Service müssen diese z.B. mit Services wie Azure DevOps (CI/CD) oder Azure Monitor abgedeckt werden. Dafür verlangt Openshift aber auch einen entsprechenden Preis. Neben den Infrastrukturkosten (VMs) müssen zusätzlich Lizenzkosten (z.B.124 US-Dollar für eine D4s v3 VM) bezahlt werden. Im Vergleich dazu fallen bei AKS neben den Infrastrukturkosten (VMs) keine Lizenzkosten an [2][3]. Außerdem ist AKS bereits vollständig in das Azure-Ökosystem integriert, wie z. B. Azure DevOps oder Azure Monitor Security Center. In dieser Hinsicht ist eine fundierte Abwägung essentiell.

Empfehlung 6

Ziehen Sie Azure Red Hat Openshift in Betracht, wenn Sie Openshift bereits für Private Cloud und On-prem einsetzen und eine Hybrid-Cloud-Strategie verfolgen.

Azure Functions ist das Serverless Offering von Microsoft Azure. Bei der Verwendung von Azure Functions übernimmt Microsoft Azure den Betrieb und die Skalierung der Code-Logik, sodass sich das DevOps-Team auf die funktionalen Anforderungen konzentrieren kann. Azure Function bietet für Logging und Monitoring eine built-in Integration mit Application Insights. Für CI/CD werden viele Optionen unterstützt, z.B. Azure Pipelines oder GitHub Actions. Mit zahlreichen Triggern und Bindings können Sie mit wenig Aufwand andere Services wie Azure Storage Account integrieren. Je nach Bedarf werden Azure Functions automatisch skaliert und die Skalierung wird komplett von den Cloud-Anbietern übernommen. Es gibt aber auch Nachteile wie Vendor Lock-in oder Latenz bei der Verwendung von Serverless. Weitere Details zu Vor- und Nachteilen von Serverless habe ich in diesem Deep-Dive-Blog reflektiert.[4] 

Empfehlung 7

Serverless ist nicht für jedes Szenario geeignet. Setzen Sie Azure Functions für das passende Szenario wie Event-basierte Architektur ein. 

Azure Container Instance + Virtual Nodes ist eine Kombination, die die sekundenschnelle und einfache Skalierung des AKS ermöglicht. Azure Container Instances (ACI) sind gemanagte Services für den Betrieb von kurzlebigen Container-Instanzen. ACI cacht z.B. das Basis-Betriebssystem-Image, um das Deployment der kurzlebigen Container-Workloads zu beschleunigen. ACI ermöglicht schnellere Skalierung im Vergleich zu Azure App Service for Container oder VMs. Azure Virtual Nodes — als eine super Ergänzung zu Azure Container Instance — integriert AKS mit Azure Container Instance auf Netzwerkebene. Somit wird die Kubernetes API erweitert, um Azure Container Instance zu unterstützen. Die Kombination von Azure Container Instance und Virtual Nodes erlaubt schnellere Reaktion auf Lastspitzen, weil keine VMs zur Hochskalierung erstellt werden müssen. Diese Kombination gilt als Ansatz von Microsoft, um AKS zu Serverless Kubernetes weiterzuentwickeln. 

Empfehlung 8

Ziehen Sie die Kombination von Azure Container Service und Virtual Nodes für Applikationen mit vielen Lastspitzen vs. gelegentlichen Aufrufen in Erwägung. 

Entscheide fällen mit einem Entscheidungsbaum

Um Architekturentscheidungen zu erleichtern, habe ich im Folgenden die sechs Azure Container und Serverless Services und ihre Kernaufgaben in einem Entscheidungsbaum zusammengefasst. Dieser bietet eine klare Übersicht und ich finde je nach Situation den passenden Service von Azure Container & Serverless Apps. 

202203_Abbildung 2_Entscheidungsbaum 6 relevante Microsoft Azure-Services und Kernaufgaben.png.png
Abbildung 2: Entscheidungsbaum 6 relevante Microsoft Azure-Services und Kernaufgaben

Fazit

Die breite Palette an Services in Bezug auf Container und Serverless von Azure kann dazu führen, dass man den Wald vor lauter Bäume nicht mehr sieht. Es gilt den passenden Service für unterschiedliche Szenarien zu finden, um die Vorteile auszuschöpfen. Das ist auch für den Projekterfolg entscheidend. Stellen Sie sich vor, Sie wählen einen "Flugzeugträger"-Service für ein "Gummiboot"-Problem. Das lässt die Kosten und Komplexität in die Höhe schiessen, der Ertrag ist jedoch der gleiche. Schaffen Sie sich einen klaren Überblick der Azure-Services und führen Sie sich deren Vor- und Nachteile vor Augen. Das hilft Ihnen, die richtige Architekturentscheidung zu fällen. Der Entscheidungsbaum ist eine Möglichkeit, alles zu überblicken und so die richtige Entscheidung für Ihre Herausforderung zu treffen.
 

Dein ipt Experte

Ich freue mich auf Deine Kontaktaufnahme