Wenn Ihre Anwendung stark auf Daten angewiesen ist und häufig mit einer Datenbank interagiert, ist Caching von entscheidender Bedeutung, um die damit verbundenen Kosten zu senken. Bei Online-Anwendungen, die Caching verwenden, um den Datenabruf zu beschleunigen, ist die Implementierung einer starken Datenreplikation und -konsistenz ein Muss.
Die Datenreplikation ist für die Sicherung kritischer Daten auf mehreren Servern von entscheidender Bedeutung und gewährleistet genaue und zugängliche Informationen. Ebenso sind solche Konsistenzmechanismen von entscheidender Bedeutung für die nahtlose Synchronisierung dieser verteilten Kopien, um etwaige Unstimmigkeiten im Bewerbungsprozess zu verhindern. Um sicherzustellen, dass Ihre Anwendung mit genauen und aktuellen Daten interagiert, müssen Sie daher diese Funktionen für Backups, Hochverfügbarkeit und Datenkonsistenz nutzen.
Zum Glück NCache stellt einen zuverlässigen Satz an Replikations- und Synchronisationsmechanismen für solche verteilten Systeme bereit. In diesem Blog erfahren Sie, wie NCache erfüllt diese Bedingungen.
NCache Topologien
Die von unterstützten Caching-Topologien NCache umfassen die Gespiegelte Topologie, Replizierte Topologie, Partitions- und Partitionsreplika-Topologie und Client-Cache-Topologie.
- Spiegeltopologie: Bei allen Lese- und Schreibvorgängen in der Mirrored-Cache-Topologie stellen die Clientknoten nur eine Verbindung zum aktiven Serverknoten des Clusters her. Die Client-Anwendungen bauen sofort eine Verbindung mit dem zuvor passiven Knoten auf, wenn der aktive Serverknoten ausfällt.
- Replizierte Topologie: Die replizierte Topologie stellt sicher, dass beim gleichzeitigen Ausfall mehrerer Server keine Daten verloren gehen, da jeder Server über dieselbe Datenkopie verfügt.
- Partitionstopologie: Durch die Verbindung aller Client-Anwendungen mit Cache-Servern bietet die Partitionstopologie eine hohe Datenverfügbarkeit durch die Aufteilung der Daten in Blöcke – und verbindet somit alle Client-Anwendungen mit den Cache-Servern. Auf diese Weise erhält die Anwendung die erforderlichen Daten auch dann, wenn der verbundene Server ausfällt, indem sie die anderen Server anfordert.
- Partitions-Replikat-Topologie: Die Partition-Replica-Topologie erstellt nicht nur dynamische Partitionen, sondern auch dynamische Replikate dieser Partitionen auf anderen Serverknoten, die im Falle eines Verbindungsausfalls oder Knotenausfalls als Backup dienen. In diesen Situationen NCache ruft Daten vom Replikatknoten ab und verteilt sie.
- Client-Cache-Topologie: In der Client-Cache-Topologie befindet sich der Cache sehr nahe an Ihrer Anwendung und ermöglicht Ihnen die schnelle Zwischenspeicherung der Daten aus dem verteilten Cache.
Erfahren Sie mehr über Topologien im Blog: Aufskalieren und auf dem Laufenden bleiben: Exploring Topologies in NCache.
Datenreplikation in NCache
Das Hauptziel der Datenreplikation besteht darin, Datenkonsistenz, Verfügbarkeit und Fehlertoleranz sicherzustellen. Durch die Aufbewahrung identischer Datenkopien an verschiedenen Standorten können Systeme die Leistung verbessern, die Latenz reduzieren und sich vor potenziellen Datenverlusten oder Serverausfällen schützen.
Abhängig von der verwendeten Topologie ist es entweder synchron oder asynchron. Bei der synchronen Replikation NCache stellt sicher, dass Daten gleichzeitig auf den primären Cache-Server und seine Replik(en) geschrieben werden. Durch diese Methode wird zwar eine starke Datenkonsistenz gewährleistet, allerdings kann die Leistung darunter leiden, da alle Cache-Schreibvorgänge auf die Bestätigung aller Replikate warten müssen.
Alternativ aktualisiert die asynchrone Replikation Replikate, nachdem Daten auf den primären Cache-Server geschrieben wurden. Da diese Cache-Schreibvorgänge nicht auf die Replikatbestätigung warten, bietet diese Strategie größere Leistungssteigerungen. Allerdings kann diese Strategie zu vorübergehenden Dateninkonsistenzen zwischen den Replikaten und dem primären Cache-Server führen.
Topologien für die synchrone und asynchrone Datenreplikation
Jede der besprochenen Topologien bietet ihre eigenen Eigenschaften, nicht alle sind für die Datenreplikation geeignet. Zum Beispiel die synchronisierte Replikation, die in der verwendet wird Gespiegelte Cache-Topologie, garantiert Datenkonsistenz durch gleichzeitiges Schreiben auf den Primär- und Replikatknoten. Andererseits wird die asynchrone Replikation verwendet, indem zuerst auf Primärknoten geschrieben und später Replikate aktualisiert werden Replizierte Cache-Topologie, verbessert die Effizienz, kann jedoch gelegentlich zu Fehlern führen.
Glücklicherweise Partition-Replikat-Topologie schafft ein Gleichgewicht zwischen Redundanz, Verfügbarkeit und Leistung, indem es die Vorteile der Partitioned- und Replicated-Cache-Topologien kombiniert. Benutzer können basierend auf ihren Anforderungen die beste Technik auswählen.
Datenkonsistenzmechanismen
Datenkonsistenz bezieht sich auf die Zuverlässigkeit und Genauigkeit von Informationen in einem System oder einer Datenbank und stellt sicher, dass die Daten während verschiedener Vorgänge korrekt und zuverlässig bleiben. Um die Datenkonsistenz sicherzustellen, NCache Bietet einen Mechanismus von Verteiltes Sperren Dadurch können Sie bestimmte Cache-Elemente während gleichzeitiger Aktualisierungen sperren. Mehrere Benutzer können gleichzeitig an verschiedenen Cache-Elementen arbeiten, ohne die Datenintegrität durch das Anwenden von Sperren zu beeinträchtigen. Daher sind Cache-Sperren nützlich für die Verwaltung gemeinsam genutzter Ressourcen in einer verteilten Umgebung.
Um die Datenkonsistenz zu wahren, NCache fungiert als verteilter Sperrenmanager und stellt Ihnen zwei Arten von Sperren zur Verfügung: Optimistische Sperre (Cache-Elementversionen) und Pessimistisches Sperren (exklusives Sperren). Optimistische Sperranwendungen Versionierung von Cache-Elementen. Bei diesem Sperrtyp fügt die Add-Methode ein neues Element zum Cache hinzu und speichert die Elementversion zum ersten Mal, während die Insert-Methode den Wert eines vorhandenen Elements überschreibt und dessen Elementversion aktualisiert. Das folgende Beispiel erstellt ein LockHandle und sperrt dann ein Element mit dem Schlüssel Product:1001 für einen Zeitraum von 10 Sekunden, sodass das Element nach 10 Sekunden automatisch entsperrt wird.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Prerequisite: Cache is already connected // Item is already added in the cache // Specify the key of the item string key = $"Product:1001"; // Create a new LockHandle LockHandle lockHandle = null; // Specify time span of 10 seconds for which the item remains locked TimeSpan lockSpan = TimeSpan.FromSeconds(10); // Lock the item for a time span of 10 seconds bool lockAcquired = cache.Lock(key, lockSpan, out lockHandle); // Verify if the item is locked successfully if (lockAcquired == true) { // Item has been successfully locked } else { // Key does not exist // Item is already locked with a different LockHandle } |
Alternativ sperrt die pessimistische Sperre das Element mithilfe von Griff verriegeln, wodurch alle anderen Benutzer daran gehindert werden, Schreibvorgänge für dieses Cache-Element auszuführen. Nachdem die Sperre beim Abrufen des Elements erfolgreich erworben wurde, kann die Anwendung nun Vorgänge sicher ausführen, da sie weiß, dass keine andere Anwendung dieses Element abrufen oder aktualisieren kann, solange Sie über diese Sperre verfügen. Das folgende Beispiel sperrt ein Element im Cache und ruft das Element dann mithilfe von lockHandle ab. Anschließend wird das Element aktualisiert und mithilfe der Insert-API erneut in den Cache eingefügt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Specify the key of the item string key = $"Product:1001"; // Set acquireLock flag as true bool acquireLock = true; // Specify time span of 10 seconds for which the item remains locked TimeSpan lockSpan = new TimeSpan(0, 0, 10); // Initialize the lockHandle LockHandle lockHandle = null; CacheItem item = cache.GetCacheItem(key, acquireLock, lockSpan, ref lockHandle); var product = new Product(); product = item.GetValue(); // Update the unitsinstock for the product product.UnitsInStock = 200; bool releaseLock = true; // Item is already locked with a LockHandle // Update the item and release the lock as well since releaseLock is set true // Make sure that the LockHandle matches with the already added LockHandle cache.Insert(key, item, null, lockHandle, releaseLock); |
- NCache Details
- NCache Pessimistisches Sperren
- Verwenden des Blogs zum Sperren mit zwischengespeicherten Daten
Best Practices für Datenreplikation und -konsistenz
Nachdem wir nun etwas über die von bereitgestellten Datenreplikations- und Konsistenzmechanismen erfahren haben NCacheLassen Sie uns die empfohlenen Vorgehensweisen in diesem Zusammenhang untersuchen. Die replizierte Topologie ist die beste Wahl für eine Anwendung, die eine hohe Verfügbarkeit erfordert und den Ausfall von (n-1) Knoten ohne Datenverlust überstehen kann. Die Partition-Replica-Topologie hingegen bietet sowohl hohe Verfügbarkeit als auch die Kapazität, wachsende Datenanforderungen zu erfüllen.
Obwohl sie nicht so hochverfügbar ist wie die replizierte Topologie, kann sie Knotenausfällen ohne Datenverlust standhalten. Jede Partition verfügt über ein Backup. Somit verfügt jeder Knoten im Wesentlichen über eine Partition und eine Sicherung einer anderen Partition. Andererseits bietet die gespiegelte Topologie Datenzuverlässigkeit und -verfügbarkeit durch asynchrone Replikation vom aktiven Knoten zum passiven Knoten.
NCache Unterstützt auch zeitbasierte Dateninvalidierungsstrategien, um Cache-Daten ablaufen zu lassen. Datenungültigmachung durch Ablauf bedeutet, dass Sie die Zeitspanne festlegen können, während der die Daten im Cache verbleiben und nach deren Ablauf sie verfallen. Auf diese Weise verfügt Ihr Cache bei der nächsten Client-Anfrage über die neuen Daten, wodurch veraltete Daten entfernt und die Datenkonsistenz sichergestellt wird. Ungültigkeit durch Abhängigkeiten stellt sicher, dass die Cache-Daten entfernt werden, wenn Änderungen in der Datenbank auftreten.
Zusammenfassung
Datenreplikation und -konsistenz sind das Rückgrat einer zuverlässigen und leistungsstarken Anwendung. Zum Glück mit NCachehaben Sie Zugriff auf robuste Funktionen, mit denen Sie hoch skalierbare, fehlertolerante Anwendungen erstellen können, die selbst die komplexesten Datenanforderungen bewältigen können.