Site Performance - Grundbedarf und Caching
am 29.11.2012 - 17:30 Uhr in
Hallo zusammen,
dieses Thema dient für mich der reinen Informationen, und ich hoffe hier ein wenig von der Expertise des ein oder anderen partizipieren zu können.
Folgendes Szenario: Ich setze aktuell ein ziemlich großes Projekt um, bei dem ich aktuell 110 Module, bzw. Modulteile in Betrieb habe. Effektiv sind es ca. 60-70 Module, wobei ich sie mal zählen muss. Es gibt momentan 25 custom Views, wobei es wohl am Ende 40-50 werden, da mitunter auch Homebox im Einsatz ist, und dafür händisch einzelne Blöcke erstellt werden müssen. Ansonsten sind eigentlich alle gängigen Module im Einsatz, vom Forum, übers Advanced Forum, bis hin zu Reference, Rules, User Relations, usw., usw.
Nun zum eigentlichen Thema - Bei einer solch massiven Seite mache ich mir doch ein wenig Sorgen über die letztendliche Performance. Ich rechne aktuell damit das +-150 authentifizierte Nutzer gleichzeitig online sein werden, plus noch mal 200-300 Gäste, wobei das mit der Zeit steigen wird. Aktuell läuft das Ganze auf einem Server mit Xeon E3-1275 Quad-Core, 64GB Ram, und zwei SSDs plus 6 TB HD. Es ist grundsätzlich kein Problem das ganze auszubauen, da unser Server-Heini selbst auch der Hoster ist. Nun muss man es aber auch nicht herausfordern, weswegen ich gerne an der Performance schrauben würde.
So, finally, ich habe mich schon sehr viel mit dem Caching beschäftigt, aber ich komme eben auch nicht aus der Materie, und mir stellen sich immer noch viele Fragen. Aktuell habe ich Performance Logging and Monitoring laufen, und komme dabei im Schnitt auf den Bedarf von knapp 100 MB, wobei es natürlich je nach Seite schwankt. Was ich mich hier schon frage ist, ist dass der tatsächliche Bedarf pro Nutzer, oder ist da auch ein gewisser Grundbedarf drin, so, dass nicht jeder Nutzer so viel Speicher braucht?
Im Moment stelle ich das Caching per se etwas in Frage, was daher kommt, dass wir im Grunde ständig dynamischen Content haben werden, was im Grunde bei vielen Dingen das Caching nicht gerade fördert. Die Seite selbst setzt primär auf CSS und hat wirklich wenige Grafikdateien, mal von tatsächlichem Content abgesehen.
Was mich nun interessiert ist, wo lohnt sich Caching effektiv, was für Methoden empfehlen sich, und wo kann man an der Performance drehen? Z.b. würde sich denke ich das Views-eigene Caching kaum lohnen, da alle Views eher mit wechselndem und schnell wachsendem Content zu tun haben. Caching für Gäste empfiehlt sich sicherlich, wobei auch da die Frage ist wie sich das auf dynamische Inhalte für z.B. die Startseite auswirkt. Da ist dann auch wieder die Frage ist es schon effektiv, wenn man Seiten oder Blöcke nur 10, oder 15 Minuten cached?
Ich würde mich hier wirklich für ein paar hilfreiche Tipps freuen. Gerne eigne ich mir Wissen auch selbst an, daher darf gern auf externe Seite, oder auch Fachliteratur verwiesen werden.
Ich bedanke mich anbei schon einmal im Voraus, und wünsche einen schönen Abend!
Edit: Ich habe mal noch nen Screen vom Log angehangen.
Anhang | Größe |
---|---|
logg.png | 333.48 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich quatsche hier einfach mal
am 30.11.2012 - 11:51 Uhr
Ich quatsche hier einfach mal ein wenig mit mir selbst. Eventuell kann der ein oder andere etwas damit anfangen, und ich teile mein - lückenhaftes - Wissen sehr gern.
Wie ich bereits oben geschrieben habe, setze ich bei dem genannten Projekt mitunter auf recht viele Views. Views neigt insgesamt dazu, was in der Natur der Sache liegt, sehr viele Querys, bzw. Datenbankabfragen zu generieren. Ist nur logisch, denn dazu ist es ja im Grunde da. Das hat zur Folge, dass sowohl Datenbank, Speicher, aber eben auch die Prozessorlast des Servers beeinträchtigt werden. Bei kleinen Seiten ist das erst mal nicht allzu schlimm und wichtig, wenn die Seite aber stark frequentiert wird, vor allem von authentifizierten Nutzern, dann hat das je nach Views einen großen Einfluss.
Wie ich oben schrieb sind die meisten eingesetzten Views stark dynamischen Verhältnissen unterworfen. Das bedeutet, es kommt stetig neuer Content/Inhalt hinzu, weswegen es nicht möglich ist, die einzelnen Views längerfristig zu cachen. Nachdem ich mich gestern noch mal mit der Performance von Drupal auseinander gesetzt habe, bin ich aber zur Erkenntnis gelangt, dass selbst ein wenig Caching hilft. Die Rechnung ist im Grunde ganz einfach aufgemacht. Nehmen wir an, wir haben 150 angemeldete Nutzer auf der Seite. Wenn wir nun ein Views/Block nicht cachen, dann wird für jeden dieser 150 Nutzer die Abfrage hinter dem Views neu gestellt, im Zweifel sogar mehrfach, je nach Surfverhalten. Wenn ich nun aber her gehe, und den Views für 5 Minuten cache, dann findet die Abfrage des Views alle 5 Minuten einmal statt, um eben einen neuen Status bereit zu stellen, anstelle von +150 Male ohne Caching. Im Zweifel dauert es dann eben 5 Minuten, bis neuer Content im Views auftaucht, aber das ist insgesamt zu verschmerzen,
Nach ein wenig herum testen, konnte ich so bereits den Speicherbedarf der Startseite unseres Projektes, auf der sich 16 Views finden, von teils 130MB im Peak auf +-80MB drücken, und die Querys sind merklich gesunken, was sich vor allem in der Darstellungsgeschwindigkeit widerspiegelt. Der Seitenaufbau erfolgt deutlich schneller.
Das sind aktuell nur erste Maßnahmen. Da sind noch keine CSS und JS-Dateien aggregiert, und auch sonst ist kein weiteres Caching aktiv. Aktuell beschäftige ich mich zaghaft mit ACP und Varnisch. ACP hatten wir schon vorher im Einsatz. an dieser Stelle arbeite ich aber mit unserem Server-Heini zusammen. Interessant finde ich zudem in diesem Zusammenhang das Modul Cache Actions.
Um die Performance insgesamt zusätzlich zu verbessern, habe ich mich von Modulen getrennt, die wenig Effekt haben, und auf die ich verzichten kann. So konnte ich aktuell knappe 20 aktive Module, oder Modulteile, einsparen. Deaktiviert habe ich auch Database Logging, und z.B. Statistics, was, so habe ich gelesen, irgendwann zum Flaschenhals werden kann.
Insgesamt haben diese minimalen Änderungen schon einen merklichen Schub gebracht, und die eigentlichen Performance-Module kommen ja erst noch.
Ich werde einfach weiter über meine Erfahrungen berichten. Eventuell interessiert es ja jemanden. :) Leider konnte ich was Fachliteratur angeht, keine Bücher finden, welche sich explizit dem Thema Performance widmen. Das gab es wohl für Drupal 6, aber nicht für 7. Falls da jemandem etwas bekannt ist, würde ich mich sehr über Hinweise freuen.