Eine vielbesuchte Videoseite konnte die Datenbankabfragen für ihren Trending-Page-Feed von 4.000 pro Minute auf unter 50 senken und die Antwortzeit im 95. Perzentil von 380 ms auf 40 ms reduzieren, indem sie von der Vollseiten-Caching-Strategie auf Fragment-Caching mit Varnish und Edge Side Includes (ESI) umstellte.
Warum die Seite eine andere Cache-Strategie benötigte
Die Startseite, die die meistgesehenen Clips des Tages anzeigt, sieht für fast jeden Besucher in einer Region gleich aus: Etwa 95 Prozent des HTML-Codes sind für eine Million Nutzer identisch, während die verbleibenden 5 Prozent personenbezogene Daten wie den Namen des angemeldeten Nutzers oder ein Suchfeld enthalten. Das Engineering-Team stand vor zwei unvorteilhaften Optionen:
- Die gesamte Seite zu cachen und zu riskieren, angemeldeten Nutzern veraltete persönliche Daten zu liefern.
- Den Cache komplett zu umgehen und jeden Request die Datenbank belasten zu lassen.
Beide Ansätze beeinträchtigten das Nutzererlebnis. Das Team entschied sich für ESI – eine Technik, die es einem Reverse-Proxy ermöglicht, eine Seite aus unabhängig gecachten Fragmenten am Edge des Netzwerks zusammenzusetzen.
Wie das Fragment-Caching implementiert wurde
Varnish, der Open-Source-HTTP-Beschleuniger, behandelte die Seite als Skelett mit drei austauschbaren Teilen:
- Video-Grid – die rechenintensive, regionalspezifische Liste der Trending-Videos. Diese wird für 60 Sekunden gecacht, da sie sich häufig ändert, aber für jeden anonymen Besucher identisch ist.
- Sprachumschalter – ein statisches UI-Element, das sich selten ändert. Cache-Dauer: 24 Stunden.
- Header – das einzige wirklich persönliche Fragment (Nutzername, Avatar, Benachrichtigungen). Dieses wird nie gecacht; Varnish leitet die Anfrage jedes Mal an den Applikationsserver weiter.
Wenn eine Anfrage eingeht, liefert Varnish das gecachte Skelett aus, ruft die zwei gecachten Fragmente aus seinem lokalen Speicher ab und fügt den Live-Header aus dem Backend ein.
Die entscheidenden Zahlen
Nach der Umstellung:
- Die Datenbanklast für die Trending-Seite sank von 4.000 Abfragen pro Minute auf unter 50.
- Die Latenz im 95. Perzentil sank von 380 ms auf 40 ms.
Drei praktische Lehren aus dem Rollout
1. Grace Periods glätten Cache-Misses Wenn die TTL eines Fragments abläuft, würde Varnish normalerweise pausieren, um frische Inhalte abzurufen, was einen Latenz-Peak verursacht, der in einen „Thundering Herd“-Effekt (eine Flut simultaner Backend-Aufrufe) münden kann. Durch die Konfiguration einer Grace Period liefert Varnish das veraltete Fragment weiterhin aus, während es im Hintergrund stillschweigend den Cache aktualisiert. Die Nutzer bemerken keine Verzögerung; das Backend sieht eine gleichmäßige, handhabbare Anfragerate.
2. Cookies für anonyme Fragmente entfernen An jeder Anfrage angehängte Cookies führen dazu, dass Varnish jede Anfrage als einzigartig behandelt, was Cache-Hits zunichtemacht. Das Team entfernte die Cookies für das Video-Grid und den Sprachumschalter, wodurch diese Fragmente aggressiv gecacht werden konnten. Nur das Header-Fragment enthält Cookies, wodurch die Personalisierung erhalten bleibt, ohne die Cache-Effizienz zu opfern.
3. Surrogate Keys ermöglichen sofortiges Purging Manchmal muss ein Video sofort entfernt werden – z. B. aus Urheberrechtsgründen. Das Warten auf das Ablaufen der 60-sekündigen TTL ist inakzeptabel. Indem jedes gecachte Fragment mit einem Surrogate Key versehen wird, der die zugrunde liegenden Video-IDs widerspiegelt, kann das Team einen einzigen Purge-Befehl ausgeben, der sofort alle Kopien eines bestimmten Videos an jedem Edge-Knoten ungültig macht. Dies vermeidet einen vollständigen Cache-Sweep und stellt die Compliance der Website sicher.
Fazit: Fragment-Caching mit Varnish und ESI verwandelt eine monolithische, datenbankgebundene Seite in eine Reihe leichtgewichtiger, wiederverwendbarer Teile, wodurch die Backend-Last und die Latenz drastisch gesenkt werden, während die nutzerspezifische Personalisierung erhalten bleibt.
