3. December 2006, 20:32, by Silvan Mühlemann

Memcached oder Cache_Lite – Wer ist schneller?

Stop WatchWochenende heisst für mich: Zeit für Plauschprojekte. Für die einen sind Plauschprojekte “Saufen bis zum Morgengrauen”. Für mich ist’s der Vergleich der Performance von memcached mit Cache_Lite. “Memcached natürlich 1000 mal schneller” höre ich sagen? Prüfen wir es doch.

Das Setup ist wie folgt: Unser Modell beinhaltet eine expensivePage.php. Auf einer realen Website wäre dies eine Seite, deren Erzeugung aufwändig ist. Zum Beispiel eine Regionenhomepage von tilllate. Diese Seite braucht 1 Sekunde, um erzeugt zu werden. Mit 10 Regionen gibt es 10 verschiedene Versionen dieser Seite (im folgenden Items genannt).

Test Setup

Die expensivePage.php liefert in unserem Laborversuch nun nicht HTML zurück, sondern ein Zufallsstring, welche es von der Disk lesen muss. Um die Bearbeitungszeit zu simulieren, hat das Skript ein sleep(1) eingebaut.

Der Cache wird zugeschaltet…

Damit die Seite nicht jedes Mal neu “generiert” werden muss, kann sie gecached werden. Hierzu verwenden wir momentan Cache_Lite auf tilllate. Und zwar entweder über NFS oder auf die lokale Disk. In diesem Versuch schauen wir

Die expensivePage.php kann seine “Berechnung” über folgende Methoden cachen:

  1. kein Caching
  2. Caching mit Cache_Lite auf die lokale Disk
  3. Caching mit Cache_Lite auf eine entfernte Disk über NFS (2ms entfernt)
  4. Caching mit memcached auf einen entfernten Server

Variante 3 und 4 ist interessant für ein Cluster-Setup, wo ein Cache gemeinsam mit anderen Servern geteilt werden soll.

Bei einem Cache-Miss, dauert ein Seitenaufruf eine Sekunde. Bei einem Hit eben so lange, wie der Cache braucht, die Daten zu holen.

Ueber Apachebench rufe ich die expensivePage.php nun 10 000 mal auf. Und zwar mit 10 Threads. Ich messe, wie viele Requests pro Sekunde der Webserver abwickeln kann. Und damit erreiche ich eine Leistungszahl für den Cache.

Das Ergebnis

Cache_Lite vs. memcache

  • Memcache ist 5x schneller als Cache_Lite, wenn man auf einen entfernten Server cachen will.
  • Cache_Lite auf die Lokale HD ist 5x schneller als über NFS

Dieses Ergebnis ist kaum abhängig von der Anzahl unterschiedlichen Items im Cache. Ich habe Tests mit 10, 50, 100, 200, 1000 verschiedenen Items gemacht und die Leistung war nicht signifikant unterschiedlich.

2 Comments

  1. Interessant wär jetzt noch, wieviele pages/sec du hinkriegst, wenn du einfach z.B. ein

    machst (am besten die gleiche Länge des Strings wie oben in den Tests), um die “natürliche” Grenze deines Systems zu sehen. Und dann noch ganz ohne PHP einfach mit statischen .html Seiten.

    So kann man das nämlich besser vergleichen, könnte ja sein, dass die 100 pages/sec Grenze wo anders erreicht wird als beim Caching-Teil :)

    chregu

    Comment by Chregu — 3. December 2006 @ 22:23

  2. Bingo :-) Ohne PHP-Ballast komme ich auch nicht weiter als die 100 PV/s (ist ein lahmes System). Das heisst, die Caches leisten womöglich noch mehr. Cool :-) Muss den Test mal auf einem besseren System laufen lassen…

    Comment by Silvan Mühlemann — 4. December 2006 @ 06:19

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

© 2017 tilllate Schweiz AG - Powered by WordPress