Moderne Anwendungen verarbeiten und erzeugen große Datenmengen. Die Möglichkeit, dass ein einzelner Webserver/eine einzelne Datenquelle ausfällt, was zum Verlust von Anwendungen und unbezahlbaren Daten führt, ist ein häufiger Albtraum unter Softwareentwicklern. Sie können jedoch eine hohe Datenverfügbarkeit erreichen, wenn alle Serverknoten über eine identische Kopie der Daten verfügen – das bedeutet, dass es zu keinem Datenverlust kommt, wenn einige Knoten im Cluster ausfallen. Aber was passiert, wenn die Datenmenge erheblich ansteigt? In solchen Fällen müssen Sie die Replikation zurückrufen und mit der Partitionierung der Daten beginnen.
NCache Da es sich um eine verteilte und In-Memory-Caching-Lösung handelt, bietet es eine hohe Skalierbarkeit, Leistung und Verfügbarkeit für datenintensive Anwendungen. Es bringt die POR nach vorne (Partitioniertes Replikat)-Topologie, um die Daten in mehrere Blöcke (Buckets) aufzuteilen und sie in verschiedenen Partitionen zu platzieren. Um die Lese- und Schreiblasten gleichmäßig zu verteilen, werden die Daten auf mehrere Knoten verteilt. Dies löst das anfängliche Problem beim Erreichen der Skalierbarkeit durch Teilen der Daten, aber wie genau werden die Daten gleichmäßig partitioniert? Dieser Blog soll Sie darüber informieren, wie die Datenpartitionierung in NCache.
Hash-basierte Partitionierung für gleichmäßige Datenverteilung
In den meisten Fällen verwenden verschiedene Anwendungen die Round-Robin-Strategie, um Daten verschiedenen Partitionen zuzuweisen. Dieser Ansatz garantiert zwar eine gleichmäßige Verteilung, stellt jedoch eine Herausforderung dar, wenn es darum geht, bestimmte Datenelemente zu finden. Das Suchen und Abrufen von Daten kann zeitaufwändig und ineffektiv werden, wenn die Position von Artikeln nicht nachverfolgt werden kann.
Um dieses Problem zu beheben, NCache beinhaltet Hash-basierte Partitionierung. Die Daten werden in viele Buckets aufgeteilt, die anschließend auf mehrere Partitionen verteilt werden. Das Ziel besteht darin, Buckets gleichmäßig auf Knoten im Cluster zu verteilen, um die Leistung zu optimieren und eine hohe Verfügbarkeit sicherzustellen. Um das zu erreichen, NCache verwendet eine Hash-Technik, die jedes Datenelement basierend auf dem Schlüssel des Elements einem bestimmten Bucket zuordnet. Um nun den Eigentümer des Buckets herauszufinden, müssen Sie die Hash-Funktion auf den Schlüssel des Elements anwenden und ihn durch die Gesamtzahl der Buckets modifizieren – wir haben insgesamt 1000 Buckets.
Was ist eine Verbreitungskarte?
Der Koordinatorserver ist in einem verteilten Cache-Cluster unerlässlich, da er die Bucket-Verteilung überwacht und sicherstellt, dass jedes Element basierend auf seinem Schlüssel einem bestimmten Bucket zugewiesen wird. Um dies zu erreichen, erstellt der Koordinatorserver eine Verbreitungskarte einschließlich der Bucket-Verteilung und verteilt sie an alle anderen Partitionen im Cluster sowie an alle verbundenen Clients.
Egal wie viele Server sich im Cluster befinden, NCache stellt sicher, dass jedem Element durch diese Methode eine konsistente Bucket-Adresse zugewiesen wird. Dies liegt daran, dass die Verbreitungskarte bleibt konstant, auch wenn sich die Anzahl der Server im Cluster ändert. Daher bleibt die Bucket-Adresse eines Elements gleich, selbst wenn ein Bucket zu irgendeinem Zeitpunkt von einer Partition in eine andere verschoben wird. Dies garantiert, dass die Daten intakt bleiben und keine Daten bei Bucket-Bewegungen verloren gehen.
Im Fall einer partitionierten Topologie erleidet der Cluster immer dann Datenverlust, wenn ein Knoten den Cluster verlässt. Die Buckets, die dem verlassenden Knoten gehören, gehen alle verloren. Im Fall von POR ist das Replikat jedoch auf einem anderen Knoten vorhanden, der vorhanden sein wird redisanhand der Verbreitungskarte zugeordnet – Datenverlust vorgebeugt.
Datenverteilung basierend auf einer Verteilungskarte
Die Daten werden dank der von angebotenen dynamischen Bucket-Verteilungsstrategie gleichmäßig auf alle Knoten im Cache-Cluster verteilt NCache. Alle 1000 Buckets werden dem Knoten zugewiesen, wenn Sie einen Cache-Cluster starten, was dazu führt, dass alle Daten in einer einzigen Partition gespeichert werden. Um die beste Leistung und den besten Lastausgleich bereitzustellen, werden die Buckets dann gleichmäßig auf die Partitionen verteilt, wenn weitere Knoten zum Cluster hinzugefügt werden.
Die 1000 Buckets werden beispielsweise zu gleichen Teilen zwischen den beiden Partitionen aufgeteilt, wenn ein zweiter Knoten zum Cluster hinzugefügt wird, sodass jeder Split 500 Buckets erhält. Wenn ein dritter Knoten in den Cluster eintritt, sind es die Buckets redisverteilt, wodurch jede Partition entsprechend 333, 333 und 334 Buckets erhält.
Die Bucket-Verteilung ändert sich erneut, wenn eine Partition den Cluster verlässt. Um beispielsweise eine gleichmäßige Verteilung der Daten aufrechtzuerhalten, wenn eine Partition einen Cluster mit drei Knoten verlässt, werden die 333 oder 334 Buckets, die zu dieser Partition gehören, auf die beiden verbleibenden Knoten verteilt. NCacheDer Zustandsübertragungsmechanismus von greift ein, um die Daten zwischen den Knoten neu auszugleichen, wenn sich die Bucket-Verteilung ändert, und stellt sicher, dass die Daten entsprechend der Bucket-Verteilung optimal verteilt werden. Ebenso erhält der Client auch die Verteilungskarte, die über die laufenden Serverknoten und deren Hash-basierte Verteilungen informiert.
Datenlastausgleich
Während redisTributing von Buckets um die Knoten des Cache-Clusters, NCache verwendet eine datenzentrierte Strategie, um sicherzustellen, dass die Datenmenge, die jede Partition empfängt, ausgeglichen ist. Um dies zu erreichen, tauscht jede Partition im Cluster regelmäßig die Statistiken der Buckets, die sie besitzt, mit den anderen Partitionen im Cluster aus. Dies ermöglicht die Erstellung eines ausgewogenen Verbreitungskarte die für die Datenmenge verantwortlich ist, die jede Partition besitzt. NCache gleicht die Daten automatisch ab um sicherzustellen, dass jede Partition einen gleichen Anteil an Daten erhält. Es ermöglicht auch, Daten manuell abzugleichen. Sie können mehr darüber lesen hier.
Zusammenfassung
Abschließend die Verwendung von POR zum Aufteilen von Daten NCache ist eine nützliche Technik zur Verbesserung der Geschwindigkeit und Skalierbarkeit von Anwendungen. Sie können garantieren, dass Daten immer verfügbar sind, und die Möglichkeit von Leistungsengpässen verringern, indem Sie Daten in kleinere Blöcke aufteilen und sie auf zahlreiche Cache-Knoten verteilen.