crashcow

Drupal, GPFS, Dateizugriffe und Performance

Jedem, der sich schon einmal gewundert hat, warum Drupal in einer etwas größeren Installation doch sehr schnell schnarchend langsam wird, sei empfohlen, sich einmal die von Drupal pro Request benutzten Dateien anzuschauen. Ich kämpfe momentan mit einer Installation, die bei jedem Seitenaufruf mehr als 400 Dateien einlesen musste. Solange sich diese Installation in einer normalen Serverumgebung befindet, sollte das nicht wirklich problematisch sein, braucht php doch nur 0.02 - 0.03 Sekunden um diese Dateien einzulesen und zu verarbeiten. Diese extrem verkürzte Bearbeitungszeit merkt man deutlich wenn man sich die Latenz anschaut, mit der Drupal auf einen Request antwortet.

 

Hinderlich wird das alles erst, wenn sich mehrere Server ein Filesystem via GPFS sharen, dann braucht php ganz schnell mehr als 6 Sekunden um die gleichen Operationen auszuführen. Die Lösung ist also Drupal aus dem GPFS auszulagern und im normalen Filesystem des Servers abzulegen. Der Nachteil liegt auf der Hand: keine einzelne über viele Server verteilte und von allen Servern aus erreichbare Drupalinstallation mehr und daher synchronisieren der Server von Hand.

 

Nach ein paar Experimenten war dann jedoch schnell klar, dass man das "default"-Verzeichnis und vor allem das darin enthaltene "files" lieber doch wieder ins GPFS zurücklegt, damit sich alle Server in Echtzeit bei den hochgeladenen Dateien und vor allem bei der settings.php bedienen können.

 

Der Zeitgewinn ist jedenfalls enorm. In Verbindung mit einem vernünftigen Caching - zum Beispiel memcache - ist es so möglich selbst komplexe Drupal-Seiten in weniger als 2 Sekunden auszuliefern.

Tags:

Comments

Gast's picture
Gast says

Also 2 Sekunden halte ich schon für kritisch bei einem social network. Ist das unter starker Last als authorisierter Nutzer oder der Optimalwert für anonymen traffic?
Wie sind denn die mount optionen (mtime, atime, etc.) und Konfiguration für das GPFS (pagepool, filecache, etc.)? Ist die Latenz zum GPFS Server das bottleneck?
Normalerweise sollte der PHP Bytecode cache die access times doch ausgleichen? Der aggregierte code sollte ja gecached werden. Oder waren das vorher diskless clients? Läuft das GPFS über ein seperates Netz? Vielleicht lohnt es sich auch in Infiniband zu investieren? Auch schonmal mit nginx+fcgi experimentiert?

Andreas's picture
Andreas says

Das GPFS ist optimal für unsere Serverumgebung eingerichtet, da läuft nicht nur Drupal drauf. Daher ging die Lösung eher in die Richtung Drupal auszulagern als an unserer Implementation von GPFS herumzuschrauben.
Die zwei Sekunden bezogen sich auf einen angemeldeten Nutzer.

Gast's picture
Gast says

Hallo Andreas,
gut, vielen Dank für die Antwort :o)
Übrigens finde ich berliner.de sehr gut gelungen.
Darüber bin ich auf Dich gestoßen (bzw über drupel.org).
Viele Grüße,
Doris

Andreas's picture
Andreas says

Das freut mich. Danke :)

Gast's picture
Gast says

Das hört sich sehr interessant an... aber leider weiß ich nicht, was dieses GPFS bedeutet.
Ist das nur möglich, wenn man Zugriff auf den Server hat? Was ist also, wenn ich meine Drupal-Seite bei einem ganz normalen Procier wie hosteurope oder strato habe. Hat man dann die Voraussetzungen dafür??
Sorry für die vielleicht für Dich etwas dumme Frage...
Würde mich aber über eine Antwort freuen :o)
Doris

Andreas's picture
Andreas says

Hallo Doris,

also normalerweise ist das etwas, mit dem man sich nur rumschlägt, wenn man eigene Server betreut. GPFS ist dabei ein bestimmtes Dateisystem, welches es erlaubt, Festplattenplatz über mehrere Server zu verteilen.

Im Normalfall solltest du als Nutzer eines großen Providers dir da eigentlich keine Gedanken machen müssen.

VG - Andreas