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 .