Die kurze Antwort lautet: Niemand außer Ihnen kann diese Frage beantworten.
Die lange Antwort lautet: Das Benchmarking Ihrer spezifischen Arbeitsbelastung ist etwas, das Sie selbst durchführen müssen, denn es ist ein bisschen so, als würden Sie fragen: "Wie lang ist ein Stück Schnur?".
Eine einfache statische Website mit einer Seite könnte auf einem Pentium Pro 150 gehostet werden und dennoch täglich Tausende von Impressionen liefern.
Der grundlegende Ansatz, den Sie zur Beantwortung dieser Frage verwenden müssen, besteht darin , es zu versuchen und zu sehen, was passiert. Es gibt viele Werkzeuge, mit denen Sie Ihr System künstlich unter Druck setzen können, um festzustellen, wo es knickt.
Ein kurzer Überblick hierzu ist:
- Stellen Sie Ihr Szenario auf
- Überwachung hinzufügen
- Verkehr hinzufügen
- Ergebnisse auswerten
- Aufgrund der Ergebnisse korrigieren
- Spülen, wiederholen, bis es einigermaßen glücklich ist
Stellen Sie Ihr Szenario auf
Grundsätzlich müssen Sie etwas testen, um eine Last zu testen. Richten Sie eine Umgebung zum Testen ein. Dies sollte nach Möglichkeit eine relativ genaue Schätzung Ihrer Produktionshardware sein, da Sie sonst Ihre Daten hochrechnen müssen.
Richten Sie Ihre Server, Konten, Websites, Bandbreite usw. ein. Auch wenn Sie dies auf VMs tun, ist dies in Ordnung, solange Sie bereit sind, Ihre Ergebnisse zu skalieren.
Also richte ich eine virtuelle Maschine mit mittlerer Leistung ein (zwei Kerne, 512 MB RAM, 4 GB Festplatte) und installiere meinen bevorzugten Load Balancer haproxy
in Red Hat Linux auf der VM.
Ich werde auch zwei Webserver hinter dem Load Balancer haben, die ich verwenden werde, um den Load Balancer einem Stresstest zu unterziehen. Diese beiden Webserver sind identisch mit meinen Live-Systemen eingerichtet.
Überwachung hinzufügen
Sie müssen einige Messwerte überwachen, damit ich messen kann, wie viele Anforderungen an meine Webserver gesendet werden und wie viele Anforderungen pro Sekunde verarbeitet werden können, bevor Benutzer eine Antwortzeit von mehr als zwei Sekunden erhalten.
Ich werde auch die RAM-, CPU- und Festplattenauslastung der haproxy
Instanz überwachen, um sicherzustellen, dass der Load Balancer die Verbindungen handhaben kann.
Wie das geht, hängt stark von Ihren Plattformen ab und liegt außerhalb des Rahmens dieser Antwort. Möglicherweise müssen Sie Webserver-Protokolldateien überprüfen, Leistungsindikatoren starten oder sich auf die Berichterstellungsfunktion Ihres Stresstest-Tools verlassen.
Einige Dinge, die Sie immer überwachen möchten:
- CPU auslastung
- RAM-Nutzung
- Festplattennutzung
- Festplattenlatenz
- Netzwerkauslastung
Sie können sich auch SQL-Deadlocks, Suchzeiten usw. ansehen, je nachdem, was Sie speziell testen.
Verkehr hinzufügen
Hier macht es Spaß. Nun müssen Sie eine Testlast simulieren. Es gibt viele Tools , die dies mit konfigurierbaren Optionen tun können:
Wähle eine Zahl, eine beliebige Zahl. Angenommen, Sie werden sehen, wie das System mit 10.000 Treffern pro Minute reagiert. Es spielt keine Rolle, welche Nummer Sie wählen, da Sie diesen Schritt mehrmals wiederholen und diese Nummer nach oben oder unten anpassen, um zu sehen, wie das System reagiert.
Idealerweise sollten Sie diese 10.000 Anforderungen auf mehrere Lasttest-Clients / -Knoten verteilen, damit ein einzelner Client nicht zu einem Engpass von Anforderungen wird. Zum Beispiel bietet JMeters Remote Testing eine zentrale Schnittstelle, über die mehrere Clients von einer steuernden Jmeter-Maschine aus gestartet werden können.
Drücken Sie die magische Go- Taste und beobachten Sie, wie Ihre Webserver zusammenbrechen und abstürzen.
Ergebnisse auswerten
Jetzt müssen Sie zu Ihren in Schritt 2 erfassten Messwerten zurückkehren. Sie sehen, dass Ihre haproxy
Box bei 10.000 gleichzeitigen Verbindungen kaum ins Schwitzen kommt, die Antwortzeit bei zwei Webservern jedoch nur fünf Sekunden beträgt. Das ist nicht cool - denken Sie daran, Ihre Reaktionszeit beträgt zwei Sekunden. Wir müssen also einige Änderungen vornehmen.
Sanieren
Jetzt müssen Sie Ihre Website mehr als zweimal beschleunigen. Sie wissen also, dass Sie entweder vergrößern oder verkleinern müssen.
Holen Sie sich größere Webserver, mehr RAM und schnellere Festplatten, um die Skalierung zu beschleunigen.
Holen Sie sich zum Skalieren mehr Server.
Verwenden Sie Ihre Metriken aus Schritt 2 und Testen, um diese Entscheidung zu treffen. Wenn Sie beispielsweise festgestellt haben, dass die Festplattenlatenz während des Tests massiv war, müssen Sie skalieren und schnellere Festplatten beschaffen.
Wenn Sie festgestellt haben, dass der Prozessor während des Tests zu 100% ausgelastet war, müssen Sie möglicherweise eine Skalierung durchführen, um zusätzliche Webserver hinzuzufügen, um den Druck auf die vorhandenen Server zu verringern.
Es gibt keine generische richtige oder falsche Antwort, es gibt nur das, was für Sie richtig ist. Versuchen Sie, die Größe zu erhöhen. Wenn dies nicht funktioniert, skalieren Sie stattdessen die Größe. Oder auch nicht, es liegt an Ihnen und etwas über den Tellerrand hinaus zu denken.
Nehmen wir an, wir werden skalieren. Also entscheide ich mich, meine zwei Webserver (das sind VMs) zu klonen und jetzt habe ich vier Webserver.
Spülen, wiederholen
Beginnen Sie erneut ab Schritt 3. Wenn Sie feststellen, dass die Dinge nicht wie erwartet verlaufen (wir haben beispielsweise die Webserver verdoppelt, aber die Antwortzeiten betragen immer noch mehr als zwei Sekunden), untersuchen Sie andere Engpässe. Beispielsweise haben Sie die Webserver verdoppelt, aber immer noch einen beschissenen Datenbankserver. Oder Sie haben mehr VMs geklont, aber da sie sich auf demselben physischen Host befinden, haben Sie nur eine höhere Konkurrenz für die Serverressourcen erzielt.
Mit diesem Verfahren können Sie dann andere Teile des Systems testen. Versuchen Sie, den Webserver direkt oder den SQL-Server mit einem SQL-Benchmarking-Tool zu erreichen, anstatt den Lastenausgleich zu aktivieren .
Die Kapazitätsplanung beginnt mit der Messung, in diesem Fall Reaktionszeit gegen Last. Sobald Sie wissen, inwieweit die Programme mit der Last langsamer werden, was NICHT eine lineare Funktion ist, können Sie ein Ziel für die Antwortzeit auswählen und dann ermitteln, welche Ressourcen erforderlich sind, um dieses Ziel für eine bestimmte Lastmenge zu erreichen.
Die Leistungsmessung wird immer mit gemacht Zeiteinheiten, wie
Dinge wie% CPU und IOPS sind systemspezifisch, daher verwenden Sie sie nur, wenn Sie das System geplant und in der Vorproduktion gemessen haben, um als "Ersatz" für das zu fungieren, was Ihnen wichtig ist.
quelle
Kapazitätsplanung ist ein lästiges Biest. Es ist so viel Wissenschaft wie Kunst (wenn auch definitiv eine dunkle).
Ihr bester Fall ist, dass Sie fundierte Entscheidungen treffen und das Glück Sie begünstigt, indem die Realität Ihren Annahmen entspricht. Wenn Ihre Kapazitätsanforderungen mit der Realität übereinstimmen, sehen Sie aus wie ein mystischer Yogi. Wenn Ihre Annahmen die Realität übersteigen, scheinen Sie leider überbeansprucht und überbeansprucht zu sein. Noch bedauerlicher ist, dass Sie, wenn Ihre Annahmen unter der tatsächlichen Realität liegen (oder auf andere Weise falsch sind), nicht über die erforderlichen Kapazitäten verfügen und sich bemühen müssen, die Ausfälle Ihrer stöhnenden Infrastruktur zu mindern, was den Anschein erweckt, dass Ihnen die Kompetenz fehlt.
Kein Druck...
Unglücklicherweise ist die dunkle Kunst der Kapazitätsplanung mehr als vernünftigerweise in einer einzigen Serverfehlerantwort zusammengefasst werden kann. Es ist wirklich ein Thema, das Bücher verdient.
Zum Glück gibt es ein solches Buch: " Die Kunst der Kapazitätsplanung "
quelle
Um den Beitrag von Mark Henderson zu erweitern, schreibe ich dies speziell für Apache. Um noch einmal zu wiederholen, was er gesagt hat: "Die kurze Antwort lautet: Niemand kann diese Frage außer Ihnen beantworten." Der Text dieser Antwort ist stark von meiner Antwort auf eine ähnliche Frage zur Leistung einer Drupal-Website entlehnt .
Konfigurieren von Apache mit Mod_Prefork
Apache ist wohl einer der (wenn nicht der) beliebtesten verfügbaren Webserver. Es ist Open Source und wird immer noch aktiv gepflegt. Sie können es sowohl auf Linux- als auch auf Windows-Betriebssystemen ausführen, es ist jedoch in der Linux / Unix-Welt beliebter.
Sie sollten niemals eine standardmäßige Apache-Konfiguration verwenden. Sie müssen Apache immer auf Ihre Site abstimmen. Die Haupt- Apache-Konfigurationsdatei unter CentOS befindet sich unter
/etc/httpd/conf/httpd.conf
und die Haupt-Apache-Konfigurationsdatei auf Ubuntu-Systemen befindet sich normalerweise unter/etc/apache2/apache2.conf
. Zusätzliche Konfigurationsdateien werden beispielsweise für virtuelle Hosts verwendet .Wie jede Menge Software ist Apache so aufgebaut, dass es flexibel ist und an die Bedürfnisse einer bestimmten Website angepasst werden kann. Es gibt verschiedene Multi-Processing-Module , die Apache so konfigurieren kann, dass sie an einen Netzwerkport binden und die Anforderungen annehmen und verarbeiten.
In den meisten Fällen wird bei Apache-Standardinstallationen, die mit CentOS- und Ubuntu-Servern geliefert werden, das MPM " mod_prefork " verwendet. Angenommen, Sie verwenden mod_prefork (wenn Sie sich nicht sicher sind, ist dies wahrscheinlich, aber nur Sie können dies feststellen). Im Folgenden finden Sie die Grundlagen zur Konfiguration:
MaxClients
&ServerLimit
Variablen sein.Dies ist sicherlich nicht die endgültige Antwort. Das Optimieren Ihres Apache-Servers nimmt Zeit in Anspruch und erfordert Erfahrung, um genau das Richtige zu finden.
quelle
Außerdem würde ich vorschlagen, mit den Architekten und Ingenieuren zu sprechen, die die Anwendungen entworfen / erstellt haben, um Engpässe, einzelne Fehlerquellen und Lizenzbeschränkungen zu ermitteln.
quelle