Montag, 30. August 2010

ClanSphere Tuning durch PHP Cache Erweiterungen

In diesem Blog-Post möchte ich auf die verschiedenen Möglichkeiten eingehen, die Ladezeit und den Speicherverbrauch von ClanSphere zu reduzieren und welche Nebeneffekte und Probleme dadurch auftreten können. Da der reibungslose Betrieb einer Seite immer im Vordergrund steht gebe ich entsprechende Ratschläge, um dies weiterhin zu gewährleisten. Generell übersteigt der Nutzen allerdings bei weitem die teils kleineren negativen Auswirkungen.


1. Opcode Cache

PHP-Software wird erst bei der Anfrage des Nutzers an den Browser ausgeführt und dies bei jeder Anfrage erneut. Dies ist sehr langsam im Vergleich zu kompilierten bzw. durchgängig laufenden Web-Anwendungen, die z.B. in Java oder Python geschrieben sind. Opcode Cache Erweiterungen für PHP gleichen diesen Nachteil erheblich aus, indem diese den auszuführenden Quelltext bestmöglich vorübersetzt zwischenspeichern und für kommende Anfragen im Anschluss vorhalten. Dieser Cache ist bei vielen dieser PHP-Erweiterungen auch einsehbar und Statistiken zur Nutzung und Inhalten verfügbar.

Verbreitete Vertreter dieser Kategorie:
  • APC
  • eAccelerator
  • ionCube Loader (ehemals phpa, kostenpflichtig)
  • XCache
  • Zend Optimizer bzw. Zend Guard (neuere Versionen basieren auf APC, kostenpflichtig)
1.1. Vor- und Nachteile

Diese PHP-Erweiterungen bieten teilweise auch die Funktionalität an verschlüsselte PHP-Dateien auszuführen. Bei der hier besprochenen OpenSource Software fällt dieser Aspekt aber unter den Tisch. An sich läuft das Opcode Caching auch in Standard-Einstellungen problemlos und vor allem von selbst ohne zutun durch den Entwickler der PHP-Software, die damit betrieben wird. Probleme treten derzeit noch vor allem im Zusammenspiel mit PHP 5.3 (z.B. Namespaces, komplexe OOP-Konstrukte) auf. Es sollten nur als stabil markierte Versionen solcher Erweiterungen installiert und verwendet werden. Wer all dies beachtet sollte die Geschwindigkeitsvorteile von 10 bis 50% je nach Erweiterung genießen können.

2. Variablen Cache

Alle folgenden Instruktionen erfordern, dass die im Zusammenhang genannte PHP-Erweiterung auf dem Webspace aktiv ist. Bei kostenlosem und oft auch bei sehr günstigen Webspace-Angeboten sind all diese Varianten wohl nicht oder nur stark eingeschränkt verfügbar. Fragt im Zweifelsfall bei eurem Provider nach, ob eine PHP-Erweiterung für das Zwischenspeichern von PHP-Variablen aktiv bzw. aktivierbar ist. Teilweise wird der Variablen Cache auch als User Cache bezeichnet. Wer einen V- oder Dedicated-Server besitzt kann sich auch sehr gut selbst darum kümmern. Weiterhin ist ClanSphere 2010.0 oder neuer erforderlich. Sollte eine der folgenden PHP-Erweiterungen im Cache-Mode von ClanSphere aktiviert, aber auf dem Webspace nicht aktiv sein, geschieht ein automatischer und problemfreier Fallback auf den Standard-Modus, in dem der Variablen-Cache als Dateien auf den Webspace ausgelagert wird.

2.1. APC User Cache in ClanSphere

Alles folgende ist alternativ auch mit dem Zend Optimizer möglich, solange dieser aktuell genug ist. Die aktuelle Version 5 wird in jedem Fall funktionieren. Das aktivieren erfolgt schnell und einfach über den folgenden Befehl in der setup.php im Hauptverzeichnis von ClanSphere:
$cs_main['cache_mode'] = 'apc';
In der Navigation des Administrators sollte bei Erfolg ein Unterschied auf der Seite "System -> Cache" sichtbar sein. Statt einer Datei-Endung ist dort beim Cache-Namen nun die Cache-ID des jeweiligen Eintrags angegeben und der Cache-Mode in der oberen rechten Ecke der Seite steht auf apc. Optimalerweise sollte APC derzeit in Version 3.0.x verwendet werden, solange die 3.1-Reihe noch als Beta markiert ist, wie mit dem zuletzt veröffentlichten 3.1.4 noch immer der Fall, aber auch 3.1.x sollte nahezu problemfrei laufen.

2.2. XCache User Cache in ClanSphere

Das aktivieren erfolgt schnell und einfach über den folgenden Befehl in der setup.php im Hauptverzeichnis von ClanSphere:
 $cs_main['cache_mode'] = 'xcache';
In der Navigation des Administrators sollte bei Erfolg ein Unterschied auf der Seite "System -> Cache" sichtbar sein. Statt einer Datei-Endung ist dort beim Cache-Namen nun die XCache-ID und getrennt mit einem Punkt danach die Cache-ID des jeweiligen Eintrags angegeben und der Cache-Mode in der oberen rechten Ecke der Seite steht auf xcache. Optimalerweise sollte XCache derzeit in Version 1.2.x verwendet werden, solange die 2.x-Reihe noch nicht als stabile Version verfügbar ist. Allerdings sollten auch ältere 1.x.x Versionen noch reibungslos ihren Dienst vollrichten.

2.3. Vor- und Nachteile

 Wie weiter oben schon erwähnt sind diese beiden Varianten fast nirgends von Haus aus verfügbar und dies hat auch einen Grund: Sie belasten den Arbeitsspeicher des Rechners zusätzlich und wenn viele Kunden auf dieses Feature zurückgreifen kann ein normaler Massen-Hoster einpacken, da er mit Pech bei weitem nicht mehr so viele Benutzer auf einen Server bekommt. Ein anderer Nachteil ist, dass ClanSphere bei Verwendung dieser Caching Option nicht mehr prüft, ob sich an Theme- und Template-Dateien Änderungen ereignet haben. Sollte dies der Fall sein muss also jedes Mal der Cache als Vorsichtsmaßnahme geleert werden, um die aktualisierte Version in der Ausgabe zu erhalten. Wer ändert aber schon laufend etwas daran? Dies dürfte wohl nur selten der Fall sein. Generell sollte man so etwas auf (lokale) Testumgebungen auslagern. Nun aber zum Hauptvorteil: Der Geschwindigkeitszuwachs ist beträchtlich. Die Anfragen an den Webserver können mitunter doppelt so schnell wie ohne diese Technik ausgeliefert werden. In einigen Fällen ist der Zuwachs gar noch größer. Dies erlaubt also z.B. bei gleicher Hardware die doppelte Besucherzahl zur selben Zeit auf einer ClanSphere-Webseite und erzeugt dagegen nur eine geringfügig höhere Last im Arbeitsspeicher.

2.4. Anmerkung zu APC Fehlern

Der User Cache in APC 3.1.X, vor allem in APC 3.1.4, gibt im Debug-Modus alle 10-20 Requests eine Meldung aus, dass eine bereits zwischengespeicherte Variable fälschlicherweise nochmals gecached wird. Dieses Fehlverhalten ist nicht ClanSphere vorzuhalten, sondern ein Bug in APC selbst. Sollte so ein Fehler direkt in ClanSphere auftreten wird dies mit einem eigenen internen Fehler gemeldet. Wer auf diesen Fehler stößt sollte also auf APC 3.0.X zurückfahren oder einfacher noch die APC Warneinstellung hierzu deaktivieren, da sie eh nur optional und für die Entwicklung gedacht ist. Die Warneinstellung bzw Warnung hat durchaus ihre Berechtigung, da mehrfaches sichern einer Variable zu einer Art Zeitbombe werden kann, die den Cache destabilisiert und auch Leistungseinbußen zur Folge hat, aber solange dies nicht reibungslos klappt ist die Option auf einer produktiv genutzten Webseite unnütz.


2.5. Weitere Informationen zu User Caches

Der im eAccelerator früher verfügbare User Cache ist seit Version 0.9.6.0 aus der PHP-Erweiterung gestrichen und wird voraussichtlich auch nicht mehr wieder eingebaut. Da eAccelerator 0.9.5.X und älter überhaupt nicht mit PHP 5.3 und neuer laufen (werden) gibt es für diese Erweiterung auch keinen User Cache Support. Wer vor hat dies dennoch zu probieren kann sich gern bei mir melden, grundlegend lauffähige Inhalte sind vorhanden, aber diese werden wohl nie mehr in ClanSphere einfließen.

Sollte jemand noch Andere PHP-Erweiterungen als APC bzw. Zend Optimizer und XCache kennen, die solche Funktionen über eine stabile API verfügbar machen und zumindest auf einigen Webspaces installiert sind kann man sich dies eventuell ansehen und gegebenenfalls nachrüsten. PHP-Erweiterungen wie z.B. shmop werden dafür allerdings nicht in Betracht gezogen, da deren Nutzung sehr kompliziert und umständlich ist.

Keine Kommentare:

Kommentar veröffentlichen