it-swarm.com.de

Wie führen Sie Lasttests und Kapazitätsplanung für Websites durch?

Dies ist eine kanonische Frage zur Kapazitätsplanung für Websites.

Verbunden:

Welche Tools und Methoden zur Kapazitätsplanung werden für Websites und Webanwendungen empfohlen?

Sie können gerne verschiedene Tools und Techniken für verschiedene Webserver, Frameworks usw. sowie Best Practices beschreiben, die für Webserver im Allgemeinen gelten.

115
gWaldo

Die kurze Antwort lautet: Niemand außer Ihnen kann diese Frage beantworten.

Die lange Antwort lautet, dass Sie das Benchmarking Ihrer spezifischen Arbeitsbelastung selbst durchführen müssen, da es ein bisschen so ist, als würden Sie fragen: "Wie lang ist ein Stück Schnur?".

Eine einfache einseitige statische Website könnte auf einem Pentium Pro 150 gehostet werden und dennoch jeden Tag Tausende von Impressionen liefern.

Der grundlegende Ansatz, den Sie zur Beantwortung dieser Frage wählen müssen, besteht darin, zu versuchen und zu sehen, was passiert. Es gibt viele Werkzeuge, mit denen Sie Ihr System künstlich unter Druck setzen können, um zu sehen, wo es knickt.

Ein kurzer Überblick darüber ist:

  • Stellen Sie Ihr Szenario auf
  • Überwachung hinzufügen
  • Fügen Sie Verkehr hinzu
  • Ergebnisse auswerten
  • Abhilfe basierend auf den Ergebnissen
  • Spülen, wiederholen, bis einigermaßen glücklich

Stellen Sie Ihr Szenario auf

Grundsätzlich benötigen Sie zum Testen einer Last etwas, gegen das Sie testen können. Richten Sie eine Umgebung zum Testen ein. Dies sollte nach Möglichkeit eine ziemlich genaue Vermutung für Ihre Produktionshardware sein, da Sie sonst Ihre Daten extrapolieren 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 werde ich eine virtuelle Maschine mit mittlerer Leistung (zwei Kerne, 512 MB RAM, 4 GB Festplatte) einrichten und meinen bevorzugten Load Balancer installieren, haproxy inside - Red Hat Linux auf der VM.

Ich werde auch zwei Webserver hinter dem Load Balancer haben, die ich zum Stresstest des Load Balancers verwenden werde. Diese beiden Webserver sind identisch mit meinen Live-Systemen eingerichtet.

Überwachung hinzufügen

Sie müssen einige Metriken überwachen, damit ich messen kann, wie viele Anforderungen an meine Webserver gesendet werden und wie viele Anforderungen ich pro Sekunde verarbeiten kann, bevor Benutzer eine Antwortzeit von mehr als zwei Sekunden erhalten.

Ich werde auch die RAM-, CPU- und Festplattennutzung auf der Instanz haproxy überwachen, um sicherzustellen, dass der Load Balancer die Verbindungen verarbeiten kann.

Wie dies zu tun ist, 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 Berichtsfunktionen Ihres Stresstest-Tools verlassen.

Ein paar 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.

Fügen Sie Verkehr hinzu

Hier macht es Spaß. Jetzt müssen Sie eine Testlast simulieren. Es gibt viele Tools , die dies mit konfigurierbaren Optionen tun können:

Wählen Sie eine Nummer, eine beliebige Nummer. 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 viele Male 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 bei 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

Nun müssen Sie zu Ihren Metriken zurückkehren, die Sie in Schritt 2 gesammelt haben. Sie sehen, dass bei 10.000 gleichzeitigen Verbindungen Ihre haproxy-Box kaum ins Schwitzen kommt, aber die Antwortzeit mit zwei Webservern ist eine Berührung über fünf Sekunden. Das ist nicht cool - denken Sie daran, Ihre Reaktionszeit beträgt zwei Sekunden. Wir müssen also einige Änderungen vornehmen.

Abhilfe schaffen

Jetzt müssen Sie Ihre Website um mehr als das Doppelte beschleunigen. Sie wissen also, dass Sie entweder skalieren oder verkleinern müssen.

Holen Sie sich zum Skalieren größere Webserver, mehr RAM und schnellere Festplatten.

Holen Sie sich zum Skalieren mehr Server.

Verwenden Sie Ihre Metriken aus Schritt 2 und testen Sie, um diese Entscheidung zu treffen. Wenn Sie beispielsweise festgestellt haben, dass die Festplattenlatenz während des Tests sehr hoch war, müssen Sie skalieren und schnellere Festplatten erhalten.

Wenn Sie festgestellt haben, dass der Prozessor während des Tests zu 100% ausgelastet war, müssen Sie möglicherweise skalieren, 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 es mit einer Skalierung. Wenn dies nicht funktioniert, skalieren Sie stattdessen. Oder auch nicht, es liegt an Ihnen und einigen, die über den Tellerrand hinaus denken.

Nehmen wir an, wir werden skalieren. Also entscheide ich mich, meine zwei Webserver (sie sind VMs) zu klonen und jetzt habe ich vier Webserver.

Spülen, wiederholen

Beginnen Sie erneut mit Schritt 3. Wenn Sie feststellen, dass die Dinge nicht wie erwartet verlaufen (z. B. haben wir die Webserver verdoppelt, die Antwortzeiten betragen jedoch immer noch mehr als zwei Sekunden), prüfen Sie andere Engpässe. Zum Beispiel haben Sie die Webserver verdoppelt, haben 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, anstatt den Load Balancer zu treffen, den Webserver direkt zu treffen, oder den SQL Server mit einem SQL-Benchmarking-Tool .

127
Mark Henderson

Die Kapazitätsplanung beginnt mit der Messung, in diesem Fall Reaktionszeit gegen Last. Sobald Sie wissen, inwieweit sich die Programme mit dem Laden verlangsamen, was KEINE lineare Funktion ist, können Sie ein Antwortzeitziel auswählen und dann herausfinden, welche Ressourcen erforderlich sind, um dieses Ziel für eine bestimmte Lastmenge zu erreichen.

Die Leistungsmessung erfolgt immer mit Zeit Einheiten, as

  • sie sind das, was den Benutzern wichtig ist
  • sie können vergrößert und verkleinert werden

Dinge wie% CPU und IOPS sind systemspezifisch, sodass Sie sie nur verwenden, wenn Sie das System geplant und in der Vorproduktion gemessen haben, um als "Ersatz" für das zu fungieren, was Ihnen wichtig ist: Zeit.

10
davecb

Kapazitätsplanung ist ein lästiges Tier. Es ist so viel Wissenschaft wie Kunst (wenn auch definitiv eine dunkle).

Ihr bester Fall ist, dass Sie fundierte Entscheidungen treffen und Glück/Glück begünstigt Sie, indem die Realität Ihren Annahmen entspricht. Wenn Ihre Kapazitätsannahmen der Realität entsprechen, sehen Sie aus wie ein mystischer Yogi. Wenn Ihre Annahmen die Realität überschreiten, scheinen Sie leider überschritten zu haben und zu viel ausgegeben zu haben. Wenn Ihre Annahmen unter der letztendlichen Realität liegen (oder auf andere Weise falsch sind), fehlt Ihnen leider die Kapazität, die Sie benötigen, und Sie müssen sich bemühen, um die Ausfälle Ihrer stöhnenden Infrastruktur zu mildern, wodurch Sie den Eindruck haben, dass Ihnen die Kompetenz fehlt.

Kein Druck...

Leider ist die dunkle Kunst der Kapazitätsplanung mehr als vernünftigerweise in einer einzigen Antwort auf einen Serverfehler zusammengefasst werden kann. Es ist wirklich ein Thema, das Bücher wert ist.

Glücklicherweise gibt es ein solches Buch: " Die Kunst der Kapazitätsplanung "

8
gWaldo

Um Mark Hendersons Beitrag zu erweitern, schreibe ich dies speziell für Apache. Um noch einmal zu wiederholen, was er gesagt hat: "Die kurze Antwort lautet: Niemand außer Ihnen kann diese Frage beantworten." Der Text dieser Antwort ist stark von meiner Antwort auf eine ähnliche Frage zu einem Leistung der Drupal-Website entlehnt.

Apache mit Mod_Prefork konfigurieren

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 unter Linux- als auch unter Windows-Betriebssystemen ausführen, es ist jedoch in der Linux/Unix-Welt beliebter.

Sie sollten niemals eine sofort einsatzbereite Apache-Konfiguration verwenden. Sie müssen Apache immer auf Ihre Site abstimmen. Die Hauptdatei Apache-Konfiguration 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 für Dinge wie Virtual Hosts verwendet.

Wie viele andere Softwareprodukte ist Apache so konzipiert, dass es flexibel ist und an die Anforderungen einer bestimmten Website angepasst werden kann. Es gibt verschiedene Multi-Processing-Module , mit denen Apache konfiguriert werden kann, um eine Verbindung zu einem Netzwerkport herzustellen und die Anforderungen zu akzeptieren und zu verarbeiten.

Bei Standard-Apache-Installationen, die mit CentOS- und Ubuntu-Servern geliefert werden, wird meistens das MPM " mod_prefork " verwendet. Angenommen, Sie verwenden mod_prefork (wenn Sie sich nicht sicher sind, ist dies wahrscheinlicher, aber nur Sie können dies feststellen). Hier sind die Grundlagen für die Konfiguration:

  • Finden Sie heraus, wie viel Speicher Apache maximal verwenden soll.
  • Testen Sie Ihre Website gründlich und bestimmen Sie, wie viel Speicher jeder Apache-Prozess verwendet (mit top).
  • Nehmen Sie den Apache-Prozess an die Spitze, der den meisten Speicher benötigt, fügen Sie ein wenig hinzu, und teilen Sie dann Ihre erste Zahl (maximale Speichermenge, die Apache verwenden soll) durch diese neue Zahl.
  • Die Zahl, die Sie erhalten, sollte Ihre MaxClients & ServerLimit Variablen sein.

Dies ist sicherlich nicht die endgültige Antwort. Optimieren Ihres Apache-Servers braucht Zeit und erfordert Erfahrung, um genau das Richtige zu finden.

5
David W

Außerdem würde ich vorschlagen, mit den Architekten und Ingenieuren zu sprechen, die die Anwendungen entworfen/erstellt haben, um zu versuchen, Engpässe, einzelne Fehlerquellen und Lizenzbeschränkungen zu identifizieren.

0
DuckDNS