E-Commerce in der Cloud: Magento-Hosting mit Amazon EC2
In den Anfangszeiten von Amazon EC2 war das Starten und Stoppen von neuen Server-Instanzen, das Einrichten von Sicherheitsgruppen sowie alle weiteren Vorgänge ausschließlich mit den EC2-API-Tools [1] möglich. Für Benutzer, die nicht mit der Kommandozeile vertraut sind, stellte das eine große Hürde dar. Die von Amazon entwickelte Firefox-Extension Elasticfox [2] schaffte erste Abhilfe. Anfang dieses Jahres veröffentlichte Amazon dann die AWS-Management-Konsole [3], mit der Nutzer einen virtuellen Server mit wenigen Mausklicks über ein benutzerfreundliches Web-Interface starten können.
Zudem ist EC2 mittlerweile auch für Firmen in Europa interessant geworden: In der Anfangszeit nutzte Amazon für seine Web Services ausschließlich Server, die in den USA stehen, was zu einer deutlich geringeren Reaktionszeit bei Website-Zugriffen aus Europa führt. Seit Dezember 2008 ist Amazon EC2 auch in Europa verfügbar, derzeitiger Server-Standort ist Irland. Die Region Europa ist seit März 2009 außerdem auch über die Management-Konsole ansprechbar.
Um EC2 mit der Management-Konsole nutzen zu können, benötigt man ein AWS-Konto [4] und muss dort eine Kreditkarte hinterlegen, die monatlich mit den Gebühren für die effektiv genutzten Instanz-Stunden zuzüglich des Traffics belastet wird [5]. Wer EC2 nur mal testen möchte, fährt den Server nach zwei Stunden wieder herunter und bezahlt nur ein paar Cents dafür.
In der Region EU gibt es derzeit zwei kostenlose Amazon Machine Images (AMI) auf Basis von Debian Etch Linux. Auf diesen AMIs ist ein Magento-Demo-Shop vorinstalliert, außerdem sind die Images (teilweise) für Magento optimiert. Folgende für Magento vorbereiteten Amazon Machine Images sind derzeit in der Region US und EU vorhanden:
AMI Name | Region | Größe | Webserver |
magento-etch-virtualmin-gpl-3.63 | US | m1.small | Apache |
debian-4.0-etch-64-magento-2009-03-10 | EU | m1.large | Apache |
debian-4.0-etch-32-magento-nginx-2009-03-15 | EU | m1.small | Nginx |
Um die Magento-AMIs zu finden, genügt es, in das Suchfeld der Management-Konsole das Wort „magento“ einzugeben. Je nach ausgewählter Region werden die vorhandenen AMIs aufgelistet. Per Checkbox wählt man das gewünschte AMI aus. Zur Wahl stehen dann noch die Anzahl der gewünschten Instanzen sowie der Instanztyp.
Eine Instanz vom Typ „Small“ (m1.small) hat 1,7 GB RAM und ist für einen
Demo-Shop ausreichend. Für einen produktiven Magento-Shop mit
beträchtlichen Besucherzahlen ist eine Small-Instanz nur ratsam,
wenn man anstatt Apache den performanteren Webserver Nginx [6] einsetzt. Ein Klick auf den Launch-Button fährt den virtuellen Server schließlich in wenigen Sekunden hoch.
Anschließend sollte man zum Menüpunkt „Instances“ wechseln, um die Puplic-DNS, die zu Testzwecken als temporäre URL verwendet werden kann, ablesen zu können.
Shop-Konfiguration anpassen
Über diese URL kann man sich auf dem neuen Server via SSH einloggen und muss lediglich noch zwei kleine Änderungen an der Konfiguration des Demo-Shops vornehmen, bevor man diesen austesten kann:
- Shop-URL in den ersten beiden Einträgen der Datenbank-Tabelle „core_config_data“ ändern
- Cache unter „/var/www/apache2-default/magento/var/cache/*“ leeren
Jetzt ist der Magento-Demo-Shop im Browser über die (sinngemäße) URL http://ihre-ec2-domain-123.compute-1.amazonaws.com/apache2-default/magento/ erreichbar.
Performance-Optimierungen
Die AMIs, die Apache als Webserver verwenden, wurden folgenden Optimierungen unterzogen:
- Anpassung der MySQL-Konfiguration, um den Arbeitsspeicher des Servers besser ausschöpfen zu können
- Apache KeepAlives aktiviert, damit mehrere HTTP-Requests über die gleiche TCP-Verbindung getrichtert werden (ist bei Debian bereits Grundeinstellung)
- PHP Opcode Cache (XCache) installiert, um dem Interpreter das Rekompilieren bei jeder Anfrage zu ersparen
- speicherbasiertes Dateisystem für das Cachen von Dateien und Sessions (wurde in den drei vorhandenen AMIs noch nicht implementiert)
Tests haben gezeigt, dass beim Magento-Demo-Shop mit 30 bis 50 Testartikeln die Parse-Zeiten nach Anwendung von Punkt 1 und 2 fast identisch bleiben. Erst nach Installation des PHP Opcode Cache sanken die Parsezeiten von durchschnittlich 1,1 bis 2,9 Sekunden auf 1,0 bis 2,3 Sekunden. Die gleichen Tests auf einer m1.large-Instanz (7,5 GB RAM) mit den gleichen Optimierungen ergeben gemäss Magento-Profiler folgende Parsezeiten:
Shop-Seite | Seiten-Parsezeit in Sekunden |
Startseite | 0,2 bis 0,3 |
Produktauflistung | 0,4 bis 0,6 |
Produktdetail | 0,6 bis 0,8 |
Artikel in Warenkorb legen | 0,6 bis 1,2 |
Da die Kosten für eine m1.large-Instanz viermal so hoch sind wie für eine m1.small-Instanz, gibt dies nur bedingt Grund zum Jubel. Mit dem Mitte März 2009 von Amazon neu eingeführten Modell der reservierten Instanzen (Reserved Instances), können die Stundenpreise durch eine einmalige Einrichtungsgebühr allerdings deutlich gesenkt werden, sodass die jährlichen Kosten insgesamt niedriger ausfallen.
Der große Vorteil der Cloud liegt jedoch ohnehin nicht in niedrigeren Server-Kosten im Vergleich zum klassischen Hosting, sondern in der fast grenzenlosen Skalierbarkeit, die man zum Beispiel für groß angelegte
Marketing-Aktionen nutzen kann, die hohe Besucherzahlen zur Folge haben. Nach Ende der Aktion können die nicht mehr benötigten Server-Instanzen
(automatisch) wieder heruntergefahren werden,
bezahlt wird nur der
effektiv genutzte Traffic und die tatsächlich genutzten Server-Stunden.
Nginx – High Performance HTTP-Server
Wer noch mehr aus einer m1.small-Instanz herausholen möchte, sollte sich das AMI mit dem vorinstallierten Nginx-Webserver einmal genauer ansehen. Trotz einem vergleichsweise sehr kleinen Marktanteil von 1 bis 4 Prozent ist dieser Open-Source-Webserver bekannt für seine hohe Performance, Stabilität, einfache Konfiguration und niedrigen Ressourcenverbrauch.
In Kombination mit den in dem AMI installierten Varnish (HTTP Accelerator) und APC (PHP-Cache) erreicht der Demo-Shop Parse-Zeiten zwischen 0,8 und 1,0 Sekunden.
Fazit
Mit den in der zweiten Aprilhälfte nun auch in Europa eingeführten Reserved Instances [7] wird EC2-Hosting im Dauereinsatz deutlich günstiger und ist nun eindeutig mit anderen virtuellen Server-Angeboten vergleichbar. Es eignet sich vor allem als günstige Testumgebung und für produktive Magento-Shops mit höherem Traffic, da man nicht den Performance-Schwankungen eines Shared-Hosting-Angebots ausgeliefert ist. Für kleinere Shops dürfte allerdings nach wie vor ein auf Magento ausgerichtetes Shared-Hosting die bessere und günstigere Alternative sein.
Weiterführende Informationen zur Kombination aus Magento und EC2 finden sich im englischsprachigen Magento-Wiki [8]. Dort findet man auch ein von Vinai Kopp zur Verfügung gestelltes Shell-Skript zum automatischen Einbinden von Elastic-Block-Store-Volumes.