1 EC2-Instanz pro Website - Verwalten Sie mehrere Websites in der Amazon Cloud mit EC2

7

Ich verwalte mehrere Websites, die meisten basieren auf WordPress und alle basieren auf dem LAMP-Stack. Ich verschiebe alle meine Websites in die Amazon Cloud. Ich bin neu bei AWS und habe vor, eine Website nach der anderen zu verschieben, beginnend mit meiner kleinsten Website.

Meine Frage ist, ob ich meine gesamte Site auf 1 EC2-Instanz und / oder 1 Website auf 1 separate Instanz stellen soll.

Das klingt wahrscheinlich dumm, da sich jeder im herkömmlichen Webhosting-Kontext definitiv für Letzteres entscheiden würde. Der Grund, warum ich an Ersteres gedacht habe, ist:

  • Wiederverwendbarer LAMPENstapel
    • Kann ich mit dem gebrauchsfertigen LAMP-Stack einen eigenen AMI generieren, damit ich ihn für meine verschiedenen Websites wiederverwenden kann? Der Grund, warum ich mich nicht für AMIs der Community entscheide, ist der folgende
      • Ich weiß nur nicht, welchen ich verwenden soll
      • Als jemand, der nicht so ahnungslos über Linux oder LAMP Stack ist, möchte ich genau das haben, was ich brauche, nicht mehr und nicht weniger
  • Kosten : Platzieren jeder Site auf einer einzelnen großen Instanz im Vergleich zu jeder Site auf einer kleineren Instanz. Ich denke nicht, dass dies der Fall sein sollte, aber ich dachte, es wäre nicht schlimm zu fragen
  • Schwierigkeiten bei der Verwaltung mehrerer Instanzen

Skalierbarkeit

Ich bin mir sicher, dass ich in ein paar Monaten ungefähr dreimal mehr Rechenleistung benötigen werde als jetzt (neue Websites wurden gestartet, jetzt habe ich 6, bis dahin habe ich 10; der Verkehr zu vorhandenen Websites nimmt schnell zu). Angenommen, ich entscheide mich für eine horizontale Skalierung, z. B. mit 3 Instanzen des gleichen Typs, den ich gerade verwende.

Meine weitere Frage ist also, wie sich dieses Szenario auf meine Entscheidung auswirkt, ob ich meine Sites trennen oder alle auf einer 1/1 Gruppe von EC2-Instanzen zusammenfassen soll.

Ich weiß, dass dies wahrscheinlich mit dem Unterschied zwischen vertikaler und horizontaler Skalierung in der Amazon Cloud zu tun hat, den ich noch lese. Dies hat wahrscheinlich auch mit dem Wissen über virtuelle Maschinen / Server zu tun, von denen ich ein kompletter Idiot bin, aber es wird mir nichts ausmachen, wenn nötig mehr herauszufinden. Ich dachte jedoch, ich sollte nur fragen, da dies Auswirkungen auf die Richtung haben könnte, in die ich über die Amazon Cloud gehen sollte. Fühlen Sie sich frei, mir eine Ohrfeige zu geben, wenn Sie denken, dass ich so faul bin und zuerst meine Hausaufgaben machen sollte :)

Jede Hilfe wird sehr geschätzt!

Haftungsausschluss: Bitte geben Sie an, ob dies auf superuser.com oder einer Stackexchange-Site veröffentlicht werden soll. Vielen Dank

ericn
quelle

Antworten:

10

Zunächst einige Rohdaten von S. Ostermann et al., 2010 :

Grundlegende Instanzspezifikationen:

+-----------+---------+------+-------+-------+------+-------+---------------+---------------+
|   Name    |  ECUs   | RAM  | Archi |  I/O  | Disk | Cost  |    Reserve    | Reserved Cost |
|           | (Cores) | [GB] | [bit] | Perf. | [GB] | [$/h] | [$/y], [$/3y] | [$/h]         |
+-----------+---------+------+-------+-------+------+-------+---------------+---------------+
| m1.small  | 1 (1)   | 1.7  | 32    | Med   | 160  | 0.1   | 325, 500      | 0.03          |
| m1.large  | 4 (2)   | 7.5  | 64    | High  | 850  | 0.4   | 1300, 200     | 0.12          |
| m1.xlarge | 8 (4)   | 15   | 64    | High  | 1690 | 0.8   | 2600, 4000    | 0.24          |
| c1.medium | 5 (2)   | 1.7  | 32    | Med   | 350  | 0.2   | 650, 1000     | 0.06          |
| c1.xlarge | 20 (8)  | 7    | 64    | High  | 1690 | 0.8   | 2600, 4000    | 0.24          |
+-----------+---------+------+-------+-------+------+-------+---------------+---------------+

Grundlegende Leistungs- / Kostenanalyse:

+---------------+------------+----------+--------+-----------+---------+--------+-----------+----------+
|    System     | Peak Perf. |   HPL    | STREAM | RandomAc. | Latency | Bandw. | GFLOP/ECU | GFLOPS/$ |
|               | [GFLOPS]   | [GFLOPS] | [GBps] | [MUPs]    | [µs]    | [GBps] |           |          |
+---------------+------------+----------+--------+-----------+---------+--------+-----------+----------+
| m1.small      | 4.4        | 1.96     | 3.49   | 11.6      | -       | -      | 1.96      | 19.6     |
| m1.large      | 17.6       | 7.15     | 2.38   | 54.35     | 20.48   | 0.7    | 1.79      | 17.9     |
| m1.xlarge     | 35.2       | 11.38    | 3.47   | 168.64    | 17.87   | 0.92   | 1.42      | 14.2     |
| c1.medium     | 22         | 3.91     | 3.84   | 46.73     | 13.92   | 2.07   | 0.78      | 19.6     |
| c1.xlarge     | 88         | 51.58    | 15.65  | 249.66    | 14.19   | 1.49   | 2.58      | 64.5     |
| 16x m1.small  | 70.4       | 27.8     | 11.95  | 77.83     | 68.24   | 0.1    | 1.74      | 17.4     |
| 16x c1.xlarge | 1408       | 425.82   | 16.38  | 207.06    | 45.2    | 0.75   | 1.33      | 33.3     |
+---------------+------------+----------+--------+-----------+---------+--------+-----------+----------+

Die tatsächliche Leistung liegt normalerweise unter 50% der theoretischen Leistung. Die eine Gruppe von Werten, die möglicherweise vermutet werden, sind die für c1.medium, die nicht ganz mit den erwarteten Ergebnissen übereinstimmen (z. B. Bandbreite).

Die Hauptkosten für EC2 für eine typische Arbeitslast sind die Kosten für Instanzen - andere Kosten (Bandbreite, bereitgestellter Speicher usw.) machen normalerweise weniger als 25% der Gesamtkosten aus. Man erwartet nicht, dass die Leistung perfekt skaliert - und das geht aus den obigen Daten hervor. Insbesondere im Hinblick auf die horizontale Skalierung scheint die Effizienz erheblich zu sinken, wenn Sie mehr Rechenkapazität hinzufügen.

Angesichts des oben Gesagten und unter Berücksichtigung der Tatsache, dass es andere Faktoren gibt, die über die Leistung der Rohdatenberechnung hinausgehen (z. B. E / A-Leistung, Speicher usw.), liegt es nahe, dass die vertikale Skalierung der wirtschaftlichste Ansatz ist.

Leider gibt es andere Überlegungen, die über die Wirtschaftlichkeit des Szenarios hinausgehen. Zuverlässigkeit ist ein Schlüssel. Bei einer einzelnen Instanz führt der Ausfall dieser Instanz zu einem Ausfall Ihres gesamten Setups. Eine mögliche Lösung kann die automatische Skalierung sein (dh die Beibehaltung einer Instanzanzahl von 1). Eine einzelne Instanz ist jedoch immer noch anfällig für Probleme, die in einer bestimmten Verfügbarkeitszone usw. auftreten können.

Irgendwann ist es notwendig, horizontal zu skalieren - die Frage wird einfach zu einer Frage, wann der ideale Zeitpunkt ist. Ich würde wahrscheinlich vorschlagen: - Vertikale Skalierung von mindestens einigen Instanzgrößen (viel mehr, wenn Sie mit einem t1.micro beginnen) - Trennen Sie Ihre Datenbanken in separate Instanzen (da diese nicht auf die gleiche Weise wie Ihre Webserver skaliert werden) - Horizontal skalieren, bis Sie ein wenig Redundanz haben - Vertikal skalieren, bis Sie die maximale Instanzgröße erreichen - Danach horizontal skalieren (möglicherweise anfänglich mit kleineren Instanzen)

Zurück zu den Fragen - Das Ausführen einer einzelnen Website pro Instanz (oder pro Instanzensatz) ist immer teurer. Zusätzlich zu den höheren Fixkosten (z. B. ein Load Balancer pro Website anstelle eines einzelnen Load Balancers) werden Sie Ihre Instanzen nicht so effizient nutzen (dh eine Website kann zu einem Zeitpunkt eine hohe Last aufweisen, wenn andere Websites vorhanden sind meistens im Leerlauf - was bedeutet, dass einige Instanzen überlastet sind und andere im Leerlauf sitzen). In Bezug auf die Logistik ist das Problem möglicherweise nicht so schlimm, wie man es sich vorstellen kann - das Hauptproblem besteht darin, alles unabhängig zu verwalten (was Sie mit einigen Konfigurationsmanagement-Tools (z. B. Puppet / Chef) möglicherweise vermeiden, aber das ist normalerweise kein Schritt genommen, bis Ihr Setup etwas größer wird).

Andererseits besteht eine der Einschränkungen von EC2-Instanzen darin, dass Sie einer bestimmten Instanz nur eine einzige öffentliche IP-Adresse zuweisen können (was einige Auswirkungen auf bestimmte SSL-Setups hat).

Sie können sicherlich Ihre eigenen AMIs generieren - das ist eigentlich ziemlich üblich. Normalerweise beginne ich mit Linux AMI von AmazonIch finde, es ist eines mit dem geringsten Overhead (sehr ressourcenschonend und schnell) und dem besten, das von AWS unterstützt wird (es wird regelmäßig aktualisiert usw.) - und ich bevorzuge die RHEL / CentOS-Distributionen (auf denen Amazon Linux installiert ist) basierend) auf die Debian / Ubuntu, die die andere beliebte Wahl sind. Sobald Sie eine Instanz angepasst haben, können Sie Snapshots Ihrer EBS-Volumes erstellen und eine AMI registrieren. Dabei wird die Snapshot-ID als Image übergeben, auf dem das Root-Volume basieren soll. Theoretisch können Sie Ihr Betriebssystem viel weiter anpassen, selbst wenn Sie eine eigene Distribution erstellen (aber immer noch die Amazon-Kernel verwenden). Wenn Sie jedoch keinen bestimmten Anwendungsfall haben, ist dies wahrscheinlich nicht besonders vorteilhaft. Meine persönliche Präferenz für Wordpress,

Zum Schluss noch einmal die Skalierung. Über die grundlegende Ökonomie des oben diskutierten Problems hinaus besteht die Schwierigkeit darin, mehrere Instanzen als eine "erscheinen" zu lassen. Dazu gehört, dass sichergestellt wird, dass jede Instanz dieselben Daten bereitstellt, dass der Lastenausgleich zwischen Ihren Instanzen erfolgt und möglicherweise Details wie PHP-Sitzungen verarbeitet werden. Es wird schwieriger sein, wenn jede Site auf ihren eigenen Instanzen ausgeführt wird - aber wahrscheinlich nicht mit einem signifikanten Abstand (da Sie die Funktionalität hoffentlich in Ihrem AMI konfiguriert haben). Mehrere Instanzen bedeuten jedoch ein komplexeres System und mehr Dinge, die im Auge behalten werden müssen. (Zu diesem Thema gibt es einige Fragen zu ServerFault, z. B. dies , das oder das - Wenn Sie Details zum Skalieren eines bestimmten Setups benötigen, stellen Sie diese bitte als weitere Frage.

Als abschließender Kommentar: Wenn Ihr Setup keine besonderen Anforderungen an die Ausführung einer einzelnen Site auf einer eigenen Instanz / einem eigenen Cluster hat (z. B. eine stark unterschiedliche Konfiguration / Anforderungen), würde ich die Ausführung mehrerer Sites auf einer einzelnen Instanz / einem Cluster bevorzugen, da dies einfacher ist Skalierbarkeit, wirtschaftlicher und effizienter und stärker auf den Geist des „Cloud Computing“ (dh gemeinsame Ressourcen) ausgerichtet.

Verweise:

cyberx86
quelle
1. Ich werde meine Sites in einer EC2-Instanz platzieren. 2. Ich werde bei einer Instanz bleiben, sie zuerst vertikal skalieren und dabei mehr über die horizontale Skalierung lesen. 3. Es sieht so aus, als ob der virtuelle Apache-Host mir helfen kann mehrere Domains zu bedienen und das ist gut genug, da ich SSL nicht so schnell
benutze
Ich habe vergessen zu erwähnen, dass ich auch das Liux AMI von Amazon bevorzuge, da ich bestimmte Dinge über Linux weiß und auch verwirrt bin, wenn es darum geht, ein AMI aus den vielen verfügbaren Community-AMIs auszuwählen.
Nochmals vielen