Caching mit Magnolia

Caching ist für Web Auftritte ein enorm wichtiges Mittel um eine möglichst gute Performance zu erreichen. Magnolia bietet äusserst vielseitige Caching Möglichkeiten die wir in diesem Beitrag gerne erläutern möchten.

Client Side Caching

Client Side Caching bezeichnet Mechanismen die einen Web Browser (oder anderen Client) dazu bringt, eine Ressource nicht vom eigentlichen Server anzufordern – sondern aus einem lokalen Cache auszuliefern. Dadurch entfallen Server Roundtrips und der Datentraffic wird reduziert. Das Laden der Ressourcen wird beschleunigt und die Last auf dem Webserver kann reduziert werden.

Webpages (HTML Dokumente) werden in der Regel vom clientseitigen Caching ausgenommen – der Fokus liegt auf Ressourcen die sich nicht oft ändern, wie z.B. Bilder oder JS/CSS Dateien. So kann sichergestellt werden, dass allfällige Anpassungen am Inhalt einer Seite sofort sichtbar sind. Durch das Hinzufügen von Timestamps in den URL von clientseitig gecachten Elementen (z.B. CSS Resourcen, bei der Einbindung in das nicht gecachte HTML) kann zudem erreicht werden, dass auch normalerweise gecachte Resourcen schnell aktualisiert werden können bei Bedarf.

Client Side Caching Beispiel

Client Side Caching arbeitet mit Caching Parameter in den HTTP Request und Response Headers.

  1. Request: Resource wird vom Client angefragt
  2. Response: Resource wird ausgeliefert und dem Client wird signalisiert dass die Resource gecached werden kann
    Cache-Control max-age=31536000, public
  3. Request: erneutes Anfordern der gleichen Resource
    If-Modified-Since Mon, 03 Jun 2013 14:50:50 GMT
  4. Response: Resource hat sich seither nicht verändert
    304 Not Modified
  5. Resource wird vom lokalen Cache geladen.

Das erneute Laden im Beispiel wurde mit einem Browser-Reload initiiert. Wird kein Reload der selben Seite angefordert, sondern diese lediglich z.B. erneut über die Navigation aufgerufen, entfällt der Request an den Webserver (und die 304 Not Modified Response); die Resource wird direkt vom lokalen Cache ausgeliefert.

Konfiguration in Magnolia

Die Browser Cache Policy Konfiguration findet sich in der Magnolia Konfiguration unter /modules/cache/config/configurations/default/browserCachePolicy und bietet die Möglichkeit, die Expires-Header (Anzahl Minuten, die eine Resource gecached werden soll) je nach Ressourcen-Typ, Pfad etc. unterschiedlich zu konfigurieren.

Die folgende Konfiguration entspricht den Standard-Einstellungen:

  • farFuture (1 Jahr): Resourcen mit vorangestelltem .cache.
  • resources (1 Stunde): Resourcen im Folder /.resources/ oder Resourcen mit Content-Type application/x-javascript oder text/css
  • dontCachePages (kein Caching!): Resourcen mit Content-Type text/html
  • stkThemeImages (1 Stunde): Resourcen im Folder /resources/templating-kit/themes/
  • default (10 Minuten): alle anderen Inhalte

Wie man es von Magnolia her gewohnt ist, kann man alle Konfigurationen manipulieren und/oder mit eigenen Konfigurationen ergänzen.

 

 

Server Side Caching

Erreicht ein Request die Filter Chain von Magnolia (es findet kein clientseitiges Caching statt), kommt das Server Side Caching zum Zug. Server Side Caching hält bereits einmal generierte Ausgaben in einem Cache vor und liefert bei einer erneuten Anfrage an die gleiche Resource die im Cache vorhandene aus, anstelle diese neu zu generieren. Dadurch kann die Last auf einem Webserver z.T. massiv reduziert werden.

Magnolia setzt für das Server Side Caching Blocking Caches von http://ehcache.org/ ein. In der Standard-Konfiguration wird der Cache im Arbeitsspeicher des Servers vorgehalten. Alternativ und/oder ergänzend kann eine Auslagerung auf die Festplatte konfiguriert werden (wobei aber sichergestellt sein muss, dass es sich um einen lokalen und schnellen Datenträger handelt (z.B. SSD)).

Konfiguration in Magnolia

Die Server Side Cache Policy Konfiguration findet sich in der Magnolia Konfiguration unter /modules/cache/config/configurations/default/cachePolicy. Grundsätzlich wird alles gecached, es sei denn einen der folgenden Ausnahmen trifft zu.

  • Es handelt sich um eine Magnolia Page (alles unter /.magnolia, z.B. AdminCentral)
  • Der Request enthält URL Parameter (z.B. eine Suchanfrage)
  • Man befindet sich auf einer Autoren-Instanz
  • Man ist in die AdminCentral eingeloggt
  • Befindet man sich nicht auf einer Entwicklungs-Instanz, werden auch Resourcen unterhalb /.resources, /.magnolia/pages/javascript.js und /.magnolia/pages/messages gecached.

Standard-Konfiguration

Allen in Magnolia verwendeten Caches liegt eine gemeinsame Konfiguration zugrunde, welche aber entweder global verändert oder pro Cache überschrieben werden kann.

Custom Caches

Reichen die Standard-Caches in Magnolia nicht aus, kann man problemlos weitere, eigene Caches in Magnolia konfigurieren und verwenden. Sei dies etwa weil zur Aufbereitung von dynamischen Listen nicht-seitenbasierte Inhalte zusammengezogen werden müssen oder aufwändige Content-Elemente auf mehreren Seiten wiederverwendet werden müssen – die Anwendungsbereiche sind vielfältig.

Ein eigener Cache steht im Prinzip per sofort zur Verfügung sobald dieser in der Konfiguration hinzugefügt worden ist. Anhand eines Keys können beliebige Elemente in den Cache geschrieben und ausgelesen werden.

Cache Flushing Strategien

Wichtig bei einem Cache ist, dass dieser wieder geleert werden kann und sichergestellt ist, dass keine veralteten Daten ausgeliefert werden. Ohne Cache Flushing Strategien würde der Cache erst bei einem Server-Neustart geleert.

Das Standard Flushing Verhalten ist es, nach einer Änderung in einem oder mehreren bestimmten JCR-Workspaces alle Einträge aus dem Cache zu löschen. Dieses Verhalten mag vielen Situationen genügen, kann aber bei Web Auftritten mit vielen Mutationen zu häufigen Flushes führen so dass letztlich die Cache-Quote sehr tief liegt. Für solche Fälle können aber eigene Flushing Policies entwickelt werden, die aufgrund einer Änderung in einem bestimmten Workspace gezielt Einträge aus dem Cache löschen können – anstelle der Löschung des gesamten Caches.

Advanced Caching

Reichen die umfrangreichen Möglichkeiten des Caching Moduls nicht aus, kann auf das ebenfalls standardmässig vorhandene Advanced Caching Modul zurückgegriffen werden. Dieses Modul stellt primär weitere ausgefeilte Mechanismen zur Verfügung die auf High Traffic Anwendungen abzielen. So sind z.B. folgende Strategien verfügbar:

  • Während dem Re-Caching eines Inhalts wird solange die bereits im Cache gehaltene (ältere) Version ausgeliefert, bis das Re-caching abgeschlossen worden ist.
  • Automatisches Führen einer Liste der meist verwendeten Elemente und automatisches Re-Caching dieser bei Content Änderungen.

Fazit

Magnolia bringt sowohl für Client- wie auch Serverseitiges Caching mächtige Bordmittel mit. Bereits mit Standard-Einstellungen wird gut und effizient gecached. Genügt das Standard Caching nicht den Ansprüchen, so kann das Caching bis ins Detail den eigenen Bedürfnissen angepasst und mit weiteren Caches und Flushing Policies fit gemacht werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>