ArtikelHintergrund

Verbreitete Irrtümer in puncto Caching und ihre Auswirkung auf die System-Performance

Autor/Redakteur: Behrad Babaee, Technology Evangelist bei Aerospike/gg

Performante Anwendungen sind unternehmenskritisch für die Betrugserkennung, beim Online-Shopping oder in der Produktion. Erfüllen Anwendungen diese Anforderungen nicht, liefert häufig die dahinter liegende Datenbank zu wenig Leistung. Doch das Einziehen eines Zwischenspeichers führt nicht immer zur gewünschten Verbesserung. Für eine bestmögliche Lösung gilt es daher, die Feinheiten des Cachings zu verstehen.

Behrad Babaee, Technology Evangelist bei Aerospike. (Quelle: Aerospike)

In der IT herrscht die weitverbreitete Ansicht, dass sich durch einen Zwischenspeicher die Last auf dem Datenbankserver verringern lässt und damit Abfragen beschleunigt und so auch die Benutzerfreundlichkeit verbessert werden. Kurz: dass die Anwendung deutlich performanter wird. Dass dem nicht zwingend so ist, liegt in der Natur des Cachings.

Irrtum 1: Ein Zwischenspeicher verbessert die Datenbank-Performance

Beim Caching wird eine Teilmenge von Daten temporär in einem schnelleren Speichermedium gespeichert, um rascher auf häufig verwendete Daten zugreifen zu können. Ein Cache eignet sich jedoch nicht zum Speichern des gesamten Datenbestands. Denn schnellerer Speicher ist in der Regel nur begrenzt verfügbar, teuer und – abhängig vom Medium – flüchtig.

Viele Datenbanken sind bereits mit einem internen Cache ausgestattet. Soll die Schnelligkeit von Datenbanken ohne integrierten Cache verbessert werden, wird im Software-Engineering gerne ein In-Memory-Speicher vorgeschaltet. Doch Vorsicht: Die Integration einer Caching-Schicht macht eine langsame Datenbank nicht zwingend performanter, wie die nächsten Irrtümer zeigen.

Irrtum 2: Schnelligkeit gleich Antwortzeit

Vereinfacht gesagt gilt ein Computersystem als schnell, wenn es Anfragen prompt beantwortet. Geschwindigkeit ist also untrennbar mit der Reaktionszeit verbunden. Doch die Antwortzeiten bei hoher Belastung können stark von denen bei minimaler Arbeitslast abweichen. Daher ist eine verlässliche Aussage zur Geschwindigkeit nur anhand des Latenz-Perzentils möglich. Dazu werden die Antwortzeiten eines Systems über einen definierten Zeitraum aufgezeichnet und anschließend in aufsteigender Reihenfolge vom langsamsten zum schnellsten Wert geordnet.

Der mittlere Wert ist das 50. Perzentil (P50) der Latenzzeit des Systems. Beträgt der P50-Wert T Sekunden, ist die Hälfte der Systemantworten langsamer als T Sekunden. Und der 9. Wert (P90) in einer Liste mit zehn Positionen gibt an, in welcher Zeit 90 Prozent der Anfragen abgeschlossen wurden. Genauso lassen sich andere Perzentile wie P99 oder P99,9 berechnen. Wichtig zu verstehen: Der Unterschied in der Reaktionszeit ist zwischen P10 und P90 deutlich geringer als zwischen P99 und P99,9. Diese Diskrepanz ist auf das unvorhersehbare Verhalten verteilter Systeme zurückzuführen; im Folgenden kurz beschrieben.

Irrtum 3: Zwischenspeicher gleich bessere Cache-Trefferrate

Die Cache-Trefferrate bezeichnet den Prozentsatz, zu dem ein System erfolgreich Daten aus dem Zwischenspeicher abruft. Doch nicht immer sind die gesuchten Daten im Zwischenspeicher vorhanden. Das gilt unabhängig davon, welche Cache-Methode oder welcher Algorithmus zum Auslagern verwendet wird. Die Praxis zeigt, dass ein Zwischenspeicher die Wahrscheinlichkeit seltener unerwünschter Ereignisse – und damit einer schlechteren Trefferquote – sogar noch erhöhen kann.

Was heißt das konkret? In einer komplexen Anwendung sind an der Bearbeitung einer High-Level-Abfrage mehrere Dienste und Komponenten beteiligt. Einige von ihnen müssen die Datenbank abfragen. Nehmen wir an, die Cache-Trefferrate ist P und es gibt n gleichzeitige Datenbankzugriffsabfragen. Dann ist die Wahrscheinlichkeit, dass alle Abfragen n direkt aus dem Zwischenspeicher bedient werden Pn.

Beträgt beispielsweise die Cache-Trefferwahrscheinlichkeit 50 Prozent und es gibt fünf parallele Abfragen (n=5), sind mit einer Wahrscheinlichkeit von 3,1 Prozent (0,55 = 0,031) alle diese Abfragen Cache-Treffer. Doch eine Abfrage wird erst dann vollständig verarbeitet, wenn die Abfragen all ihrer Komponenten beantwortet wurden. Das bedeutet, dass die Abfrage in 96,9 Prozent der Fälle nicht von der Existenz des Zwischenspeichers profitiert. Der Grund: Sie muss noch auf den Abschluss mindestens einer Abfrage warten, welche auf die langsame Datenbank zugreifen muss.

In der Praxis besteht das Ziel deshalb darin, die Antwortzeit des Dienstes bei Perzentilen wie P99 zu verbessern. Um die P99-Latenzzeit einer Aufgabe mit fünf Arbeitsschritten jedoch durch die Einführung eines Cache zu optimieren, müsste die Trefferquote satte 99,8 Prozent (0,9985 = 0,99) betragen.

Fazit

Es ist ein weit verbreitetes Missverständnis, dass die Platzierung eines Zwischenspeichers vor einer Datenbank – sei es intern, extern oder integriert – die Leistung der Anwendung maßgeblich verbessert. Unternehmen sind daher gut beraten, schon bei der Wahl einer Datenbank auf deren Performanz zu achten. Sie sollten eine Datenbank wählen, die aufgrund ihrer Technologie bereits ohne Cache besser abschneidet als Datenbanken mit integriertem Cache.