nginx Geschwindigkeitstest mit XCache und Varnish Cache

fehlt wasgeht sogutsehr guthat geholfen (No Ratings Yet)
Loading ... Loading ...
Werbung




Einsatz von XCache und/oder Varnish in Verbindung von nginx

Das Web muss schneller werden. Dazu wurde der bereits schon schnelle Webserver “nginx” entwickelt. In Verbindung mit PHP FastCGI bietet er schon einge Geschwindigkeitsvorteile gegenüber Apache2 – ganz abgesehen vom Speicherhunger. Nun bietet PHP selbst auch noch einige Cache-Möglichkeiten wie XCache und auch ein vorgeschalteter Proxy-Cache Varnish kann die Webseiten beschleunigen. Ich möchte hier einen Test aller 3 Möglichkeiten aufzeigen.

Voraussetzungen

varnish Cache loggt von sich aus nicht. Nginx alleine und in Verbindung mit XCache allerdings schon. Diese zusätzliche Schreibzugriffe verlangsamen den Server natürlich von Hause aus schon. Also aktiviere ich bei varnish den varnishncsa, dieser loggt für varnish die Zugriffe. Der Test läuft auf einem frisch installierten WordPress Blog. Als Analysetool benutze ich “Apache Benchmark – ab”, dies Bestandteil des Packetes “apache2-utils” und kann einfach nachinstalliert werden.

Nginx ist mit gzip aktiviert konfiguriert und soll statischen Code wie js und css Dateien cachen.

Als Testabfrage benutze ich 5000 Anfragen mit jeweils 25 Anfragen gleichzeitig.

# ab -n 5000 -c 25 http://testdomain.tld/

nginx/PHP FastCGI alleine

Das Ergebnis für nginx lautet:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking servername.tld (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software:        nginx
Server Hostname:        servername.tld
Server Port:            80

Document Path:          /
Document Length:        8331 bytes

Concurrency Level:      25
Time taken for tests:   911.099 seconds
Complete requests:      5000
Failed requests:        4361
(Connect: 0, Receive: 0, Length: 4361, Exceptions: 0)
Write errors:           0
Total transferred:      42819324 bytes
HTML transferred:       41644324 bytes
Requests per second:    5.49 [#/sec] (mean)
Time per request:       4555.497 [ms] (mean)
Time per request:       182.220 [ms] (mean, across all concurrent requests)
Transfer rate:          45.90 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   4.9      0      83
Processing:  1757 4548 295.1   4564    5576
Waiting:     1749 4548 295.2   4564    5576
Total:       1808 4548 294.1   4564    5576

Percentage of the requests served within a certain time (ms)
50%   4564
66%   4665
75%   4730
80%   4770
90%   4866
95%   4960
98%   5067
99%   5248
100%   5576 (longest request)

Auswertung
Der Test dauerte 911.099 Sekunden.
Pro Request wurden 182.220 ms benötigt.

nginx/PHP FastCGI mit aktivierten XCache

XCache ist ein Cache-System, das die bereits kompilierten Programme vorhalten soll. So entfällt bei einem erneuten Seitenaufruf diese Kompilierzeit des PHP Scriptes. Dadurch können schon erherbliche Geschwindigkeitseinsparungen gemessen werden:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking servername.tld (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software:        nginx
Server Hostname:        servername.tld
Server Port:            80

Document Path:          /
Document Length:        8327 bytes

Concurrency Level:      25
Time taken for tests:   527.259 seconds
Complete requests:      5000
Failed requests:        3149
(Connect: 0, Receive: 0, Length: 3149, Exceptions: 0)
Write errors:           0
Total transferred:      42819500 bytes
HTML transferred:       41644500 bytes
Requests per second:    9.48 [#/sec] (mean)
Time per request:       2636.293 [ms] (mean)
Time per request:       105.452 [ms] (mean, across all concurrent requests)
Transfer rate:          79.31 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   4.5      0      75
Processing:  1731 2631 151.9   2624    3865
Waiting:     1724 2631 151.6   2624    3865
Total:       1776 2632 152.3   2624    3940

Percentage of the requests served within a certain time (ms)
50%   2624
66%   2672
75%   2699
80%   2719
90%   2784
95%   2860
98%   2938
99%   3035
100%   3940 (longest request)

Auswertung
Man erkennt bereits eine Verbesserung:
Der Test dauerte 527.259 Sekunden
Pro Request wurden 105.452 ms benötigt.

nginx/PHP FastCGI mit vorgeschaltetem varnish Web Accelerator

Der varnish HTTP accelerator ist ein Proxy Programm, der vor einem Webserver geschaltet wird. Der Webserver muss dazu dann auf einem anderen Port laufen (im Test auf 8888). varnish fragt den Webserver beim ersten Aufruf einer Seite ab und speichert dann die Seite in einem Cache ab. Alle nachfolgenden Anfragen dieser Seite werden dann aus dem Cache bedient, der Webserver wird nicht mehr belastet. Dies hat erhebliche Vorteile: Der Webserver benötigt keine Serverzeit mehr und die PHP Seiten müssen nicht kompiliert werden. Aber auch einige Nachteile: Dies funktioniert nicht mit personalisierten Seiten, diese müssen immernoch vom Webserver bearbeitet werden. Für einen WordPress-Blog mag dies Funktionieren, wenn man auf die Cookies bei der Kommentar-Funktion verzichten kann. Auf Mitgliederportalen oder Browserspielen kann varnish allerdings nicht mehr eingesetzt werden.

Nicht überraschend ist das Ergebnis:

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking servername.tld (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests

Server Software:
Server Hostname:        servername.tld
Server Port:            80

Document Path:          /
Document Length:        8331 bytes

Concurrency Level:      25
Time taken for tests:   0.964 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      42725000 bytes
HTML transferred:       41655000 bytes
Requests per second:    5188.64 [#/sec] (mean)
Time per request:       4.818 [ms] (mean)
Time per request:       0.193 [ms] (mean, across all concurrent requests)
Transfer rate:          43297.81 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    2   0.9      2      10
Processing:     0    3  19.0      2     283
Waiting:        0    3  19.0      1     272
Total:          2    5  19.6      3     284

Percentage of the requests served within a certain time (ms)
50%      3
66%      3
75%      3
80%      3
90%      5
95%      6
98%      6
99%      8
100%    284 (longest request)

Auswertung
Der Test dauerte 0.964 Sekunden
Pro Request wurden 0.193 ms benötigt.
Dies ist das Resulat einer gecachten Seite, die varnish direkt ausliefern kann.

Fazit

Es kommt auf die Anwendung an.
Für Portale, die ständig für bestimmte Mitglieder andere Inhalte anzeigen sollen, ist Nginx in Verbindung mit XCache die beste Wahl. Varnish kann zwar mit Bedingungen arbeiten und die Anfragen dann durchreichen, aber auch varnish benötigt RAM Speicher.

Für Statische Seiten oder einem WordPress-Blog, auf dem Inhalte nur abgerufen müssen, ist varnish zur Beschleunigung in Verbindung mit nginx und XCache eine gute Wahl. Dies kann den Server imens entlasten und jede Menge Requests mehr abarbeiten.

bisherige Suchbegriffe:

  • vergleich varnish nginx
  • varnish nginx
  • nginx mit php koppeln


Werbung


Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>