Freitag, 31. August 2012

Session über Mysql

Session's werden normal vom Webserver als Datei abgelegt.

Wenn also eine Webapplikation Sessions verwendet dann veranlasst jeder Besucher eine solche Datei.
Hat man z.B. 5000 Besucher hat man 5000 Dateien, hat man 100.000 Besucher hat man 100.000 Dateien.

Diese Dateien werden vom System her bei jedem Aufruf auf ihre zeitliche Gültigkeit geprüft.
Über die gesamt Menge der vorhandenen Sessiondateien werden die Fileerstellungsdaten mit dem Ablaufdatum verglichen und ab Erreichung gelöscht.

Jedermann dürfte es klar sein, das  je mehr Besucher auf der Site sich aufhalten es umso länger dauert.
Es ist die möglicherweise sehr hohe Anzahl von Dateien die dann das Gesamtsystem langsam macht.

Wer seine Applikation bei sich lokal auf einem Testserver aufgesetzt hat, der kann die Auswirkungen leicht erkennen wenn er mit dem Apache Benchmark Test (AB) diese einmal aufruft  und dabei die Werte vom Parameter -n in Stufen erhöht  - die Performance geht deutlich runter je höher diese Anzahl ist.

Nun liegt es auf der Hand sich von den vielen möglichen Dateien zu verabschieden.
Mysql ist heute auf jedem normalen Server vorhanden, Mysql ist schnell und vor allem man hat nicht tausende von Einzeldateien.
Zudem kann man für allein dem Lesevorgang die volle Wucht der Leistungsfähigkeit der Mysql Engine nutzen.

Über PHP kann man einen entsprechenden Handler einsetzen und wer PHP 5.4.X verwendet stellt fest - die haben dafür sogar eine Basisklasse   SessionHandlerInterface ,  welche in dieser Hinsicht nochmals einen enormen Schub bringt.

Setzt man also einen Mysql Handler um dann stellt man fest - die Anzahl der möglichen Request's pro Sekunde geht um 8% hoch, setzt man die PHP 5.4 Basisklasse ein sogar um über 17%.

Test's mit dem AB Benchmark und unterschiedliche Anzahl von Usern ( Paramater -n) zeigten, das der Gewinn im Vergleich zum normalen Handling immer höher wird, je mehr User in der Leitung hängen.

Bei kleiner Userzahl ist der Gewinn im Vergleich zwar immer noch sehr  hoch fällt aber etwas geringer aus.
Das liegt daran das das Filesystem eines Webservers kleine Filezahlen besser verkraften kann als große.

Unterm Strich aber gibt es nichts daran zu deuteln - bis zu 17% höhere Requestzahl nur weil man die Session über Mysql abwickelt - das ist enorm.

Nun hat ja nicht jede Website 5000 oder mehr Besucher die da gleichzeitig kommen.
Der Gewinn ist dennoch vorhanden - alle Besucher werden einfach schneller bedient.
Und - je mehr mit Session-Variablen gearbeitet wird, desto größer der Vorteil.

Und das schönste ist - alles für so gut wie kostet nix.


Keine Kommentare: