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.













