Was ist ein Cache?

Unter einem Cache versteht man einen digitalen Zwischenspeicher, der einmal abgefragte Daten für einen späteren wiederholten Zugriff aufbewahrt. Die nachfolgenden Anfragen können dann direkt aus dem Cache beantwortet werden, ohne dass die eigentliche Anwendung hierfür kontaktiert werden muss. Ein typisches Einsatzszenario sind Webbrowser: Sie verfügen über einen eigenen Cache, der bestimmte Inhalte einer Website zwischenspeichern kann. Wird diese Seite zu einem späteren Zeitpunkt erneut besucht, kann sie schneller geladen werden, da die aufbewahrten Daten direkt aus dem Cache und nicht mehr vom Server abgerufen werden.

Definition: Cache

Ein Cache (ausgesprochen „cash“, wie engl. für „Bargeld“) ist ein Zwischenspeicher, der Daten für wiederholte Zugriffe bereithält. Er verringert die Zeit für den wiederholten Zugriff auf dieselben Daten. Caches befinden sich als transparente Schicht zwischen dem Nutzer und der eigentlichen Quelle der Daten. Der Prozess, Daten im Cache zu speichern, wird als „Caching“ bezeichnet.

Um das Prinzip eines Cache zu verdeutlichen, nehmen wir das folgende analoge Beispiel aus der Medizin:

Stellen Sie sich eine zahnärztliche Behandlung oder einen chirurgischen Eingriff vor. Der Arzt bittet die Arzthelferin um eine Ressource, etwa ein Skalpell, ein Desinfektionsmittel oder Verbandsmaterial. Wurde die Ressource bereits bereitgelegt, kann die Arzthelferin sofort auf die Bitte reagieren und sie dem Arzt reichen. Andernfalls lokalisiert die Arzthelferin die Ressource im Medizinschrank und reicht diese an den Arzt weiter. Nach Benutzung durch den Arzt wird die Ressource von der Arzthelferin für weitere, schnelle Zugriffe bereitgelegt.

Die einzelnen Ressourcen sind in der Nutzung nicht komplett unabhängig voneinander: Verlangt der Arzt nach einem Desinfektionsmittel, dann wird er sicherlich auch einen Tupfer benötigen, die Nadel ist ohne Faden nicht zu gebrauchen. Die Arzthelferin wird die zusammen benötigten Ressourcen gemeinsam bereithalten, um die Zugriffszeit während der Nutzung zu minimieren.

Sie sehen: Das Bereithalten von Ressourcen, die häufig benötigt oder zusammen verwendet werden, ist ein sehr nützlicher und ganz alltäglicher Vorgang. In der digitalen Welt werden diese verwandten Prozesse allesamt unter dem Begriff „Caching“ zusammengefasst.

Was ist der Zweck eines Cache?

Der primäre Zweck eines Cache ist es, die Zugriffszeit auf wichtige Daten zu reduzieren. Als „wichtige“ Daten gelten:

  1. Daten, die häufig benötigt werden: In diesem Fall wäre es verschwenderisch, die Daten immer wieder aus dem hinter dem Cache liegenden, langsameren Speicher zu laden. Stattdessen werden diese mit kürzerer Zugriffszeit aus dem Cache ausgeliefert.
     
  2. Daten, deren Erzeugung ein aufwendiger Prozess zugrunde liegt: Manche Daten sind das Ergebnis einer rechenintensiven Verarbeitung, oder die Daten müssen aus verschiedenen Teilen zusammengefügt werden. In diesen Fällen bietet es sich an, die fertigen Daten für weitere Abfragen in einem Cache zu speichern.
     
  3. Daten, die zusammen benötigt werden: In diesem Fall wäre es ineffizient, die Daten erst dann zu laden, wenn Sie abgerufen werden. Stattdessen ist es sinnvoll, die Daten gemeinsam im Cache vorzuhalten.

Wie funktioniert ein Cache?

Nun gehen wir genauer auf die Funktionsweise eines Cache ein. Dabei klären wir u. a. die Fragen, wie ein solcher Zwischenspeicher grundsätzlich arbeitet und wo genau er sich befindet.

Grundlegendes Cache-Schema

  1. Eine Anfrage nach einer Ressource wird an das System bzw. die Software, die über einen Cache verfügt, gestellt.
     
  2. Ist die Ressource bereits im Cache enthalten, wird sie aus dem Cache ausgeliefert. Dieser Fall wird als „Cache Hit“, also „Cache-Treffer“, bezeichnet.
     
  3. Ist die Ressource nicht im Cache enthalten, wird sie zunächst aus dem dahinterliegenden System in den Zwischenspeicher geladen und anschließend ausgeliefert. Dieser Fall wird als „Cache Miss“, in etwa „Cache-Fehlschuss“, bezeichnet.
     
  4. Wird dieselbe Ressource in der Zukunft erneut abgefragt, kann sie ebenfalls als Cache Hit aus dem Cache ausgeliefert werden.

Die Abbildung verdeutlicht das grundlegende Schema: Ein Client stellt eine Anfrage nach einer Ressource an den Server (1). Im Fall des „Cache Hit“ ist die Ressource bereits im Cache enthalten und wird sogleich an den Client ausgeliefert (2). Im Fall des „Cache Miss“ ist die abgefragte Ressource nicht im Cache enthalten und wird daher aus dem hinter dem Server liegenden System (hier eine Datenbank) abgefragt (2). Sobald die Ressource vorhanden ist (3), wird sie an den Client ausgeliefert (4) und für die weitere Nutzung im Cache gespeichert.

Wo befindet sich ein Cache?

Eine Grundeigenschaft eines Cache ist, dass er „im Verborgenen“ arbeitet. Dieser Umstand spiegelt sich schon im Ursprung des Wortes wider: Das Wort „Cache“ stammt aus dem Französischen und bedeutet „Versteck“.

Der Cache liegt für Nutzer unsichtbar vor dem eigentlichen Datenspeicher. Das bedeutet, dass Sie als Nutzer nichts über die internen Eigenschaften des Cache wissen müssen. Sie stellen Anfragen an den Datenspeicher, ohne zu bemerken, dass diese eigentlich vom Cache beantwortet werden.

Wie viele Caches gibt es typischerweise?

Für gewöhnlich sind innerhalb eines digitalen Systems immer eine Reihe an Caches aktiv.

Stellen Sie sich den Zugriff auf eine Webseite vor: Ihr Browser kommuniziert mit einem Server und ruft eine Reihe von Ressourcen ab. Bis Ihnen die Inhalte der Seite im Browser angezeigt werden, laufen Teile davon vermutlich durch folgende Caches: Prozessor-Cache, System-Cache und Browser-Cache auf Ihrem Gerät sowie CDN (Content Delivery Network) und Web-Cache auf Serverseite.

Vor- und Nachteile eines Cache

Ob eine Anwendung mit einem Cache ausgestattet wird, liegt prinzipiell im Ermessen des Entwicklers. Wir haben die Vor- und Nachteile der Zwischenspeicher-Lösung zusammengefasst.

Vorteil: Enormer Zuwachs an Geschwindigkeit

Die Verwendung eines Cache bietet als potenziellen Vorteil einen enormen Zuwachs an Geschwindigkeit. Eine Beschleunigung um einen Faktor von einhundert ist nicht ungewöhnlich. Die Beschleunigung ergibt sich jedoch nur beim wiederholten Zugriff auf dieselben Daten. Wie groß der Zugewinn tatsächlich ausfällt, wird also je nach Anwendungsfall stark variieren.

Vorteil: Lastreduzierung für das hinter dem Cache liegende System

Da ein Cache Daten sehr schnell ausliefert, wird die Last auf das hinter ihm liegende System deutlich reduziert.

Stellen Sie sich als Beispiel vor, dass eine dynamische HTML-Seite aus einem PHP-Template erzeugt wird: Zur Erzeugung der Seite wird auf eine Datenbank zugegriffen. Dieser Zugriff ist vergleichsweise aufwendig. Ferner ist es nicht trivial, Datenbankserver zu skalieren, weshalb der Datenbankzugriff als „bottleneck“ (zu Deutsch: „Flaschenhals“) den Gesamtdurchsatz des Systems begrenzen kann. In diesem Fall ist es vorteilhaft, die generierte HTML-Seite in einem Web-Cache zwischenzuspeichern, um die Kapazität des Datenbankservers für andere Aufgaben zu nutzen.

Nachteil: Cache-Invalidierung ist schwierig

Der Begriff Cache-Invalidierung bezeichnet die Entscheidung darüber, wann zwischengespeicherte Daten nicht mehr aktuell sind und erneuert werden müssen. Erinnern Sie sich an das analoge Beispiel von oben: Die Arzthelferin agiert als Cache für den Arzt, indem sie bereits benutzte Ressourcen für den weiteren Gebrauch bereit legt. Da auf der Ablage nur ein begrenzter Platz bereitsteht, räumt die Arzthelferin während der Behandlung kontinuierlich auf. Bereits benutzte Ressourcen müssen entfernt, neue hinzugefügt werden. Unter Umständen entfernt die Arzthelferin auch eine Ressource, die der Arzt noch einmal benötigt. In diesem Fall kommt es konzeptuell zu einem Cache Miss. Die Arzthelferin muss die benötigte Ressource dann erst aufwendig lokalisieren.

Da der Cache Miss kostspielig ist, zielt die optimale Caching-Strategie darauf ab, diesen möglichst zu vermeiden. Andererseits kann das dazu führen, dass der Cache Daten ausliefert, die nicht mehr aktuell sind. Dieses Problem wird noch verschärft, wenn mehrere, hierarchisch angrenzende Caches aktiv sind. Es kann dann schwierig sein zu bestimmen, wann welche Daten im Cache als nicht mehr aktuell markiert werden sollen.

Liefert ein Cache Daten aus, die nicht mehr aktuell sind, führt dies oft auf der Seite des Anwenders zu seltsamen Problemen: Die besuchte Website hat Darstellungsfehler oder es erscheinen beim Datenabruf Fragmente aus der Vergangenheit. Mitunter kann es schwierig sein, die genaue Herkunft der Probleme zu ermitteln, weshalb in diesem Fall das Leeren des Cache die beste Lösung darstellt.

Zitat

„There are only two hard things in Computer Science: cache invalidation and naming things.“

„In der Informatik gibt es nur zwei schwierige Probleme: Cache-Invalidierung und Namen vergeben.“

Phil Karlton, https://www.martinfowler.com/bliki/TwoHardThings.html

Welche Arten von Caches gibt es?

Caches bestehen aus Hardware- oder Software-Komponenten. Ein Hardware-Cache ist ein schneller Pufferspeicher, der die Zugriffszeiten auf den dahinterliegenden Datenspeicher verringert. Prinzipiell sind Hardware-Caches immer sehr klein im Vergleich zur Gesamtgröße des beschleunigten Datenspeichers.

Dagegen können in Software implementierte Caches die Größe der hinter ihnen liegenden Ressource sogar übertreffen. Dies ist insbesondere dann der Fall, wenn sich mehrere Versionen einer Ressource im Cache befinden.

Hier eine Übersicht gängiger mit Caches versehener Ressourcen. Dargestellt sind die Größe des Cache, die Zugriffszeit auf den Cache sowie eine Angabe, wie viel langsamer der Zugriff auf die Ressource ohne Zwischenspeicher wäre.

Ressource Cache Größe des Cache Zugriffszeit mit Cache × langsamer ohne Cache
Hauptspeicher Level 1-Cache (Hardware) Dutzende Kilobyte (KB) Weniger als eine Nanosekunde (ns) 200 ×
Festplatte Festplatten-Cache (Hardware) Dutzende Megabyte (MB) Hunderte Nanosekunden (ns) 100 ×
Browser Browser-Cache (Software) Mehrere Gigabyte (GB) Dutzende Millisekunden (ms) 10–100 ×
Websites CDNs, Google Page Cache, Wayback Machine (Software) Tausende Terabyte (Petabyte, PB) Wenige Sekunden (s) 2–5 ×

Hardware-Caches

Prozessor-Cache

Ein moderner Prozessor arbeitet unglaublich schnell. Die Abläufe auf dem Chip benötigen nur Bruchteile von Nanosekunden — das ist eine Milliardstel Sekunde! Im Gegensatz dazu ist der Zugriff auf den Hauptspeicher mit Hunderten von Nanosekunden vergleichsweise langsam. Aus diesem Grund verfügen moderne Prozessoren über eine Hierarchie von Prozessor-Caches.

Ein Cache Hit auf dem schnellsten Prozessor-Cache, bekannt als „Level 1-Cache“ oder „L1-Cache“, ist rund 200 Mal schneller als ein Zugriff auf den Hauptspeicher.

Festplatten-Cache

Eine Festplatte rotiert mit mehreren Tausend Umdrehungen pro Minute. Der Schreib-Lese-Kopf rast über die Scheiben und liest dabei sequenziell Daten aus. Da es sich um einen physischen Prozess handelt, ist der Zugriff auf eine Festplatte vergleichsweise langsam.

Aus diesem Grund verfügt jede Festplatte über einen eigenen kleinen Cache. So müssen zumindest die am häufigsten genutzten Daten – etwa Teile des Betriebssystems – nicht immer wieder aufwendig von der Festplatte gelesen werden.

Durch den Festplatten-Cache können essenzielle Daten ca. 100 Mal schneller geladen werden. Sie sind dadurch für den Nutzer gefühlt „sofort“ vorhanden.

Software-Caches

Browser-Cache

Beim Besuch einer Website werden viele Daten der Seite auf dem Gerät des Besuchers zwischengespeichert. Neben den eigentlichen Inhalten gehören dazu verschiedene Ressourcen wie Bilder, Stylesheets und JavaScript-Dateien. Für gewöhnlich werden viele dieser Ressourcen auf mehreren Seiten benötigt. Um das Laden der Seiten zu beschleunigen, ist es vorteilhaft, diese immer wieder benötigten Ressourcen im Browser-Cache des lokalen Geräts zu speichern.

So praktisch der Browser-Cache für das Surfen im Netz ist: Er kann auch Probleme verursachen – etwa dann, wenn die Entwickler Änderungen an einer Ressource der Website vorgenommen haben, im Browser-Cache aber noch die alte Version der Ressource vorhanden ist. In diesem Fall kann es zu Darstellungsfehlern kommen. Abhilfe schafft dann das Leeren des Browser-Cache.

Google Page-Cache

Googles „Im Cache“-Funktion hält die Seiten vieler Websites vorrätig. So kann auf die Seiten auch noch zugegriffen werden, wenn die ursprüngliche Website offline ist. Der Zustand der Seiten entspricht dem Datum der letzten Indizierung durch den Googlebot.

DNS-Cache

Das Domain Name System, kurz DNS, ist ein global verteiltes System zur Übersetzung von Internetdomains in IP-Adressen (bzw. umgekehrt). Das DNS liefert für einen Domänennamen eine IP-Adresse zurück. Beispielsweise wird für die Domain ionos.de die IP-Adresse 217.160.86.40 zurückgeliefert.

Bereits beantwortete Anfragen an das DNS werden lokal auf dem eigenen Gerät im DNS-Cache zwischengespeichert. So ist jede Auflösung immer gleich schnell.

Doch auch die Nutzung des DNS-Cache kann zu Problemen führen – beispielsweise, wenn sich durch einen Serverumzug die zu einer Domain gehörige IP-Adresse geändert hat, die alte Adresse jedoch noch im lokalen DNS-Cache hinterlegt ist. In diesem Fall schlägt der Verbindungsaufbau mit dem Server fehl. Abhilfe schafft dann das Löschen des DNS-Cache.

Content Delivery Network (CDN)

Global verteilte Content Delivery Networks (dt. „Inhalte-Auslieferungs-Netzwerke“) halten einen Großteil der Daten beliebter Websites auf sogenannten Edge Nodes („randnahen Knoten“) vor. Diese Edge Nodes spiegeln die Daten am „Rand“ des Internets. Die Knoten sind lokal nahe am Benutzer angesiedelt und technisch darauf ausgelegt, Daten möglichst schnell auszuliefern. Ein CDN fungiert als Cache für die Daten der enthaltenen Websites. Dadurch werden die Zugriffszeiten insbesondere auf Streaming-Angebote und Websites minimiert.

Web-Cache

Ein Web-Cache hält Webdokumente wie HTML-Seiten, Bilder, Stylesheets, oder JavaScript-Dateien für die wiederholte Nutzung vor. Moderne Web-Caches wie Varnish und Redis legen häufig benutzte Daten im Arbeitsspeicher ab und erzielen damit besonders geringe Antwortzeiten.

Werden die Daten erneut abgefragt, erfordert die Antwort nur einen sehr schnellen Speicherzugriff. So werden die Antwortzeiten drastisch verringert und die Last für die hinter dem Cache liegenden Systeme, wie Webserver und Datenbank, reduziert. Weitere bekannte Web-Caches sind OPcache und der Alternative PHP Cache (APC).