Wie viel Leistung braucht ein Webserver?
Die benötigte Leistung für einen Webserver, z.B. für den Betrieb einer WordPress-Website oder eines Online-Shops, hängt wesentlich von folgenden Faktoren ab:
- Besucher-Anzahl: Je mehr gleichzeitige Besucher ihr habt, desto höher der Ressourcen-Bedarf. Hierbei müsst ihr die maximale Anzahl gleichzeitiger Besucher ermitteln.
- Komplexität der Anwendung: Die Komplexität der Anwendung kann einen enormen Einfluss auf die notwendigen Ressourcen haben. Ein CPU-Kern kann bei einem komplexer Webshop evt. nur 5 Anfragen / Sekunde verarbeiten, bei einer einfachen statischen Website können dagegen 5000 Anfragen / Sekunde problemlos verarbeitet werden.
- Server-Software & -Konfiguration: Die verwendete Software und die Konfiguration des Servers kann einen enormen Einfluss auf die Leistung haben. PHP7 ist beispielsweise doppelte so leistungsfähig wie PHP5. Ebenso können Caching-Mechanism, z.B. vom Betriebssystem, vom Webserver, von PHP und von MySQL, einen enormen Einfluss haben.
- Verwendete Hardware: Nutzt der Anbieter billige Desktop-PC-Hardware oder kommt qualitative Server-Hardware zum Einsatz?
Um dennoch ein paar Zahlen zu liefern, habe ich einen Lasttest einer komplexeren WordPress-Seite durchgeführt.
Inhaltsverzeichnis
Test-Server & Test-Seite
Als Test-Server habe ich verschiedene Google Cloud Server genutzt. Diese liefen mit Ubuntu 18.04, PHP 7.2 mit aktiviertem OPCache, Apache 2.4 und MySQL 5.7. Dabei wurde die Standardkonfiguration verwendet. Mit einer optimierten Konfiguration lässt sich noch deutlich mehr Performance erzielen (dazu später mehr).
Die Performance die ein Webserver erzielen kann hängt stark von der betrieben Website ab. Damit die Test-Seite möglichst realitätsnah ist, habe ich meine Seite www.php-einfach.de verwendet. Zum Testzeitpunkt basierte sie auf WordPress 5.3, hat über 200 Unterseiten (mit 2500 Revisionen), und es waren 15 unterschiedlichste Plugins aktiviert. Dies stellt doch eine vergleichsweise komplexe komplexe Website da.
Der Engpass bei dem Lasttest war die CPU. Sofern man ausreichend RAM hat um alle wichtigen Daten (Datenbank, PHP-Dateien etc.) im Hauptspeicher zu halten, bringt zusätzlicher Arbeitsspeicher keinen Zugewinn. Darum testete ich verschiedene Server mit unterschiedlicher Anzahl an CPU-Kernen. Mehr Kerne bedeut mehr Leistung, zu mindest bei diesem Test.
Lasttest durchführen
Für die Durchführung von Lasttest bei Webservern kann ich zwei Tools empfehlen: ApacheBench (ab) und Locust.
Mit ab könnt ihr unter Linux wie folgt einen Lasttest auf eine Website durchführen:
1 |
ab -c 20 -n 1000 http://www.eure-url.de/ |
Mittels dem Parameter -c 20 werden 20 parallele Verbindungen simuliert, und der Lasttest wird durchgeführt bis 1000 Aufrufe erreicht sind (-n 1000).
Leider lässt sich mit ab nur eine URL testen. Für komplexere Lasttest ist Locust zu empfehlen: Dort schreibt ihr ein Python-Script, welches einen Besucher eurer Website simuliert. Somit kann dieser Besucher verschiedenste URLs aufrufen, was der Praxis eher entspricht.
Für den Lasttest hier habe ich sowohl ab als auch Locust verwendet. Die Ergebnisse waren in meinem Fall vergleichbar.
Ergebnis – Wie viele Besucher hält mein Webserver aus?
Im nachfolgendem Diagramm seht ihr die Aufrufe pro Minute, die die Test-Server mit unterschiedlicher Anzahl an CPU-Kernen aushalten konnte.
Ohne spezielle Optimierungen kann man bei einer halbwegs komplexen WordPress-Seite von rund 720 Aufrufen pro Minute ausgehen. Dies entspricht 43 200 Aufrufe pro Stunde. Besitzt eure Server mehr CPU-Kerne, steigt entsprechend die Anzahl der Aufrufe die verarbeitet werden können. Natürlich nur unter der Voraussetzung, die Konfiguration ist soweit korrekt.
Ist eure Website hauptsächlich statisch, so können ein Page Cache eure Website enorm beschleunigen: Statt dass der Inhalt einer Seite aus der Datenbank geladen wird und dann aufwendig von WordPress in HTML übersetzt wird, speichert ein Page Cache das fertige HTML der Website auf der Festplatte und lädt es direkt von dort.
Ich persönlich nutze W3 Total Cache. Aktiviere ich dieses Plugin, so sehe ich eine Beschleunigung um ca. den Faktor 3. Ein Webserver mit nur 1 Kern kann dann fast 2500 Aufrufe pro Minute verarbeiten.
Ob ihr einen Page-Cache nutzen könnt hängt von eurer Anwendung ab. Ist eure Website hauptsächlich statisch, wie z.B. ein Blog, dann ja. Ist die Website aber dynamisch und hängt vom eingeloggten Besucher ab, z.B. ein Forum, eine Social Network oder der Warenkorb eines Onlie-Shops, so könnt ihr leider keinen Page-Cache verwenden.
Für Online-Shops solltet ihr ebenfalls mehr Ressourcen einplanen als für eine einfache Website: Die Datenbank ist meistens umfangreicher und es müssen komplexere Operationen durchgeführt werden.
CPUs vs. RAM vs. Festplatte
Die nächste schwierige Entscheidung ist, ob man lieber mehr RAM möchte, oder mehr CPUs, oder doch mehr Speicherplatz. Dabei gehe ich persönlich wie folgt vor:
- Festplatte: Hier muss man abschätzen, wie viel Speicherplatz man wohl benötigen wird. Es bringen einem 500 GB Speicherplatz nichts, wenn man nur 5 GB benötigt. Zu Beachten ist, ob E-Mails beim Speicherbedarf mitgerechnet werden, und falls ja, wie groß wohl die E-Mail-Boxen werden. Selbst für komplexe Website inklusive der Datenbank werden oftmals nur 1 – 5 GB Speicherplatz benötigt (Ausnahme sind große Bildsammlungen oder Videos). Pro benötigte E-Mail-Inbox sollte man 1 – 10 GB Speicherplatz einrechnen. Oftmals sind 50 GB ausreichend.
- SSD vs HDD: SSD sind deutlich schneller, HDD bieten dagegen mehr Platz. Sofern man nicht sehr viel Platz benötigt, empfehle ich Angebote mit SSD Festplatten. Ist der Server aber korrekt konfiguriert, sollte der Unterschied nicht zu groß sein, da die wichtigen Daten sich im RAM befinden sollten. Bei einer schlechten Konfiguration oder bei vielen Lese-/Schreibvorgängen, sind SSD bedeutend schneller.
- RAM: Für einen schnellen Webserver empfiehlt es sich, dass sämtliche wichtigen Dateien sich im RAM befinden. Den notwendigen RAM abzuschätzen ist nicht immer leicht. Als Faustregel empfehle ich mindestens Größe der Datenbank x 2. So kann die gesamte Datenbank sich im RAM befinden und es ist meistens noch genug RAM für andere Anwendungen übrig. Ob DDR3, DDR4 oder DDR4-ECC RAM ist dabei nicht so entscheidend.
- CPU-Cores: Sofern sich hinter eurer Anwendung keine gigantische Datenbank mit enormen RAM-Bedarf befindet, ist oftmals die CPU das Bottleneck. Sprich, je mehr CPU-Leistung desto besser. Zu Beachten ist aber, dass die Leistungswerte der CPU-Cores bei den Anbietern sehr unterschiedlich sein können.