AQUANTUM GmbH

Webanwendungen in der Wolke

Für jedes Webprojekt stellt sich immer wieder die Frage des Hostings:

Wo und auf welcher Plattform wird die Webanwendung bereitgestellt?

Die Kriterien zur Auswahl der richtigen Hosting-Plattform umfassen unter anderem die Flexibilität in der Softwareauswahl, Konfigurationsmöglichkeiten, Ausfallsicherheit, Datensicherung, Verfügbarkeit, Skalierbarkeit, Performance, Sicherheit der Netzwerkinfrastruktur und nicht zuletzt den eigenen Wartungsaufwand.

Traditionell hat man die Möglichkeiten einen eigenen Server bereitzustellen, bei einem Hosting-Provider Server zu mieten (“Managed Hosting“) oder “Shared Hosting“-Angebote zu nutzen. Mit einem eigenen Server besitzt man die größte Flexibilität – von der Auswahl der Hardware, über das Betriebssystem bis zur verfügbaren Software. Dafür muss man sich jedoch um alle Belange des Hostings selbst kümmern. Hosting-Provider übernehmen hier einen Teil der Arbeit und beschränken auf ihren Servern meist nur die Wahl der Hardware und des Betriebssystems. “Shared Hosting“-Angebote erfordern den wenigsten Wartungsaufwand, da abgesehen von der Webanwendung die komplette Softwareumgebung vom Provider aktualisiert und gepflegt wird. Meist ist die verfügbare Software jedoch auf verbreitete Standards beschränkt. Die Kombination aus Linux, Apache, MySQL und PHP (“LAMP“) ist bei fast allen Providern verfügbar, die Unterstützung des Webframeworks Ruby on Rails oder von Java EE-Anwendungen ist zumindest bei den großen deutschen Providern nur eingeschränkt oder gar nicht vorhanden.

Allen traditionellen Hosting-Plattformen gemein ist das Problem der Skalierbarkeit. Damit eine Webanwendung durchgehend zufriedenstellende Antwortzeiten bieten kann, muss sie insbesondere zu Lastspitzen über genügend Ressourcen verfügen. Meist werden für performance-kritische Anwendungen daher eine Vielzahl gut ausgestatteter Server bereitgestellt, deren Rechenleistung aber die meiste Zeit ungenutzt bleibt. Eine skalierbare Hosting-Plattform bietet dagegen im Idealfall die Möglichkeit, die Rechenleistung je nach Bedarf dynamisch zu verwalten. Diese Ziel lässt sich mit dem Konzept des Cloud Computings erreichen. Die Idee, das IT-Infrastruktur wie Rechenleistung und Speicherplatz ähnlich wie Wasser und Strom bezogen werden kann ist nicht neu (siehe Cloud Computing History), wurde aber erst in den letzten Jahren insbesondere durch die von Amazon angebotenen Dienste richtig populär.

Mittlerweile bieten neben Amazon auch Google und Microsoft Cloud Computing Dienste an, die sich für das Hosting von Webanwendungen eignen. Im folgenden werden nun die Dienste von Amazon und Google vorgestellt.

Amazon AWS

Amazon AWS bietet die größte Flexibilität, erfordert jedoch auch den größten Administrationsaufwand.

Unter dem Begriffs AWS bietet Amazon verschiedene Dienste an:

Am einfachsten lässt sich Amazon S3 – Amazons verteilter Datenspeicher – nutzen. Über eine standardisierte API lassen sich beliebige Dateien auf die Server von S3 hochladen. Bereitgestellt werden die Daten über eine ganz normale Webadresse, die Skalierung der Dateiserver und effiziente Auslieferung der Daten an die Clients geschieht völlig abstrahiert.

Mit Amazon CloudFront lassen sich die über S3 bereitgestellten Daten über Amazons Content Delivery Network ausliefern, wodurch die Daten regional näher zu Clients in verschiedenen Teilen der Welt bereitgestellt werden und so eine schnellere Auslieferung ermöglichen.

Amazon EC2 (Amazon Elastic Compute Cloud) ermöglicht es über ein Webinterface beliebig viele virtuelle Server je nach Bedarf zu starten oder zu beenden und beliebige Anwendungen darauf laufen zu lassen. Auf diese Weise lassen sich je nach Last skalierbare Webanwendungen erstellen. Als Betriebssystem lässt sich auf den virtuellen Maschinen neben verschiedenen Linux-Distributionen auch OpenSolaris und Windows Server 2003 nutzen.

Amazon SimpleDB ist eine über ein Webinterface zugreifbare, nicht-relationale, schemalose, automatisch indexierte und skalierbare Datenbank. SimpleDB entspricht im Grunde einem Key-Value-Store mit einfachen Tests für die Selektion der Daten (=, !=, <, > ⇐, >=, like, not like, between, is null, is not null), aber ohne die Möglichkeit komplexer Joins.

Amazon RDS (Amazon Relational Database Service) ist ein Webservice zur Verwaltung von einer oder mehreren von Amazon administrierten MySQL-Datenbank-Instanzen. Über API-Aufrufe lassen sich die Rechen- und Speicherressourcen der Datenbank-Instanz skalieren.

Amazons Preismodell richtet sich direkt nach dem Bedarf. Man zahlt pro CPU-Stunde, GB Datentransfer, GB Speicherplatz oder im Fall von S3 auch der Anzahl Requests.

Mit Amazon EC2 lassen sich beliebige skalierbare Anwendungen umsetzen, da es keine Beschränkung in der verwendeten Software gibt. Je nach Anwendungszweck lässt sich der Administrationsaufwand unter Verwendung von Amazon SimpleDB oder Amazon RDS zumindest in Bezug auf die Datenbank reduzieren. Um die Administration und Skalierung (Zuweisung von Virtual Machine Instanzen, Replizierung von Datenbankinhalten) der auf EC2 laufenden Anwendungen muss man sich jedoch selbst kümmern.

Auf Amazon AWS aufbauende Anbieter

Aufbauend auf Amazons Cloud-Diensten gibt es mehrere (zumeist in den USA ansässige) Anbieter, welche den Administrationsaufwand zur Skalierung abstrahieren und eine dem Managed oder Shared Hosting vergleichbare Anwendungsschicht bieten, z.B. die auf Ruby on Rails spezialisierten Anbieter Engine Yard und Heroku.

Google App Engine

Google App Engine hat definitiv die meisten Einschränkungen, aber bietet dafür auch die einfachste Skalierbarkeit.

Neben Python kann man auch Sprachen nutzen, die auf der Java Virtual Machine (JVM) laufen (Java, JRuby, etc.), hat allerdings Einschränkungen in den nutzbaren Klassen und Bibliotheken. Netzwerk-Sockets, nebenläufige Threads oder Hintergrundprozesse lassen sich z.B. nicht erzeugen. Google bietet für solche Zwecke jedoch eigene APIs (z.B. Memcache, URL Fetch, Mail, XMPP, Task Queues) an.

Statt einer relationalen Datenbank ist man auf Googles Datastore angewiesen, der fundamental andere Herangehensweisen erfordert (es gibt z.B. keine “joins”). Auf das Dateisystem kann die Webanwendung nicht schreibend zugreifen, Uploads lassen sich daher nur in der Datenbank (1MB Limit) oder über die Blobstore API (50 MB Limit) speichern. Für größere Uploads/Downloads könnte man aber auch einfach auf Amazon S3 zurückgreifen, also eine Kombination aus Google App Engine und Amazon AWS nutzen.

Zur Entwicklung für die App Engine gibt es ein SDK und ein Eclipse-Plugin (für die Entwicklung mit Java), die lokales Entwickeln und einfaches Deployment ermöglichen. Die Skalierbarkeit durch die “Cloud” ist völlig von der Webanwendung abstrahiert und man muss sich in keinster Weise um Webserver-Instanzen oder verteilte Datenspeicherung kümmern.

Was am meisten verwundert ist, das es nur eine eingeschränkte, integrierte Volltextsuche für Datenbankobjekte gibt – immerhin ist die App Engine ein Produkt des Suchmaschinen-Marktführers. Bis die Google Entwickler dieses oft nachgefragte Feature nachliefern, kann man sich aber mit eigenen Lösungen zur Volltext-Suche für die App Engine behelfen.

Über die JVM lassen sich auf der App Engine neben Java auch beispielsweise (J)Ruby- oder PHP-Anwendungen betreiben. Um z.B.  eine Rails-Anwendung auf der App Engine laufen zu lassen, sind jedoch tiefgreifende Anpassungen notwendig, da Active Record (das Datenbank-Abstraktions-Modul von Rails) nur MySQL, PostgreSQL und SQLite unterstützt und man auf Googles nicht-relationale Datastore-Datenbank angewiesen ist. Auch die meisten Java-Frameworks, wie z.B. Spring, lassen sich aufgrund ihrer nähe zu relationalen Datenbanken nicht ohne weiteres auf der Google App Engine nutzen.

Besser integrieren lässt sich das Python-Framework Django, aber auch hier muss ein angepasstes Daten-Modell verwendet werden. Allerdings bringt die App Engine eine solche angepasste Version von Django schon gleich mit.

Google App Engine verwendet ein Amazon AWS vergleichbares Preismodell. Gezahlt wird pro CPU-Stunde, GB Datentransfer und GB Datenspeicher (siehe Google App Engine Quotas). Ein großer Vorteil des Google Dienstes ist der Einstiegspreis – die “Free Default Quota” ist komplett kostenlos und ausreichend für kleinere Webanwendungen.

Für theoretisch unbegrenzt skalierbare Anwendungen mit minimalem Administrationsaufwand bietet die Google App Engine eine sehr attraktive Plattform. Die komfortable Entwicklung und das einfache Deployment mit dem Eclipse-Plugin ist ein weiterer Pluspunkt. Um jedoch die Vorteile der Plattform richtig zu nutzen, ist ein speziell an die Plattform angepasstes Framework erforderlich. Dazu sind Eigenentwicklungen notwendig, da es bisher kein mit Rails vergleichbares Framework gibt, das sich ohne Probleme auf der App Engine nutzen lässt. Mit ausgiebigem Gebrauch der Google APIs ist zudem ein “Lock-In”-Effekt unvermeidlich.

Keine Kommentare »

Noch keine Kommentare

RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

Hinterlasse einen Kommentar