TYPO3 Varnish Extension

Wie aus einem Geistesblitz eine TYPO3 Extension für die Varnish Integration entstanden ist.

Im Jahr 2013 haben mein ehemaliger Arbeitgeber snowflake und Redpill Linpro, die damalige Firma hinter Varnish, eine Zusammenarbeit vereinbart. Bestandteil dieses Vertrages war, dass ich mit zwei Kollegen einen Varnish Kurs in Oslo besuchen durfte, um nachher als zertifizierter Varnish Trainer Kurse in Deutschland, Österreich und der Schweiz zu geben.

Nicht nur das Rahmenprogramm ist mir in guter Erinnerung geblieben, auch im Kurs konnten wir viel neues lernen, obwohl wir Varnish schon vorher aktiv im Einsatz hatten. Neben der erfolgreichen Zertifizierung aller Teilnehmer darf aber vor allem die Idee für die TYPO3 Varnish Extension als grosse Errungenschaft dieser 3 Tage bezeichnet werden.

TYPO3 und Varnish

Bis zu diesem Zeitpunkt existierte bereits eine TYPO3 Extension für Varnish. Der Ablauf dieser Extension sah vor, dass bei Änderungen an einer Seite im TYPO3-Backend sämtliche zu dieser Seite gehörenden URLs gesammelt, und dann einzeln zum Löschen an Varnish gesendet wurde. Dies war auf den meistens unserer Installationen nicht besonders praktikabel, so dass wir oft auf den Einsatz einer Extension verzichtet haben. Stattdessen haben wir die Cache Dauer in Varnish von Hand so kurz gesetzt, dass dies keinen grossen Komfortverlust verursachte, was jedoch wiederum andere Nachteile mit sich brachte.

Idee und Umsetzung

Zurück zum Kurs in Oslo. In einem Modul ging es darum, wie man mit zusätzlichen HTTP Headern aus der Applikation Daten an Varnish sendet, und diese dann dafür verwenden kann, um die Cache Invalidierung anhand dieser durchzuführen. Bereits während dem Lesen der Aufgabe war mir klar, dass dieses Konzept perfekt zum Aufbau des TYPO3 Caches anhand der Page ID passte.

Zurück in der Schweiz habe ich mich sofort an die Umsetzung gemacht. Kurze Zeit später war die erste Version im Extension Repository mit folgenden Funktionen verfügbar:

  • das TYPO3-Frontend sendet die aktuelle Page ID als HTTP Header an Varnish
  • das TYPO3-Backend, bzw. das Caching Framework, sendet die Page ID einer geänderten Seite an Varnish
  • die dazugehörige Varnish Konfigurationsvorlage sorgt dafür, dass
    • der Page ID Header in Varnish gespeichert, aber nicht an den Client versendet wird
    • im Falle einer gemeldeten Änderung alle Seiten mit der dazugehörigen Page ID verworfen werden

Diese erste Version der Extension, damals für TYPO3 4.5, habe ich am 14. August 2013 veröffentlicht. In der Zwischenzeit wurden in 14 Versionen diverse Funktionen hinzugefügt und Fehler geflickt. Ein besonderer Dank gilt dabei der TYPO3 Community, viele Änderungen wurden von Einzelpersonen oder Firmen beigesteuert und konnten von mir nach dem Testen direkt veröffentlicht werden.

Ausblick

Mittlerweile komme ich nur noch selten dazu, etwas mit PHP zu programmieren. Die stetige Anpassung der Extension an aktuelle TYPO3 Versionen ist deshalb immer wieder eine neue, aber weiterhin sehr interessante Herausforderung. Auch darf ich immer wieder auf grossartige Hilfe von Kollegen, Kunden oder Dritten aus der TYPO3 Community zählen (Danke Christoph, Benni, Daniel und viele weitere!), was das ganze enorm erleichtert.

Im Moment liegt der Fokus vor allem darauf, die laufenden Anpassungen am TYPO3 Core sinnvoll zu integrieren. So wurden in der letzten Version z.B. die verbleibenden TYPO3 Hooks durch PSR-14 Events ersetzt, und als nächstes werden Varnish Kommandos per PSR-7 abgesetzt werden. Eine weitere, grössere Änderung wird die Umstellung von der Page ID weg zu den neuen TYPO3 Cache Tags betreffen. Falls du dich für technische Details interessierst, findest du die aktuelle Planung im TYPO3 Varnish GitLab Projekt.

Bis heute wurde diese Extension rund 16’000-mal aus dem Extension Repository heruntergeladen und ist damit zum defacto Standard für die Einbindung von Varnish in TYPO3 geworden. Ich freue mich auf die zukünftige Entwicklung und bedanke mich herzlich bei allen Nutzern und Helfern, die dies ermöglichen.