paint-brush
So verbessern Sie die Benutzererfahrung und senken die Kosten: Darum sollten Sie Caching verwendenby@brilianfird
771
771

So verbessern Sie die Benutzererfahrung und senken die Kosten: Darum sollten Sie Caching verwenden

Brilian Firdaus8m2024/05/10
Read on Terminal Reader

Heute tauchen wir in die Welt des Caching ein. Caching ist eine Geheimwaffe für den Aufbau skalierbarer Hochleistungssysteme. Es gibt viele Arten von Caching, aber in diesem Artikel konzentrieren wir uns auf das Backend-Objekt-Caching (Backend-Caching). Wenn Sie es beherrschen, können Sie leistungsstarke und zuverlässige Software erstellen.
featured image - So verbessern Sie die Benutzererfahrung und senken die Kosten: Darum sollten Sie Caching verwenden
Brilian Firdaus HackerNoon profile picture
0-item

Heute tauchen wir in die Welt des Caching ein. Caching ist eine Geheimwaffe für den Aufbau skalierbarer Hochleistungssysteme. Es gibt viele Arten von Caching, aber in diesem Artikel konzentrieren wir uns auf das Backend-Objekt-Caching (Backend-Caching). Wenn Sie es beherrschen, können Sie leistungsstarke und zuverlässige Software erstellen.


In diesem Artikel untersuchen wir:

  1. Was ist Caching? Wir untersuchen Caching und erklären, wie es Daten vorübergehend speichert, um einen schnelleren Zugriff zu ermöglichen.


  2. Vorteile des Caching : Entdecken Sie, wie Caching die Geschwindigkeit erhöht, die Serverlast reduziert, das Benutzererlebnis verbessert und sogar Kosten senken kann.


  3. Caching-Muster : In diesem Abschnitt werden wir uns mit verschiedenen Möglichkeiten zur Verwendung des Caches befassen. Denken Sie daran, dass jeder Ansatz Vor- und Nachteile hat. Wählen Sie also unbedingt das richtige Muster für Ihre Anforderungen!


  4. Best Practice für das Caching : Jetzt wissen Sie, wie Sie zwischengespeicherte Daten speichern und abrufen. Aber wie stellen Sie sicher, dass Ihre zwischengespeicherten Daten aktuell bleiben? Und was passiert, wenn der Cache seine Kapazität erreicht?


  5. Wann Sie kein Cachen verwenden sollten : Obwohl das Caching viele Vorteile bietet, gibt es Situationen, in denen es besser vermieden werden sollte. Die Implementierung des Caching im falschen System kann die Komplexität erhöhen und möglicherweise sogar die Leistung beeinträchtigen.

Was ist Caching?

Bei der Erstellung einer leistungsstarken und skalierbaren Anwendung geht es vor allem darum, Engpässe zu beseitigen und das System effizienter zu machen. Datenbanken verursachen aufgrund ihrer Speicher- und Verarbeitungsanforderungen häufig Engpässe bei der Systemleistung. Dies macht sie zu einer kostspieligen Komponente, da sie häufig hochskaliert werden müssen.


Glücklicherweise gibt es eine Komponente, die dazu beitragen kann, die Nutzung von Datenbankressourcen zu verringern und gleichzeitig die Geschwindigkeit des Datenabrufs zu verbessern – diese Komponente heißt Cache .


Cache ist ein temporärer Speicher, der für schnelles Schreiben und Lesen von Daten konzipiert ist. Er verwendet Speicher mit geringer Latenz und optimierte Datenstrukturen für schnelle Vorgänge. Wahrscheinlich haben Sie Redis oder Memcached bereits verwendet oder zumindest ihre Namen gehört. Dies sind zwei der beliebtesten verteilten Caching-Systeme für Backend-Dienste. Redis kann sogar als primäre Datenbank fungieren, aber das ist ein Thema für einen anderen Artikel!

Vorteile des Caching

Der Hauptvorteil des Caching ist seine Geschwindigkeit. Das Lesen von Daten aus einem Cache ist deutlich schneller als das Abrufen aus einer Datenbank (wie SQL oder Mongo). Diese Geschwindigkeit wird dadurch erreicht, dass Caches Wörterbuch- (oder HashMap-)Datenstrukturen für schnelle Operationen verwenden und Daten im Hochgeschwindigkeitsspeicher statt auf der Festplatte speichern.


Zweitens verringert das Caching die Belastung Ihrer Datenbank. So können Anwendungen die benötigten Daten aus dem Cache abrufen, anstatt ständig auf die Datenbank zuzugreifen. Dadurch wird die Nutzung der Hardwareressourcen drastisch verringert; anstatt auf der Festplatte nach Daten zu suchen, greift Ihr System einfach aus dem schnellen Speicher darauf zu.


Diese Vorteile verbessern unmittelbar das Benutzererlebnis und können zu Kosteneinsparungen führen. Ihre Anwendung reagiert viel schneller und sorgt für ein reibungsloseres und zufriedenstellenderes Benutzererlebnis.


Caching reduziert die Infrastrukturkosten. Obwohl ein verteiltes System wie Redis seine eigenen Ressourcen benötigt, sind die Gesamteinsparungen oft erheblich. Ihre Anwendung greift effizienter auf Daten zu, sodass Sie möglicherweise Ihre Datenbank verkleinern können. Dies ist jedoch mit einem Kompromiss verbunden: Wenn Ihr Cache-System ausfällt, stellen Sie sicher, dass Ihre Datenbank auf die erhöhte Last vorbereitet ist.

Cache-Muster

Nachdem Sie nun die Leistungsfähigkeit des Caching kennen, sehen wir uns an, wie Sie es am besten nutzen können. In diesem Abschnitt untersuchen wir zwei grundlegende Musterkategorien: Cache-Schreibmuster und Cache-Fehlermuster . Diese Muster bieten Strategien zum Verwalten von Cache-Updates und zum Behandeln von Situationen, in denen die benötigten Daten noch nicht im Cache vorhanden sind.

Schreibmuster

Schreibmuster bestimmen, wie Ihre Anwendung mit dem Cache und Ihrer Datenbank interagiert. Sehen wir uns drei gängige Strategien an: Write-back , Write-through und Write-around . Jede dieser Strategien bietet einzigartige Vorteile und Nachteile:

Schreib zurück


Muster für den Rückschreibcache

Wie es funktioniert:

  • Ihre Anwendung interagiert nur mit dem Cache.
  • Der Cache bestätigt den Schreibvorgang sofort.
  • Ein Hintergrundprozess kopiert dann die neu geschriebenen Daten in die Datenbank.


Ideal für: Schreibintensive Anwendungen, bei denen Geschwindigkeit entscheidend ist und gewisse Inkonsistenzen aus Leistungsgründen akzeptabel sind. Beispiele hierfür sind Metrik- und Analyseanwendungen.


Vorteile:

  • Schnelleres Lesen: Die Daten befinden sich für einen schnellen Zugriff immer im Cache und umgehen die Datenbank vollständig.
  • Schnellere Schreibvorgänge: Ihre Anwendung wartet nicht auf Datenbankschreibvorgänge, was zu schnelleren Reaktionszeiten führt.
  • Geringere Datenbankbelastung: Batch-Schreibvorgänge reduzieren die Datenbanklast und können möglicherweise die Lebensdauer Ihrer Datenbankhardware verlängern.


Nachteile:

  • Risiko eines Datenverlusts: Wenn der Cache ausfällt, bevor die Daten in der Datenbank gespeichert werden, können Informationen verloren gehen. Redis verringert dieses Risiko durch persistenten Speicher, was jedoch die Komplexität erhöht.


  • Erhöhte Komplexität: Sie benötigen eine Middleware, um sicherzustellen, dass Cache und Datenbank letztendlich synchron bleiben.


  • Potenziell hoher Cacheverbrauch: Alle Schreibvorgänge werden zuerst in den Cache verschoben, auch wenn die Daten nicht häufig gelesen werden. Dies kann zu einem hohen Speicherverbrauch führen.

Durchschreiben


Write-Through-Cache-Richtlinie

Wie es funktioniert:

  • Ihre Anwendung schreibt gleichzeitig in den Cache und in die Datenbank.


  • Um die Wartezeit zu verkürzen, können Sie asynchron in den Cache schreiben. Dadurch kann Ihre Anwendung erfolgreiche Schreibvorgänge signalisieren, bevor der Cachevorgang vollständig abgeschlossen ist.


Vorteile:

  • Schnelleres Lesen: Wie beim Write-Back befinden sich die Daten immer im Cache, sodass kein Lesen der Datenbank erforderlich ist.


  • Zuverlässigkeit: Ihre Anwendung bestätigt einen Schreibvorgang erst, nachdem er in der Datenbank gespeichert wurde. Dadurch wird die Datenpersistenz auch dann garantiert, wenn unmittelbar danach ein Absturz auftritt.


Nachteile:

  • Langsameres Schreiben: Im Vergleich zu Write-Back hat diese Richtlinie einen gewissen Overhead, da die Anwendung sowohl auf die Datenbank als auch auf den Cache wartet, um zu schreiben. Asynchrones Schreiben verbessert dies, aber denken Sie daran, dass immer die Wartezeit der Datenbank vorhanden ist.


  • Hohe Cache-Nutzung: Alle Schreibvorgänge werden in den Cache übertragen, was möglicherweise Speicherplatz verbraucht, auch wenn nicht häufig auf die Daten zugegriffen wird.

Schreibe herum


Write-Around-Cache-Muster

Mit Write-Around schreibt Ihre Anwendung Daten direkt in die Datenbank und umgeht dabei den Cache während des Schreibvorgangs. Um den Cache zu füllen, wird eine Strategie namens Cache-Aside-Muster verwendet:


  1. Lese-Anforderung kommt an: Die Anwendung prüft den Cache.


  2. Cache-Fehler: Wenn die Daten nicht im Cache gefunden werden, ruft die Anwendung sie aus der Datenbank ab und speichert sie dann zur späteren Verwendung im Cache.


Vorteile:

  • Zuverlässiges Schreiben: Daten werden direkt in die Datenbank geschrieben, wodurch Konsistenz gewährleistet wird.
  • Effiziente Cache-Nutzung: Nur häufig abgerufene Daten werden zwischengespeichert, wodurch der Speicherverbrauch reduziert wird.


Nachteile:

  • Höhere Leselatenz (in einigen Fällen): Wenn sich Daten nicht im Cache befinden, muss die Anwendung sie aus der Datenbank abrufen, wodurch im Vergleich zu Richtlinien, bei denen der Cache immer vorab aufgefüllt wird, ein Roundtrip hinzugefügt wird.

Cache-Fehlermuster


Cache-Fehlermuster

Ein Cachefehler tritt auf, wenn die von Ihrer Anwendung benötigten Daten nicht im Cache gefunden werden. Hier sind zwei gängige Strategien, um dieses Problem anzugehen:


  1. Cache-Beiseite
    • Die Anwendung überprüft den Cache.

    • Bei einem Fehler ruft es Daten aus der Datenbank ab und aktualisiert anschließend den Cache.

    • Wichtiger Punkt: Die Anwendung ist für die Verwaltung des Caches verantwortlich.


Wenn Sie ein Cache-Aside-Muster verwenden, verwaltet Ihre Anwendung den Cache. Dieser Ansatz wird am häufigsten verwendet, da er einfach ist und keine Entwicklung an anderen Stellen als der Anwendung erfordert.


  1. Durchlesen
    • Die Anwendung stellt eine Anforderung, ohne den Cache zu kennen.

    • Ein spezieller Mechanismus überprüft den Cache und ruft bei Bedarf Daten aus der Datenbank ab.

    • Der Cache wird transparent aktualisiert.


Read-Through-Muster verringern die Anwendungskomplexität, erhöhen jedoch die Infrastrukturkomplexität. Stattdessen können die Anwendungsressourcen auf die Middleware verlagert werden.


Insgesamt wird das Write-Around-Muster mit Cache-Aside aufgrund seiner einfachen Implementierung am häufigsten verwendet. Ich empfehle jedoch, auch das Write-Through-Muster einzuschließen, wenn Sie Daten haben, die unmittelbar nach dem Zwischenspeichern verwendet werden. Dies bietet einen leichten Vorteil bei der Leseleistung.

Bewährte Methoden für die Zwischenspeicherung

In diesem Abschnitt werden bewährte Methoden für die Verwendung eines Caches erläutert. Wenn Sie diese Methoden befolgen, stellen Sie sicher, dass Ihr Cache aktuelle Daten enthält und seinen Speicher effektiv verwaltet.

Cache-Ungültigkeitserklärung

Stellen Sie sich vor, Sie haben Daten im Cache gespeichert und dann wird die Datenbank aktualisiert. Dies führt dazu, dass die Daten im Cache von der Datenbankversion abweichen. Wir nennen diese Art von Cachedaten „veraltet“. Ohne eine Cache-Invalidierungstechnik könnten Ihre zwischengespeicherten Daten nach Datenbankaktualisierungen veraltet bleiben. Um die Daten aktuell zu halten, können Sie die folgenden Techniken verwenden:


  1. Cache-Ungültigkeit beim Update: Wenn Sie Daten in der Datenbank aktualisieren, aktualisieren Sie auch den entsprechenden Cache-Eintrag. Write-Through- und Write-Back-Muster handhaben dies von Natur aus, aber Write-Around/Cache-Aside erfordert das explizite Löschen der zwischengespeicherten Daten. Diese Strategie verhindert, dass Ihre Anwendung veraltete Daten abruft.


  2. Time To Live (TTL): TTL ist eine Richtlinie, die Sie beim Speichern von Daten im Cache festlegen können. Mit TTL werden Daten nach einer bestimmten Zeit automatisch gelöscht. Dies hilft beim Löschen nicht verwendeter Daten und bietet eine Ausfallsicherung gegen veraltete Daten im Falle verpasster Ungültigkeitserklärungen.

Cache-Ersetzungsrichtlinien

Wenn Sie eine große Datenmenge zwischenspeichern, kann Ihr Cache-Speicher voll werden. Cache-Systeme verwenden normalerweise Speicher, der oft kleiner ist als Ihr primärer Datenbankspeicher. Wenn der Cache voll ist, muss er einige Daten löschen, um Platz zu schaffen. Cache-Ersetzungsrichtlinien bestimmen, welche Daten entfernt werden:


  1. Least Recently Used (LRU): Diese allgemeine Richtlinie entfernt Daten, die am längsten nicht verwendet (gelesen oder geschrieben) wurden. LRU ist für die meisten realen Anwendungsfälle geeignet.


  2. Least Frequently Used (LFU): Ähnlich wie LRU, aber mit Fokus auf Zugriffshäufigkeit. Neu geschriebene Daten können verworfen werden, also sollten Sie eine Aufwärmphase einplanen, während der Daten nicht gelöscht werden können.


Es gibt zwar noch andere Ersetzungsrichtlinien wie FIFO (First-In, First-Out), zufälliger Ersatz usw., diese sind jedoch weniger verbreitet.

Wann sollte kein Cache gespeichert werden?

Bevor Sie sich in die Cache-Implementierung stürzen, sollten Sie wissen, wann dies möglicherweise nicht die beste Lösung ist. Caching verbessert häufig die Geschwindigkeit und reduziert die Datenbanklast, ist jedoch möglicherweise nicht sinnvoll, wenn:


  1. Geringer Datenverkehr: Wenn Ihre Anwendung nur wenig Datenverkehr hat und die Antwortzeit noch akzeptabel ist, benötigen Sie wahrscheinlich noch kein Caching. Das Hinzufügen eines Caches erhöht die Komplexität. Daher empfiehlt es sich, ihn zu implementieren, wenn Sie mit Leistungsengpässen konfrontiert sind oder mit einem deutlichen Anstieg des Datenverkehrs rechnen.


  2. Ihr System ist schreibintensiv: Caching ist bei leseintensiven Anwendungen am vorteilhaftesten. Das bedeutet, dass Daten in Ihrer Datenbank selten aktualisiert werden oder zwischen den Aktualisierungen mehrmals gelesen werden. Wenn Ihre Anwendung ein hohes Schreibvolumen aufweist, kann Caching möglicherweise zusätzlichen Overhead verursachen und die Leistung verlangsamen.

Erkenntnisse

In diesem Artikel haben wir die Grundlagen des Cachings und dessen effektive Nutzung behandelt. Hier ist eine Zusammenfassung der wichtigsten Punkte:


  1. Bestätigen Sie den Bedarf: Stellen Sie sicher, dass Ihr System viele Lesevorgänge ausführt und die Latenzreduzierung benötigt, die das Caching bietet.


  2. Wählen Sie Muster mit Bedacht aus: Wählen Sie Cache-Schreib- und Cache-Fehlermuster aus, die dazu passen, wie Ihre Anwendung Daten verwendet.


  3. Aktualität der Daten: Implementieren Sie Strategien zur Cache-Ungültigkeitserklärung, um die Bereitstellung veralteter Daten zu verhindern.


  4. Ersetzungsrichtlinie verwalten: Wählen Sie eine Cache-Ersetzungsrichtlinie (wie LRU), um Löschungen zu handhaben, wenn der Cache seine Kapazität erreicht.

Verweise

  1. https://gist.github.com/jboner/2841832
  2. https://www.bytesizedpieces.com/posts/cache-types
  3. https://www.techtarget.com/searchstorage/definition/cache
  4. https://www.youtube.com/watch?v=dGAgxozNWFE