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: