Azure App Hosting kurz erklärt

24. Mai 2016

Microsoft Azure bietet für Entwickler eine große Menge an Services und Features. Hier den Überblick zu behalten ist nicht leicht. Steht man vor der Frage, mit seiner Anwendung in die Cloud zu gehen oder die Anwendung auf den Betrieb in der Cloud auszurichten, und zwar von Anfang an, ist es wichtig, die wesentlichen Varianten des Azure App Hosting für die eigene Anwendung in der Cloud zu kennen. Das vermeidet spätere Frustration, falls man “auf das falsche Pferd” gesetzt hat.

Die zentrale Frage ist also, wo und wie hoste ich meine Anwendung? Habe ich mich für ein Cloud-Hosting entschieden, stehe ich vor der Wahl zwischen drei wesentlichen, verschiedenen Modellen:

Die drei unterscheiden sich hauptsächlich im Hinblick auf die Einflussmöglichkeiten, die man bzgl. Konfiguration und Betrieb hat.

App Service

App Service ist das jüngste Kind des Azure App Hosting und ist als waschechte Platform as a Service (PaaS) einzuordnen. An die darunterliegende Systemsoftware kommt man nicht heran. Das Patch Management und die Wartung der Runtime-Versionen übernimmt Azure.

Mit App Service kann man im Wesentlichen zwei Arten von Azure Apps hosten: Web Apps und Mobile Apps. Früher bezeichnete Microsoft diese übrigens als Web Sites und Mobile Services. Unter Web Apps fallen alle Arten von Webanwendungen, z. B. Web Sites und Web Services. Die Mobile Apps fassen diverse Services für die Entwicklung und Unterstützung von mobilen Anwendungen zusammen, z. B. Notification Services und Backend Web Services sowie die Generierung von Client App Code für die unterschiedlichen mobilen Betriebssysteme, z. B. für iOS.

App Services skalieren automatisch, d. h. man kann festlegen, dass bei Erreichen bestimmter Lastschwellen zusätzliche Instanzen der Anwendung aktiviert werden. Somit stehen zu jeder Zeit entsprechend den Leistungsanforderungen genügend Ressourcen zur Verfügung.

Für die Sicherheit sorgt zum einen App Service selbst, indem die eigene App Service-Instanz isoliert vom Internet und von Azure-Ressourcen anderer Nutzer betrieben wird. Der Austausch von Applikations-Secrets erfolgt zwischen der App Service-Anwendung und anderen Azure-Ressourcen immer verschlüsselt, und die Kommunikation erfolgt ausschließlich innerhalb von Azure. Kommunikation mit externen Ressourcen erfolgt ebenfalls verschlüsselt. Mit einem 24-Stunden-Threat Management sorgt Azure dafür, dass entsprechende Attacken erkannt und abgewehrt werden.

Zum anderen muss der Entwickler dafür Sorge tragen, dass seine Anwendung auf Applikationsebene zeitgemäß geschützt ist, z. B. gegen SQL Injection, Cross Site Scripting usw. Für die Benutzerauthentifizierung und -autorisierung bietet App Service eingebaute Mechanismen an, die es z. B. erlauben, den Zugriff auf seine Anwendung mit OAuth 2.0 zu sichern. So kann beispielsweise Azure Active Directory für die Benutzerverwaltung verwendet werden. Auch externe Identitätsprovider wie Google, Facebook und Twitter können zur Benutzeridentifizierung eingebunden werden.

Cloud Services

Cloud Services, obwohl schon etwas älter, haben nach wie vor ihren Charme als interessante Azure App Hosting-Alternative, gerade wenn man mehr Einfluss auf die Konfiguration der Hosting-Umgebung nehmen muss. Cloud Services sind virtuelle Windows-Maschinen. Man kann sich mit ihnen per Remotedesktop verbinden und damit Einfluss auf die Konfiguration der Betriebsumgebung nehmen. Zum Beispiel können eigene Dienste oder geplante Jobs eingerichtet werden. An Betriebssystemen stehen zur Wahl:

  • Windows Server 2008 SP2
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2

Cloud Services unterteilen sich in zwei Rollen von virtuellen Maschinen: die Worker Role und die Web Role. Der Unterschied zwischen beiden besteht darin, dass die Web Role zusätzlich Internet Information Services (IIS) installiert hat, und somit als Web Server fungieren kann. Die Worker Role hingegen ist für Hintergrunddienste/-aktivitäten konzipiert, z. B. für aufwändige Berechnungen u. ä. Die Idee ist, dass eine Web Role derartige Berechnungen an eine Worker Role delegieren kann. Die Kommunikation zwischen beiden kann beispielsweise über eine Message Queue erfolgen.

Auch Cloud Services lassen sich automatisch skalieren, je nach Leistungsanforderung, nach oben und unten. Automatische Skalierung hat Vorteile in zweierlei Hinsicht. Es können damit jederzeit genügend Ressourcen bereitgestellt werden, um die Nutzungsanforderungen abzudecken. Da die Kosten für die Nutzung von Azure Services mit der Anzahl von Instanzen und deren Ausprägung steigen (und fallen), sorgt die automatische Skalierung für einen jederzeit effizienten Einsatz der benötigten Services.

Welche Art von Services sind Cloud Services nun eigentlich, Platform oder Infrastructure as a Service (Iaas)? Betrachtet man die Verwaltbarkeit über Remotedesktop, fühlt sich dies nicht wesentlich anders an als bei Azure Virtual Machines. Nur, dass man es ausschließlich mit Windows-Maschinen zu tun hat. Linux bleibt hier außen vor. Das legt den Schluss nahe, man hätte es mit IaaS zu tun. Hat man sich dann mal verbunden und wirft einen Blick in die Windows Update-Einstellungen, stellt man fest, dass diese “von einem Administrator” gemanagt werden. Das und die Möglichkeiten der automatischen Skalierung, also das Hinzufügen weiterer und größerer Instanzen (VMs) je nach Leistungsanforderungen, deutet jedoch mehr auf PaaS hin. Die Wahrheit liegt wohl, wie so oft, dazwischen, und die Cloud Services lassen sich weder ausschließlich in die eine noch in die andere Kategorie einordnen.

Virtual Machines

IaaS in Reinform stellen Azure Virtual Machines dar. Auf ihnen kann man im Prinzip alles installieren, was man für sein Azure App Hosting braucht und was Windows oder Linux als Betriebssystem voraussetzt. Für die Bereitstellung der VMs inkl. Auswahl benötigter Systemsoftware und das Patch Management muss man somit selbst sorgen. Es stehen immer nur so viele Maschinen bereit, wie man selbst konfiguriert hat. Automatische Skalierungsmöglichkeiten bestehen out-of-the-box nicht. Man muss sie bei Bedarf selbst implementieren. Auch für Load Balancing, Hochverfügbarkeit und Security ist selbst zu sorgen. Also alles so, als verwalte man Maschinen im eigenen Rechenzentrum. Dafür hat man bei der Konfiguration der Maschinen weitgehend freie Hand bis hin zur Auswahl des Betriebssystems (Windows, Linux). Azure bietet zudem eine ganze Reihe von vorkonfigurierten Systemimages, die aus einer Gallery ausgewählt werden können, um eine eigene virtuelle Maschine aufzusetzen.

Vergleich der Azure App Hosting-Varianten

Das sind sie, die drei wesentlichen Azure App Hosting-Varianten für die eigenen Anwendungen. Für welche soll man sich nun aber entscheiden? Die folgende Abbildung stellt noch einmal die 3 Varianten gegenüber.

Azure App Hosting - Varianten im Vergleich

Quelle: https://azure.microsoft.com/en-us/documentation/articles/choose-web-site-cloud-service-vm/

Wenn es um die Neuentwicklung von Anwendungen geht, ist der App Service für die meisten Webapplikationen die beste Wahl. Er deckt alle Anforderungen an den professionellen Betrieb von Webanwendungen ab. Es gibt die automatische Skalierung, Hochverfügbarkeit inkl. Geo-Redundanz, Load Balancing sowie die so genannten WebJobs für Hintergrundaktivitäten, z. B. für die Erzeugung von Thumbnails aus hochgeladenen Bildern.

Steht man vor der Aufgabe, ein bestehendes Anwendungssystem in die Cloud zu migrieren, und hat das System spezielle Anforderungen an die Betriebsumgebung, stößt man an die Grenzen des App Service. Man kann dann auf die Cloud Services ausweichen, sofern das Anwendungssystem auf Windows-Maschinen lauffähig ist. Anderenfalls, oder wenn die Migration sehr schnell und einfach gehen soll ohne großartige Änderungen an der Anwendung, sind selbstverwaltete Virtual Machines die geeignetere Alternative. Allerdings ist dann für die Wartung komplett selbst zu sorgen.

Fazit

Braucht man für die Migration bestehender Anwendungen größtmögliche Flexibilität und möchte so nah wie möglich an seinem bisherigen Szenario bleiben, macht man mit Virtual Machines erst mal nichts verkehrt. Für Neuentwicklungen sollte man aber auf die App Services setzen, um größtmögliche Vorteile aus dem Azure Cloud Hosting zu ziehen und sich auf das Wesentliche, die Entwicklung der Anwendung, zu konzentrieren. Man kann ganz klein, also mit wenigen Ressourcen und zum Teil sogar kostenlos beginnen und später bequem skalieren, wenn die Leistungsanforderungen steigen. Will man das Beste aus beiden Welten, sind Cloud Services interessant.