Schneller ist besser

Durch den Trend zu stark individualiserten Webseiten (Stichwort: "Customer Experience Management") gewinnen dynamisch generierte Webseiten immer mehr an Bedeutung, weil sie durch den Kontext oder das Benutzerverhalten beeinflusste Inhalte ermöglichen. Dynamische Seiten liegen nicht statisch als HTML-Datei auf dem Server, sondern werden erst in dem Moment generiert, in dem ein Benutzer sie aufruft.

Je mehr Benutzer eine solche Seite anfordern, desto mehr Seiten muss der Server zur "gleichen" Zeit zusammenbauen. Dies erhöht natürlich die Last auf dem Server bzw. den Servern. Ab einem bestimmten Punkt hat dies wiederum zur Folge, dass der Benutzer merklich länger warten muss, bis seine Seite sich aufgebaut hat.

Man sieht also schnell ein, dass es Sinn macht, bestimmte Daten, die sich nicht so oft ändern, zwischen zu speichern. Wenn ein Benutzer sie dann anfordert, können sie aus dem Speicher, dem sog. Cache, gelesen werden, was natürlich schneller ist, als jedes Mal die Seite neu zu generieren.

Nach diesem Prinzip des Cachings werden die Informationen vorberechnet und verfallen im Allgemeinen nach einem bestimmten Zeitraum wieder. Auf diese Weise bleiben die Informationen trotzdem einigermaßen aktuell, obwohl sie nicht jedes Mal neu berechnet werden müssen.

Eventbasiertes Caching

Wesentlich eleganter ist allerdings das eventbasierte Caching. onion.net bietet die Möglichkeit, die Ereignisbehandlung zu beeinflussen, das heißt auf Ereignisse zu warten oder diese auszulösen.

Auf diese Art und Weise wird also die Seite nur dann neu berechnet, wenn sich in der Datenbank Informationen ändern, die diese Seite betreffen.

Man stelle sich vor, wir haben in unserem onion.net Produkte mit bestimmten Informationen liegen. Weiterhin gibt es Seiten, die diese Informationen auf unterschiedliche Art und Weise darstellen, z. B. eine Übersichtsseite, die zwar alle Artikel auflistet, jedoch nur den Namen und den Preis anzeigt, und eine Detailseite für jeden einzelnen Artikel, die natürlich viel mehr Informationen zu dem Artikel darstellt.

Ändert sich nun ein Artikeldetail, betrifft diese Änderung möglicherweise nur die Detailseite. Diese wird neu berechnet. Die Übersichtsseite, die diese Information nicht benötigt, ändert sich also auch nicht und kann im Cache verbleiben.

Intelligenter Cache

In der Praxis arbeiten Caches in der Regel graphenbasiert, das heißt sie erfassen auch bestehende Abhängigkeiten zwischen zwischengespeicherten Objekten oder Aggregationen.

Man kann sich zum Beispiel vorstellen, dass es eine "Top 10"-Liste gibt, die auf der Gesamtübersicht unserer Artikel basiert und hiervon die 10 beliebtesten anzeigt. Die dargestellten Informationen pro Artikel sind dieselben. Die Berechnungen dieser Liste werden also lediglich die zur Berechnung der Gesamtliste erweitern, oder diese nach bestimmten Kriterien sortieren etc.

Wenn sich nun der Preis eines Produktes ändert, welches nicht in den "Top 10" ist, wird bei normalem eventbasiertem Caching nicht nur die Gesamtliste neu berechnet, sondern auch die "Top 10"-Liste, da diese ja indirekt auch alle Produkte berücksichtigt (sie benutzt ja schließlich die Berechnung der Gesamtliste).

Ein intelligenter inkrementeller Cache, wie er in onion.net zur Verfügung gestellt wird, kann diese Abhängigkeit zwischen den beiden Methoden erkennen und verwalten. Die "Top 10" würde also nicht neu berechnet werden.

Eine solche Handhabung entlastet also den Server und bietet eine optimale Skalierung. Das onion.net System liefert alle Informationen deshalb aktuell und schnell aus.