Wenn man sich mit skalierbaren (Web-)Anwendungen beschäftigt, kommt man mittlerweile nicht mehr am Thema Cloud-Computing vorbei. Mit seinen quasi-unendlichen Ressourcen und flexibler Bereitstellung bieten Cloud-Plattformen wie Windows Azure die besten Voraussetzungen um seine Anwendungen anforderungsgerecht bereit zu stellen.

Wann wird eine skalierbare Anwendung benötigt?

Skalierbarkeit ist vor allem dann wichtig, wenn sich die Last auf einer Anwendung im Laufe der Zeit verändert. Hierbei kann es sich zum einen um vorrübergehende Lastspitzen oder um langfristig steigende Last handeln.

image

Arten von Skalierung

Anwendungen können auf zwei Arten skaliert werden. Bei der vertikalen Skalierung, auch “scale up” genannt, wird die Anwendungen auf leistungsstärkere Hardware migriert. Durch zusätzliche Bereitstellung von Hardwareressourcen wie Speicher, CPU-Kerne oder Bandbreite wird die Leistungsfähigkeit der eigenen Anwendung erhöht. Bei der horizontalen Skalierung, oder “scale out”, werden hingegen zusätzliche Instanzen der Anwendung auf identischer Hardware bereitstellt und die Last wird über einen Load Balancer auf die Instanzen verteilt.

image

Natürlich muss die eigene Anwendung von Seiten der Architektur bestimmte Anforderungen erfüllen, um horizontal skaliert werden zu können. Der zusätzliche Aufwand, der in die Architektur fließen muss, lohnt sich jedoch, da eine horizontale Skalierung viel schneller und flexibler durchgeführt werden kann und nicht durch eine maximale Servergröße / Hardwareausstattung beschränkt ist.

Skalierungsmöglichkeiten in Windows Azure

Bei der Nutzung von Windows Azure besteht sowohl die Möglichkeit vertikal als auch horizontal zu skalieren. Da eine Cloud-Plattform ihre Stärken vor allem durch horizontale Skalierung ausspielen kann, sollte wenn möglich auf diese zurückgegriffen werden.

Um unter Windows Azure die Anzahl der Instanzen für die eigenen Anwendung zu erhöhen oder zu reduzieren, bestehen zwei Möglichkeiten. Die erste Möglichkeit ist eine manuelle Veränderung über das Management Portal oder per Management API / Script. Die zweite Möglichkeit ist es eine automatische Skalierung basierend auf bestimmten Parametern durchzuführen. Diese Parameter könnten z.B. die CPU-Auslastung der Serverinstanzen oder die Anzahl der offenen Aufgaben des Dienstes sein. Ganz gleich welche dieser Methoden gewählt wurde, sorgt Windows Azure neben der Bereitstellung der Hardware und Software je nach Dienst zudem für eine automatische Konfiguration des Load Balancers.

Für den Fall, dass man eine solche Skalierung nicht selber implementieren möchte, bieten Windows Azure seit einiger Zeit die Möglichkeit direkt im Managementportal eine automatische Skalierung einzurichten. Dieser Dienst steht in leicht unterschiedlicher Variante als Vorschau / Preview für Windows Azure Web Sites, Cloud Services, Virtual Machines sowie Mobile Services zur Verfügung.

image

Zusätzlich besteht die Möglichkeit verscheidene Zeitpläne einzurichten, um auf Schwankungen der Benutzerlast zum Beispiel durch Tag/Nacht-Wechsel reagieren zu können.

image

Wie die Autoskalierung am Beispiel von Windows Azure Cloud Services funktioniert, habe ich im folgenden Webcast auf Channel 9 zusammengefasst. In diesem Video nutze ich zudem Visual Studio Online für einen Lasttest um das Verhalten meiner Webanwendung unter hoher Benutzerlast zu testen.

Wer mehr zum Thema Skalierung von Anwendungen auf Windows Azure erfahren möchte findet weitere Informationen unter http://aka.ms/wacsscale.

Für die Skalierung von Webanwendung unter Verwendung von Windows Azure Web Sites empfehle ich den dritten Teil meines Kurses in der Microsoft Virtual Academy.