Microsoft Azure bietet zur Ausführung eigener Anwendungen in der Public Cloud vier Optionen: Virtual Machines, Cloud Services, Websites und Mobile Services. Diese Blog-Serie gibt Hinweise zur Entscheidung für die zu einem konkreten Vorhaben beste Alternative, Die Serie ist unterteilt in 7 Teile:

Dieser Teil geht auf Cloud Services ein.

Konzept der Cloud Services

Auf den ersten Blick sind Cloud Services die komplexeste Ausführungsoption. Um zu verstehen, was Cloud Services ausmacht – denn tatsächlich sind sie wohl auch die leistungsfähigste Option –, lohnt ein Blick auf die Historie von Azure. Cloud Services waren die erste und seinerzeit einzige Ausführungsoption für eigene Anwendungen. Idee war und ist es, dass bestimmte Paradigmen für skalierbare Cloud-basierte Anwendungen durch die Azure Plattform vorgegeben sind:

  • ein Cloud Service ist ein technischer Container für eine oder mehrere VM-Instanzengruppen, genannt Rollen
  • es gibt zwei Arten von Rollen: Web Rollen (für Web-Frondend-Funktionalität) und Worker Rollen (für Hintergrundprozesse)
  • eine Rolle enthält eine oder mehrere identisch konfigurierte (gleicher Inhalt, gleiche Größe etc.) VM-Instanzen
  • die verwendeten VM-Instanzen sind nicht persistent, ein zustandsloses Design der Anwendung wird vorausgesetzt
  • sämtliche Konfigurationspakete und -einstellungen müssen in einem speziellen Anwendungspaket enthalten sein

Zugriff auf den Cloud Service ist ausschließlich über einen vorgeschalteten Azure Loadbalancer möglich. Der Loadbalancer verteilt eingehende Requests gleichmäßig auf die zum Empfang konfigurierten Rolleninstanzen. Web Rollen sind per Voreinstellung für den Empfang auf Port 80 (http) konfiguriert. Web Rollen können für Hintergrundverarbeitung Aufträge (z.B. via Azure Queues) an Worker Rollen verteilen. Abb 1 zeigt den schematischen Aufbau einer Cloud-Service-basierten Anwendung.

image

Abb 1: schematischer Aufbau eines Cloud Service
(Quelle:
Windows Azure Poster)

Diese Vorgaben ermöglichen eine flexible Skalierbarkeit und erlauben der Azure Plattform, bei Bedarf neue Instanzen zu provisionieren oder ausgefallene Instanzen automatisch zu ersetzen. Entsprechend liegt bei Cloud Services der Fokus auf hoch-verfügbaren, hoch-skalierenden Multi-Tier-Web-Anwendungen, die maximal von der flexiblen Ressourcenbereitstellung der Public Cloud profitieren können. Die einzelnen Rollen können unabhängig voneinander skaliert werden. Microsoft Azure übernimmt dabei das Management der zur Ausführung der Rollen benötigten virtuellen Maschinen. Dies schließt Upgrades der Gast-Betriebssysteme, Patching und Failover (ausgefallene Komponenten werden automatisch ersetzt) ein. Anders als bei Websites haben Entwickler vollen administrativen Zugang auf die virtuellen Maschinen, um beispielsweise zusätzliche Software in die einzelnen Instanzen zu installieren. Hierzu werden auch Remote Desktop Verbindungen zur Administration unterstützt. Rollen können unabhängig voneinander skaliert werden (Hinzuschalten bzw. Entfernen von Instanzen); mit der Autoscaling-Funktion kann dieser Vorgang auch (in Abhängigkeit von verschiedenen Lastparametern) automatisiert werden.

Entwicklung von Cloud Services

Die Entwicklung von Cloud Services kann über Visual Studio oder auch Eclipse erfolgen. Die Anwendungen können zunächst in einem Azure Emulator lokal ausgeführt und - nach erfolgreichem Test - direkt aus der Entwicklungsumgebung heraus in die Cloud deployt werden. Cloud Services bieten demnach Entwicklung und Betrieb von Anwendungen im Sinne des PaaS-Modells (PaaS = Platform-as-a-Service). Cloud Services bieten dabei mehr Kontrolle über das Deployment und die Verteilung von Anwendungskomponenten als Websites.

Microsoft Azure basierte Cloud Services werden in der Cloud letztlich in auf Windows Server basierenden virtuellen Maschinen (VMs) ausgeführt. Es hängt vom Aufbau des Cloud Service, der gewählten Instanzgrößen und VM Versionen ab, wie diese VMs von Microsoft Azure konfiguriert werden. Der Entwickler kann den Aufbau über eine Cloud-Service-Definition (csdef) und eine Cloud-Service-Konfiguration (cscfg) bestimmen. Im Deploymentpaket, welches von Visual Studio, Eclipse oder Kommandozeilentools erstellt werden kann, befinden sich dann alle zur Ausführung der Anwendung benötigten Komponenten (Anwendungscode, Libraries, Frameworks, Serversysteme etc.). Der Rest wird von Microsoft Azure übernommen. Wird die Zahl der Instanzen (durch Änderung der Konfiguration oder durch Nutzung der AutoScale-Funktion) zur Laufzeit geändert, werden entsprechend Instanzen automatisch heruntergefahren bzw. zusätzliche Instanzen provisioniert und der vorgeschaltete Loadbalancer passend umkonfiguriert. Der administrative Aufwand für den Nutzer beschränkt sich somit auf ein Minimum. Die Kosten für den Betrieb werden pro Stunde angesetzt. Werden neue virtuelle Maschinen erzeugt (z.B. bei einem größeren Patch oder bei Hardware-Ausfall), so wird ihr Zustand auf den Deployment-Zeitpunkt zurückgesetzt, d.h. die virtuelle Maschine wird aus einem Basis-Image und dem Deployment-Paket erzeugt. Anders als bei Virtual Machines sind die virtuellen Maschinen von Cloud Services nicht persistent. In Cloud Services ausgeführte Anwendungen sollten ihren Zustand also außerhalb der virtuellen Maschinen (z.B. in Microsoft Azure Storage oder SQL Database) speichern und die Laufwerke innerhalb der virtuellen Maschinen nur für Caching-Zwecke nutzen.

Fazit

Die Microsoft Azure Dokumentation enthält einen tabellarischen Überblick über die Möglichkeiten der einzelnen Ausführungsoptionen. Als Fazit kann für Cloud Services gezogen werden: Cloud Services sollten dann verwendet werden, wenn folgende Voraussetzungen gegeben sind:

  • Die Vorteile einer automatisch verwalteten Umgebung im Sinne eines PaaS-Ansatzes sollen genutzt werden sollen.
  • Gleichzeitig wird die Flexibilität eines direkten Zugriffs auf die virtualisierte Umgebung (d.h. administrativer Zugriff auf einzelne Instanzen) benötigt.
  • Skalierung ggf. auch nur in einzelnen Rollen erfolgen soll.

Virtuelle Maschinen sollten Cloud Services vorgezogen werden, wenn

  • Linux als Gast-OS benötigt wird (nur Virtuelle Maschinen unterstützen Linux)
  • persistente VM-Instanzen benötigt werden (weil z.B. eine Datenspeicherung im Dateisystem erfolgt)
  • eine Paketierung der Anwendung (weil z.B. bestimmte Frameworks und Konfigurationseinstellungen benötigt werden) zu aufwändig wäre

Websites bzw. Mobile Services sollten Cloud Services vorgezogen werden, wenn

  • die von Websites vorgegebene Umgebung (z.B. ASP.NET) bereits die Anforderungen erfüllt
  • die Web-Anwendung nicht weiter in Rollen unterteilt werden muss und die Skalierung immer die Gesamt-Anwendung betrifft

Letztlich gilt aber auch für Cloud Services die Kombinierbarkeit mit weiteren Ausführungsoptionen, d.h. es ist durchaus möglich, von einer Cloud-Service-Web-Role zur Datenspeicherung auf einen in einer Virtual Machine betriebenen SQL Server zuzugreifen.

Weitere Informationen

Informationen zu Cloud Services

Informationen zur allgemeinen Entscheidung für ein Ausführungsmodell