BLOG

Boost my Website

Towerdefensehq.de besuchen zur Zeit - bei ca. 20.000 Seitenaufrufen - über 4.500 Besucher am Tag. Das ist schon eine ganze Menge und wir sind stets bemüht, die Seite so effizient laufen zu lassen, wie nur möglich.

Memcache

Dazu haben wir bisher Memcache eingesetzt. Dieser Caching-Daemon, der auch von drupal.org benutzt wird, speichert direkt PHP Daten im Speicher des Servers, was einen sehr schnellen Zugriff auf komplexe PHP Daten erlaubt. Dies hatte der Seite zwar keinen nennenswerten Sprung im Seitenaufbau gebracht, wohl aber in der Skalierbarkeit der ganzen Seite. Mit aktivem Memcache konnte der Server erheblich mehr Seitenaufrufe je Sekunde leisten.

Boost

Allerdings gibt es auch noch Boost. Boost ist ein statischer HTML-Dateien Cache. Die Seiten werden von Drupal erstellt, über das Boost Modul als Dateien abgespeichert und dann über Apache's mod_rewrite ausgeliefert. Der Vorteil liegt klar darin, daß PHP bei diesem Verfahren überhaupt nicht bemüht werden muss. Kein PHP bedeutet auch kein MySQL. Dies schlägt sich beim Aufruf der Seite darin nieder, daß der Antritt der Seite ungeheuer schnell wird. Ersichtlich wird das aus den Benchmarks weiter unten.

Der Nachteil von Boost ist allerdings auch offensichtlich. Die Seiten liegen eine Stunde statisch im Cache und während dessen kann sich nichts am Inhalt ändern. Es ist nicht möglich, einen Block der aktuellen Besucherzahlen anzuzeigen, keine letzten Kommentare. Dies wäre höchstens über Ajax möglich - aber nicht alle Module haben so etwas von Haus aus implementiert. Module wie Ajax Comments oder eine Ajax Anbindung für Blöcke können dann ihr volles Potenzial ausspielen.

Boost ist nur für anonyme Besucher aktiv. Aktive Besucher der Seite bekommen eine Version ohne jeden Cache ausgeliefert. Man erkennt in den Benchmarks, daß Seitenaufrufe ohne Cache in Relation sehr langsam sind. Es gilt also abzuwiegen, wie viele Besucher die Seite angemeldet nutzen. Bei Towerdefensehq sind das unter 1% am Tag. Von daher eignet sich Boost Ideal für diese Seite. Die wenigen Nutzer, die sich anmelden, können die Dienste immer noch nutzen und mit einem Seitenaufruf von ca. 3 Sekunden leben. Anonyme Gäste bekommen die Seite gefühlt auch nicht schneller zu Gesicht.

Benchmark

Ich habe dafür einige Tests mit dem Apache Tool "ab" gemacht. Alle Benchmarks sollten mit diesem Aufruf laufen:

ab -c10 -n5000 http://www.towerdefensehq.de/

Als "Milchmädchen Rechnung" bedeuten zehn Aufrufe pro Sekunde 846.000 am Tag. Bei TDHQ entspräche dies bei fünf Seitenabrufen je Besucher 169.200 Besuchern am Tag. Diese Zahl liegt also noch in weiter Ferne und dieser Benchmark ist vollkommen synthetisch. Aber wir wollen ja mal sehen, was Drupal so aushalten kann.

Ohne Cache und Boost

Abgebrochen nach 15 Minuten und 2.000 Aufrufen. Also weniger Konkurrenz und weniger Aufrufe um überhaupt erst einmal Daten zu erhalten.

prov03:~#  ab -c1 -n100 http://www.towerdefensehq.de/
Concurrency Level:      1
Time taken for tests:   62.769397 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      6484500 bytes
HTML transferred:       6435800 bytes
Requests per second:    1.59 [#/sec] (mean)
Time per request:       627.694 [ms] (mean)
Time per request:       627.694 [ms] (mean, across all concurrent requests)
Transfer rate:          100.88 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   466  627 173.1    577    1555
Waiting:      416  551 142.6    512    1381
Total:        466  627 173.1    577    1555
Percentage of the requests served within a certain time (ms)
  50%    577
  66%    633
  75%    678
  80%    707
  90%    808
  95%   1015
  98%   1152
  99%   1555
 100%   1555 (longest request)

Memcache
Concurrency Level:      10
Time taken for tests:   56.870313 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      323280000 bytes
HTML transferred:       320960000 bytes
Requests per second:    87.92 [#/sec] (mean)
Time per request:       113.741 [ms] (mean)
Time per request:       11.374 [ms] (mean, across all concurrent requests)
Transfer rate:          5551.28 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.6      1      16
Processing:    22  111  94.0     92    2261
Waiting:       13   62  57.1     50    1999
Total:         22  112  93.9     93    2262
Percentage of the requests served within a certain time (ms)
  50%     93
  66%    112
  75%    126
  80%    137
  90%    178
  95%    229
  98%    366
  99%    492
 100%   2262 (longest request)
Boost
Concurrency Level:      10
Time taken for tests:   28.356216 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      324488960 bytes
HTML transferred:       322468556 bytes
Requests per second:    176.33 [#/sec] (mean)
Time per request:       56.712 [ms] (mean)
Time per request:       5.671 [ms] (mean, across all concurrent requests)
Transfer rate:          11175.08 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8   3.3      8      42
Processing:    15   47  14.3     47     728
Waiting:        2   11   7.7     11     161
Total:         20   56  14.0     55     732
Percentage of the requests served within a certain time (ms)
  50%     55
  66%     57
  75%     59
  80%     60
  90%     64
  95%     68
  98%     76
  99%     93
 100%    732 (longest request)

Fazit

zum Vergleich:

  Kein Cache Memcache Boost
Laufzeit des Tests nicht geschaft 56s 28s
Anfragen pro Sekunde 1.59 87.92 176.33
Kürzeste Zeit 577ms 93ms 55ms
Längste Zeit 1555ms 2262ms 732ms

Ohne Cache ist nichts zu machen. TDHQ hat einfach zu viele Module und die Homepage so viele Views und Daten, daß diese in annehmbarer Zeit nicht zu verarbeiten sind. 1,5 Sekunden ist zwar immer noch recht gut, aber es dürfen auch keine 2 Aufrufe gleichzeitig reinkommen, was zu gut besuchten Zeiten durchaus vorkommen kann. Bitte nicht falsch verstehen: jedes System so eines Umfangs würde so reagieren, außer es wäre alles absolut auf den Punkt programmiert und damit unflexibel.

Memcache schlägt sich gut. Die Antwortzeiten sind annehmbar und der Server hält einiges an Anfragen aus. Die Spitze bei der Zeit für die längste Anfrage beruht darauf, daß zu viel parallel passiert. Linux kann zwar eine Menge Dinge gleichzeitig ausführen, aber irgendwo muss dann doch einmal ein Prozess warten. Diese Spitze ist dann der Prozess, der zuletzt kam.

Der Apache ohne PHP und MySQL schafft doppelt so viele Anfragen und hat nur eine sehr kurze Latenzzeit bis das erste Byte ausgeliefert ist. Ich sage hier "Der Apache", da dieser Test in gewisser Weise nichts mit Boost zu tun hat. Ausgeliefert werden statische Dateien. Boost bietet lediglich die Grundlage dafür. Genau genommen zeigt es, was der Apache kann ohne mit mod_php zu arbeiten.

Diese Zahlen sind so deutlich, daß man sich gut überlegen sollte, ob die Seite eher für anonyme Nutzer oder für Mitglieder ausgerichtet ist. Sind die Nutzer eher nicht angemeldete Mitglieder, ist Boost einfach ein Muss.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.