Ausführen von Magento in einer AWS-Umgebung

54

Wie jeder weiß, ist das Hosten von Magento nicht mit dem Hosten anderer PHP-Anwendungen vergleichbar. Wie machbar ist es, Magento 2013 in einer Amazon Web Services-Umgebung auszuführen?

Welche magische Kombination von AWS-Diensten ist für Magento sinnvoll? Welche Ebenen sind intelligente Standardeinstellungen für ein "Run of the Mill" -Laden? (Ja, ich weiß, es gibt keine Laufmühlen)

Welche (EBS?) Sollten vermieden werden?

Gibt es Tipps, Tricks und Bereitstellungsstrategien, um zu vermeiden, dass wochenlange Schmerzen bei diesem Setup auftreten?

Alan Storm
quelle

Antworten:

44

Ich habe Magento 2011 bis 2013 auf AWS gehostet. Viele Dinge, die Sie durch die Verwendung der Cloud-Infrastruktur anstelle von traditionellem dediziertem oder gemeinsamem Hosting gewinnen, werden unter dem Thema DevOps genauer beschrieben, das nicht nur für AWS, sondern einfacher über AWS aktiviert werden kann sein Nutzen.

  • Umfassende und flexible Kontrolle Ihrer Kapazitätsplanung - Skalieren Sie im Vorfeld von Marketingveranstaltungen, aktivieren Sie die dynamische Bereitstellung über Elastic Beanstalk, reduzieren Sie die Skalierung in Zeiten mit geringem Volumen, drehen Sie eine Site in ein paar Wochen auf, reißen Sie sie ab und werfen Sie sie weg.
  • Einfaches Einrichten von Entwicklungs- / Test- / Staging-Umgebungen und Replizieren von Änderungen zwischen ihnen.
  • Hosten Sie Ihre Admin-Seiten auf einem separaten Host.
  • Verwenden Sie DynamoDB für die Sitzungsverwaltung und ElastiCache für den Cache, ohne dass zusätzliche Vorgänge erforderlich sind. Beachten Sie jedoch, dass ElastiCache derzeit in VPC nicht funktioniert.
  • Verwenden Sie ELBs für den Lastenausgleich. Achten Sie jedoch darauf, dass Anforderungen, die länger als 60 Sekunden dauern, nicht ordnungsgemäß beendet werden
  • Verwenden Sie AmazonSES zum Versenden von E-Mails (jetzt noch einfacher über normales SMTP), obwohl die Tools zur Nachverfolgung von Bounces / Beschwerden immer noch lückenhaft sind
  • Verwenden Sie AmazonS3 zum Hosten von Medien und Cloudfront für CDN.
  • Reduzierte Betriebskosten für die Datenbankaktivität über RDS, das die Wiederherstellung zu einem bestimmten Zeitpunkt, automatisiertes Failover, automatisierte Sicherungen und automatisierte Upgrades umfasst.
  • Die DNS-Verwaltung ist in Route53 sehr einfach, wird jedoch allgemein empfohlen, um die Zuordnung von Unterdomänen zu Lastenausgleichsmodulen zu vereinfachen.
  • Mit VPC können Sie alle Ihre Computer in ein eigenes privates Netzwerk einbinden, um eine genauere Kontrolle zu erhalten und den Zugriff über Ihre eigenen VPN-Tunnel nach Belieben freizugeben.
  • Einfache Leistungsmetriken und Warnmeldungen (abgesehen von Speicher- und Datenträgernutzung) über CloudWatch & SNS

Die minimale Stellfläche beträgt 1 ELB, 2 EC2-Webserver in separaten AZs, 1 Multi-Az-RDS und eine von Route53 gehostete Zone für die Domain. Anfänglich können Sie Sticky-Sessions auf der ELB verwenden, um die Sitzungsverwaltung zu vereinfachen. Mit zunehmendem Datenverkehr möchten Sie jedoch Medien in ein CDN (S3 & CloudFront) verschieben und Sitzungen von den einzelnen Computern entfernen.

Bereiche, die ich noch nicht gesehen habe, die aber immer noch vielversprechend sind: CloudFormation-Skripte für die einfachere Bereitstellung eines Magento-Stacks, das Verschieben der Auftragserstellung über DynamoDB und die Arbeitswarteschlangen für einen höheren Checkout-Durchsatz (jemand hat bereits ein Projekt gestartet, um dies bei einem der Hackathons über MongoDB zu tun kürzlich) und Einrichten einer Präsenz in mehreren Regionen über latenzbasiertes Routing mit Route53.

Ich glaube, ich bin eine Art Evangelist für Cloud. Speziell für AWS ist c3.large eine anständige Instanzgröße für Produktions-Webserver, aber ich würde mit der kleinsten Instanzklasse beginnen und die Leistung messen und den Code nach Belieben skalieren oder optimieren. Deshalb verweise ich auf alle Xhgui ständig.

Ralph Tice
quelle
Eigentlich würde ich vorschlagen, kein RDS für die Datenbank zu verwenden. Sie haben keine Kontrolle über die Optimierung des Servers, was Magento benötigt, um eine gute Leistung zu erbringen. Es gibt ein Whitepaper, das Magento zum Optimieren eines Stapels herausgegeben hat, das die Details zum Optimieren von MySql zeigt. Grundsätzlich müssen Sie Ihren eigenen Datenbankserver ausführen, wenn Sie die maximale Geschwindigkeit skalieren oder erwarten möchten .
Davidalger
3
@davidalger Sorry, aber das ist ein schrecklicher Rat. Sie müssen sich über Datenbankparametergruppen und deren Verwendung informieren. Deutsch:. Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Außerdem bietet das Caching oder die Codeoptimierung weitaus mehr Leistung als alles, was Sie mit der Datenbank tun können, wenn Sie sich nicht ausschließlich auf Checkout - Prozesse konzentrieren. Deutsch: github.com/magento-hackathon/MongoDB-OrderTransactions
Ralph Tice
3
Ich würde mit Sicherheit RDS verwenden. Allenfalls verliert man die Fähigkeit, Systemfunktionen zu erstellen, das war's auch schon. Es ist hochoptimiert, hochverfügbar und Sie können Replikanten mit wenigen Klicks hochfahren. Die Vorteile überwiegen bei weitem die potenziellen Nachteile.
Philwinkle
Was ist mit EBS (Block Storage)? Warum haben Sie das nicht auch in Ihr Setup aufgenommen? Was ist die empfohlene Methode, um das Medienverzeichnis zwischen mehreren EC2s zu synchronisieren?
Dayson
1
@ Dayson Gute Frage. Magento ist ziemlich I / O-lastig, selbst wenn die Sitzungs- und Cache-Verwaltung an Memory-Caching-Systeme delegiert wird. Aus diesem Grund sollten Sie EBS in Betracht ziehen. Wir sind derzeit nicht in AWS, aber wir führen unsere Magento-Umgebung in einem hoch verfügbaren, lastverteilten Stapel aus, in dem Sie das gleiche Problem mit CMS-Speicher haben wie das Verzeichnis / media. Vor 2 Monaten haben wir ein NFS auf unseren Webservern gemountet und unsere Verzeichnisse / home / user (in denen alle Webdaten gespeichert sind) mit diesem Mount-Punkt verknüpft. Von einem Usability-POV ist es brillant. In Bezug auf die Leistung könnte es noch einige Verbesserungen gebrauchen.
Jaap Haagmans
30

So machen wir es für den Angrybirds-Webshop:

Englische Präsentation auf der Magento Imagine 2012.

Deutsche Präsentation bei Meet Magento # 6.12

Das aktuelle deutsche "PHP Magazin" hat auch einen 6-seitigen Artikel mit einigen Details

Nachdem ich alle oben verlinkten Präsentationen von Fabrizio viele Male gelesen habe, denke ich, dass diese Antwort wirklich die beste ist, auch wenn ich zustimme, dass es mehr Erklärungen und eine Extraktion der Schlüsselideen aus den Präsentationen gebrauchen könnte (zumal der ursprüngliche erste Link bereits vorhanden war Zu dem Zeitpunkt, als ich dieses Update gepostet habe, waren es 404.)

Das einzige, was ich zu den Schlüsselkonzepten in den Präsentationen hinzufügen möchte, ist, dass die modernen Fortschritte in den Technologien von AWS / Konkurrenten einige Verbesserungen nahe legen ... wie die Tatsache, dass Cloudfront gzip für CDN-Leistungsverbesserungen jetzt unterstützt, obwohl es nicht so schnell wie noch ist Gibt es eine kostenlose SSL-Kündigung, wie sie CloudFlare anbietet ? Ihr Route 53-DNS ist auch nicht so schnell oder funktionsreich wie CloudFlares, und AWS verfügt auch nicht über eine vergleichbare Webanwendungsfirewall oder einen DDOS-Schutz, die alle in den CloudFlare-Angeboten enthalten sind.

Es gibt ein paar andere Möglichkeiten, die ursprüngliche Präsentation von Fabrizio zu verbessern, aber ich wäre kein guter Berater, wenn ich ALLES verraten würde, was ich auf jedem StackExchange-Post wusste, den ich beantwortete, oder? Darüber hinaus würden einige der neuesten Angebote die Vorschläge in den Originalpräsentationen erheblich ändern, die alle NOCH eine hervorragende Leistung bieten, selbst wenn mit verschiedenen Optionen mehr aus AWS herausgedrückt werden könnten.

Zusammenfassung der wichtigsten Konzepte :

  1. Kennen Sie Ihre Engpässe genau : und optimieren Sie sie entsprechend. Jede Schicht des Stapels weist spezifische Engpässe auf (Bandbreite, CPU, Datenbank). Das Lösen der Engpässe auf jeder Schicht erfordert eine unterschiedliche Lösung, die für jede spezifische Herausforderung optimiert ist. Zwischenspeichern ist jedoch auf jeder Ebene das übliche Element, was dazu führt, dass ...

  2. Zwischenspeichern aller Dinge : Nutzen Sie AWS-Systeme, wo immer dies möglich ist (Elasticache für das Zwischenspeichern von Daten vom Typ Redis / Memcache, Cloudfront für das Zwischenspeichern von Image-, Js- und CSS-Assets, die den Endbenutzern über CDN am nächsten sind) und Lackieren, um die Antworten der Serverinstanzen auf die anfängliche Asset-Ebene zu beschleunigen Caching-Anforderungen von CDN. Stellen Sie außerdem sicher, dass Ihre Bereitstellungssysteme komprimiert und minimiert sind, BEVOR Sie sie auf CDNs bereitstellen

  3. Autoscaling ist unerlässlich : Der Bedarf ändert sich häufig und schneller, als Sie manuell überwachen und reagieren können. Die Anpassung an diese Änderungen in Echtzeit erfordert die Verwendung von Automatisierungstools, die in AWS verfügbar sind, wie z. B. Auto-Scaling Groups, um die Teile des Systems hochzufahren, die für diese Aufgabe am besten geeignet sind. AWS handhabt dies transparent für CloudFront CDN, Route 53 DNS, Elastic Load Balancers und S3 Buckets. Sie müssen es handhaben, indem Sie die Größe für EC2-Instanzen anpassen und automatisch skalieren und nur die Größe für RDS- und Elasticache-Ebenen anpassen

  4. Automatisierung ist die einzige Möglichkeit, um all dies effektiv miteinander zu verknüpfen: Bei so vielen miteinander verbundenen Komponenten, von denen einige zum Zeitpunkt der Bereitstellung initialisiert werden müssen, erfordert die Verwaltung eines auf optimale Leistung optimierten Systems eine Automatisierung. Die Nutzung der Bereitstellung und Systemautomatisierung zum Löschen des Caches, zum Aufwärmen des Caches, zur Image-Verarbeitung usw. ist die einzig sinnvolle Möglichkeit, um diese vielen verschiedenen Subsysteme zu verwalten und sie gut geölt und problemlos zu halten.

  5. Aber auch das ist ohne Testautomatisierung nicht möglich : Bei so vielen beweglichen Teilen bricht bei fast jeder Änderung etwas. Und Sie müssen Änderungen vornehmen, um mit den Entwicklungen in Magento und AWS Schritt zu halten. Und das wird OFT passieren . Um die Änderungskosten so gering wie möglich zu halten, müssen alle Arten von Tests implementiert und vollständig automatisiert werden - von Komponententests über Integrationstests bis hin zu selenbasierten Funktionstests des tatsächlichen Standorts, die in tatsächlichen Testkonfigurationen durchgeführt werden, die die Produktionsumgebung imitieren. Jetzt sind Sie WIRKLICH froh, dass Sie alle Bereitstellungsprozesse automatisiert haben, oder?

fbrnc
quelle
2
Downvoting für eine Reihe von Links
Ralph Tice
9
@RalphTice Ich mag hier in der Minderheit sein, aber viele Links sind in Ordnung, besonders wenn sie genauso relevant sind wie die von fbmc. Nicht jeder möchte seinen Inhalt durch Löschen in einer StackExchange-Antwort öffentlich zugänglich machen.
Alan Storm
4
@AlanStorm Ich meine nicht, dass jeder abstimmen sollte, weil es sich um eine Reihe von Links handelt, sondern nur um eine Erklärung, warum ich mich für das Abstimmen entschieden habe. Ich möchte lieber Inhalte als Links zu Inhalten erhalten, wenn ich zu einer SE-Site komme, und ich benutze SE, um Video- und nicht englische Inhalte gezielt zu vermeiden.
Ralph Tice
3
Lone Link wird als schlechte Antwort angesehen (siehe FAQ ), da es für sich genommen bedeutungslos ist und die Zukunft der Zielressource nicht mehr garantiert ist . Es wäre vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
2.
2
Der erste Link scheint nicht mehr zu existieren. Wahrscheinlich ersetzt dies Folgendes
ermannob
4

Eine etwas einfachere (!) Lösung ist die Installation wie bei jedem anderen VPS. Ich biete jetzt seit ein paar Jahren ein kostenloses Bild an ... in letzter Zeit habe ich mich auf das neue Sydney DC konzentriert, weil es lokal ist - weitere Details unter http://www.greengecko.co.nz/magento_on_amazon_ec2, wenn Sie möchten interessiert das. Praktisch schmerzfrei anfangen - ein Klick und Sie sind da. Zeigen Sie mit Ihrem Browser auf die Instanz, um weitere Informationen zu erhalten. Dies ist ein guter Ausgangspunkt - aber schauen Sie nach und ändern Sie /etc/rc.local, wenn Sie darauf aufbauen möchten.

Das Wichtige ist, dass die Instanzen eine relativ geringe Leistung haben. Offensichtlich hilft es, viel Geld in die App zu stecken, aber selbst für einen moderat kleinen Webshop ist eine mittlere Instanz ein absolutes Minimum, nur um mehrere Kerne zu erhalten, und wirklich groß ist die kleinste, die erforderlich ist.

Außerdem ist der Amazon-Speicher langsam. Aus diesem Grund ist es noch wichtiger als sonst, alles aus dem Speicher bereitzustellen, was Sie können: Das Optimieren von Datenbanken, speichergestützten Caches usw. ist unabdingbar.

Sobald Sie das sortiert haben, funktioniert es in Ordnung. Die Anforderung, in einer VPC zu laufen, wenn Sie> 1 IP-Adresse möchten, ist wirklich ärgerlich (besonders, wenn Sie dies nicht merken, wenn Sie anfangen!), und wirklich die einzige Sache, auf die Sie stoßen werden.

Es ist einfach, die Plattform "on the fly" zu erweitern - schließlich wird der einzige Engpass die für PHP verfügbare Rechenleistung sein (abgesehen von ineffizientem Code!), Und mehrere "Engines" parallel zu betreiben ist wahrscheinlich die einfachste Option - Extras online zu bringen, wenn notwendig.

Genießen!

Steve

Steve Holdoway
quelle
VPC ist jetzt standardmäßig für neue AWS-Konten verfügbar. aws.typepad.com/aws/2013/03/…
Ralph Tice
4

Wir betreiben RDS Multi AZ, zwei NGINX-optimierte Server, zwei Lackserver + ELB und denselben Lackserver (anderer Port als Lack) SSL Nginx. Wir verwenden Elasticache und integrieren bald DynamoDB für die Sitzungsverwaltung von Magento. Wir verwenden auch S3 und Cloudfront.

Ich hatte ein interessantes Gespräch mit einer in Großbritannien ansässigen Hosting-Firma, mit der wir einen Server für 700 Pfund im Monat haben. Alles, was sie tun, ist Amazon AWS. Mit der richtigen Einrichtung und Optimierung in allen Bereichen, einschließlich Zurücksetzen von Magento, Deaktivieren von Modulen, Kategorienzählfunktion usw. usw.

Wir können derzeit 2400 - 3000 Treffer pro Sekunde auf Heim-, Kategorie-, Produkt- und CMS-Seiten (Lack-Seiten) erzielen. Auf nicht lackierten Seiten können wir je nach Geschäft 400 - 500 Anfragen pro Sekunde bearbeiten. Wir verwenden jetzt RDS Multi mit Reads.

Wir haben Magento Admin auch auf einen eigenen Knoten gesetzt, um Cron- und Admin-Datenverkehr auszuführen. http://administraton.mymagestore.com/admin

Wir haben nie zurückgeschaut. Wir haben einen der besten in Großbritannien eingesetzt, allesamt sehr teure Gastgeber.

Boju
quelle
1
Seien Sie vorsichtig - Admin-Sitzungen funktionieren aufgrund ihrer Größe nicht mit DynamoDB. Ich würde es sorgfältig testen - DynamoDB hat die maximale Elementgröße von 64 KB auf 256 KB erhöht, aber das ist möglicherweise noch nicht groß genug. Ich habe dies durch die Verwendung von Dateisitzungen umgangen, da ich nur einen Admin-Knoten und viele Frontend-Knoten hatte und daher eine separate local.xml für das Admin- und das Web-Frontend bereitgestellt habe.
Ralph Tice
2

Sie können fast alle grundlegenden AWS Services verwenden, um Magento zum Laufen zu bringen. Am einfachsten wäre es, EC2 mit Elastic IP und AWS VPC für die Sicherheitskonfiguration zu verwenden.

Ein kluger Weg ist die Bereitstellung von zwei Servern: Webserver + Datenbank. Der Webserver enthält Magento + Nginx + PHP + Backend-Caching (Redis oder APC sind eine gute Option) und einen separaten MySQL-Server im selben Subnetz. Diese Server können untereinander über eine private IP im privaten Netzwerk (konfiguriert über VPC) sichtbar sein. Nginx ist der Webserver der Wahl, sobald er statische Dateien superschnell liefern kann.

Der Datenbankserver sollte vor jedem Zugriff verborgen bleiben. Der Webserver wird auf den Ports 80 und 443 angezeigt. Es ist möglich, dem Webserver Elastic IP zuzuweisen. Später wird es nützlich sein, DNS (zum Beispiel über AWS Route 53) oder AWS Load Balancing zu konfigurieren.

Wie Sie bereits erwähnt haben, kann es schwierig sein, eine solche Konfiguration vorzunehmen. So können Sie die Einrichtung über Deploy4Me beschleunigen. Alle genannten Sicherheitsfunktionen, VMs und Netzwerke werden in wenigen Minuten konfiguriert.

Pavel Korsukov
quelle