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


113

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

Verbunden:

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

Es steht Ihnen frei, verschiedene Tools und Techniken für verschiedene Webserver, Frameworks usw. sowie Best Practices für Webserver im Allgemeinen zu beschreiben.

Antworten:


127

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 haproxyin 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 haproxyInstanz ü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 haproxyBox 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 .


1
Dies ist hervorragend für Lasttests geeignet, sagt jedoch wenig über die Kapazitätsplanung aus. Wer kann über Googles skalierbare Architektur, die von Anfang an konzipiert wurde, oder die Alternativen mit weniger und teureren Boxen schreiben.
Rleir

10

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

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

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.


8

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 "


5

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.confund 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:

  • Ermitteln Sie die maximale Speicherkapazität, die Apache verwenden soll.
  • Testen Sie Ihre Website ausgiebig und bestimmen Sie, wie viel Speicher jeder Apache-Prozess belegt (mithilfe von top).
  • Nehmen Sie den Apache-Prozess im Vordergrund, der den meisten Speicher belegt, fügen Sie ein wenig mehr Speicher hinzu und dividieren Sie dann Ihre erste Zahl (die maximale Menge an Speicher, die Apache verwenden soll) durch diese neue Zahl.
  • Die Zahl, die Sie erhalten, sollte Ihre MaxClients& ServerLimitVariablen 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.


1
Die Speichernutzung, die nur auf der obersten Ebene basiert, ist leicht fehlerhaft. Überprüfen Sie z. B. , ob stackoverflow.com/questions/7880784/…. Außerdem möchten Sie möglicherweise das Python-Skript "ps_mem.py" anstelle von top für die Speichernutzung verwenden oder sogar die direkt angehängten Werte zum prozess unter / proc
Dennis Nolte

1
Die gesamte Antwort ist aufgrund des Hinweises wert, den Sie hinzugefügt haben: "Sie sollten niemals eine standardmäßige Apache-Konfiguration verwenden". Wir können das nie genug betonen.
Esra-s

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.