Apache Cassandra. DBMS mit einem verteilten Datenspeichersystem


Cassandra_logoDa Cassandra ein DBMS mit einem verteilten Speichersystem ist, ist eines der Schlüsselelemente der Architektur der Mechanismus zur Gewährleistung eines verteilten Speichers, dessen grundlegende Konzepte ich in diesem Artikel zu beschreiben versuchen werde..

Physikalische Konzepte

Mit physikalischen Konzepten meine ich zunächst die strukturellen Elemente der Architektur, die auf der einen oder anderen Ebene eindeutig in unabhängige Einheiten unterschieden werden können. In diesem Abschnitt möchte ich nicht auf Konzepte eingehen, die sich auf Datenmanipulationsmechanismen beziehen.

Knoten

Die Grundkomponente der gesamten Architektur. Auf den Knoten werden die Daten gespeichert. Theoretisch kann es nur einen in der Infrastruktur geben. Knoten, aber dann besteht keine Notwendigkeit, über Fehlertoleranz und Speicherverteilung zu sprechen. In der Praxis wird empfohlen, dass es eine Reihe von Knoten gibt, die die Leistungsanforderungen mit einem kleinen Spielraum (20-30%) bei einem oder mehreren Knotenausfällen erfüllen und zukünftige Erweiterungsanforderungen erfüllen.

In seiner elementaren Form kann der Knoten wie folgt dargestellt werden:

Cassandras Knoten

In einer realen Situation ist ein Knoten ein physischer oder virtueller Server mit einem Betriebssystem (z. B. Debian) und dem darauf installierten Cassandra-DBMS, das Zugriff auf das Netzwerk hat, um mit Clients zu interagieren.

Gestell

Eine virtuelle Entität, die buchstäblich ein Server-Rack in einem Rechenzentrum ist. Eingeführt, um das Risiko physischer Ausfälle (Strom-, Kühlungs- oder Netzwerkprobleme) in einem einzelnen Rack zu minimieren.

Cassandras Gestell

Obwohl das Konzept eines Racks rein virtuell ist, wird in der Praxis empfohlen, sich an die vorhandene physische Anordnung der Knoten zu halten und diese nach Möglichkeit in verschiedene Racks aufzuteilen.

Rechenzentrum

Nichts weiter als eine logische Vereinigung von Racks. Ein Cluster (siehe unten) kann in einem oder mehreren Rechenzentren vorhanden sein. Dies wirkt sich erheblich auf die Datenreplikation aus.

Verallgemeinerte Ansicht des Clusters:

Cassandras Rechenzentrum

Bei der minimalen doppelten Redundanz benötigen Sie zwei Rechenzentren mit jeweils zwei Racks und einem Knoten pro Rack. Somit erhalten wir die Mindestanzahl von Knoten, die erforderlich sind, um ein akzeptables Maß an Fehlertoleranz zu implementieren – 4 Stück.

Cluster

Eine Reihe von Knoten, die einen vollständigen und geschlossenen Ring von Markern bilden (siehe unten).

Cassandras Cluster

Logische Konzepte

Nachdem wir die physikalischen Elemente der Architektur von Cassandra oben betrachtet haben, ist es an der Zeit, die untere Ebene der Interaktion zu betrachten und zu versuchen, die grundlegenden Konzepte beim Umgang mit Daten zu beschreiben. Wir müssen sofort reservieren, dass wir nicht über die logische Struktur von Daten in der Datenbank sprechen, da sich dies auf einen etwas anderen Bereich bezieht – das Datenmodell.

Partition

Es ist eine strukturelle Dateneinheit, die aus einem oder mehreren Datensätzen (Zeile) besteht. Verschiedene Partitionen werden auf verschiedenen Knoten (oder verschiedenen Knotensätzen) gespeichert. Cassandra bestimmt unabhängig den Knoten, auf dem eine bestimmte Partition gespeichert wird, mithilfe eines bestimmten Mechanismus, der buchstäblich als Partitionierer bezeichnet wird. Im Wesentlichen ist ein Allokator eine Hash-Funktion der Eingabeparameter, für den der Zeilenschlüssel ist; Am Ausgang erhalten wir den Wert dieser Hash-Funktion, die als Marker bezeichnet wird (Zeichen). Da die Hash-Funktion garantiert, dass das Ergebnis in Form von Daten fester Größe aus den Eingabedaten beliebiger Größe erhalten wird (dies ist das Hauptmerkmal), müssen Sie sich nicht um die Größe oder den Typ des Eingabeparameters kümmern. Wenn Sie die Hash-Funktion nacheinander für denselben Eingabeparameter berechnen, erhalten Sie am Ausgang immer denselben Marker, was immer eine genaue Definition des Knotens mit den erforderlichen Daten sowohl während des Lesevorgangs als auch während des Lesevorgangs garantiert Schreibvorgang (zum Beispiel beim Aktualisieren von Daten). Der Standardverteiler ist Murmur3Partitioner In früheren Versionen (bis zu 1.2) wurde jedoch der RandomPartitioner verwendet und andere (siehe entsprechende Abschnitte Dokumentation).

In der offiziellen Dokumentation Das Prinzip der Datentrennung wird hinreichend detailliert beschrieben:

Datenverteilung im Ring

In Cassandra wird die Gesamtmenge der vom Cluster verwalteten Daten als Ring dargestellt. Der Ring ist in Bereiche unterteilt, die der Anzahl der Knoten entsprechen, wobei jeder Knoten für einen oder mehrere Bereiche der Daten verantwortlich ist. Bevor ein Knoten dem Ring beitreten kann, muss ihm ein Token zugewiesen werden. Der Token-Wert bestimmt die Position des Knotens im Ring und seinen Datenbereich. Die Daten der Spaltenfamilie werden basierend auf dem Zeilenschlüssel auf die Knoten verteilt. Um den Knoten zu bestimmen, auf dem sich das erste Replikat einer Zeile befindet, wird der Ring im Uhrzeigersinn bewegt, bis der Knoten mit einem Tokenwert gefunden wird, der größer als der des Zeilenschlüssels ist. Jeder Knoten ist für den Bereich des Rings zwischen sich selbst (einschließlich) und seinem Vorgänger (exklusiv) verantwortlich. Wenn die Knoten in Token-Reihenfolge sortiert sind, wird der letzte Knoten als Vorgänger des ersten Knotens betrachtet. daher die Ringdarstellung.

Zum besseren Verständnis Übersetzung:

„In Cassandra wird die Gesamtdatenmenge, die von einem Cluster bereitgestellt wird, als Ring dargestellt. Der Ring ist in Bereiche unterteilt, deren Anzahl der Anzahl der Knoten entspricht. Jeder Knoten ist für einen oder mehrere Datenbereiche verantwortlich. Vor dem Verbinden eines Knotens mit einem Cluster muss ihm ein Token zugewiesen werden. Der Wert des Markers bestimmt die Position des Knotens im Ring und den Datenbereich, für den er verantwortlich sein wird. Die Daten der Spaltenfamilie werden basierend auf dem Datensatzschlüssel in Knoten unterteilt. Um den Knoten zu bestimmen, auf dem die erste Instanz des Datensatzes “lebt”, muss der Ring im Uhrzeigersinn durchlaufen werden, bis Sie auf einen Knoten mit einer Markierung stoßen, die größer als die Markierung des Datensatzschlüssels ist. Jeder Knoten ist für den Abschnitt des Rings zwischen sich selbst (einschließlich seines Markers) und seinem Vorgänger (ohne seinen Marker) verantwortlich. Die Knoten sind in aufsteigender Reihenfolge der Marker sortiert, dem letzten Knoten geht der erste voraus und somit wird eine Ringdarstellung gebildet. “

Ein Beispiel, das diesen gesamten Mechanismus perfekt veranschaulicht, finden Sie in den offiziellen Videos. und ich werde mir erlauben, es auszuleihen:

Cassandras Token-Bereich 01

Jedes Rechenzentrum hat dieselbe Farbe für die Knoten, auf denen dieselben Replikate gespeichert sind. Markierungsbereiche, für die bestimmte Knoten verantwortlich sind, sind ebenfalls auf dem Ring unten angegeben.

Replik

Um keine Daten zu verlieren, wenn ein oder mehrere Knoten ausfallen, muss eine gewisse Redundanz bereitgestellt werden, dh Kopien (Replikate) derselben Partitionen gleichzeitig auf verschiedenen Knoten gespeichert werden. Die Anzahl der Kopien der gespeicherten Daten wird durch das Kopierverhältnis oder mit anderen Worten den Replikationsfaktor bestimmt (Replikationsfaktor). Natürlich werden Kopien der Daten auf verschiedenen Knoten gespeichert. Alle Kopien derselben Daten sind absolut gleichwertig, es gibt keine primären oder sekundären Replikate.

Das Verteilen von Kopien wird als Datenreplikation bezeichnet.

Der Replikat-Weitergabemechanismus wird als Replikationsstrategie bezeichnet. Es gibt zwei Strategien:

  1. SimpleStrategy. Kann nur innerhalb eines einzelnen Rechenzentrums verwendet werden. Funktionsprinzip: Das Token des Datensatzschlüssels wird berechnet und dann wird gemäß dem bekannten Algorithmus (siehe oben) der Knoten bestimmt, der für das Speichern dieses Datensatzes verantwortlich ist. Alle anderen Replikate werden ohne Rücksicht auf die Topologie im Uhrzeigersinn auf den nächsten Knoten platziert.
  2. NetworkTopologyStrategy. Berücksichtigt die Anzahl der Rechenzentren. Funktionsprinzip: Im Gegensatz zu einer einfachen Strategie wird beim Durchlaufen im Uhrzeigersinn nicht der erste gefundene Knoten ausgewählt, sondern der erste gefundene Knoten aus andere Gestell. Angesichts der Datenkonsistenz (siehe unten) können Sie die maximale Anzahl ausgefallener Knoten flexibel steuern, um die Lese- / Schreibfähigkeit oder nur die Lesefähigkeit aufrechtzuerhalten.

Ein wichtiger Mechanismus zur Weitergabe von Replikaten ist der Konsistenzgrad (Konsistenzstufe), die dafür verantwortlich ist, den Grad der Datenkonsistenz in Replikaten sicherzustellen. Die Konsistenzstufe wird zum Lesen und Schreiben von Daten definiert:

  1. Die Konsistenzstufe pro Schreibvorgang von Daten bestimmt, von wie vielen Knoten eine Schreibbestätigung empfangen werden muss, damit einem Client eine Bestätigung einer erfolgreichen Schreiboperation gesendet wird.
  2. Die Lesekonsistenzstufe bestimmt, von wie vielen Knoten eine Leseantwort vom Client empfangen werden muss, um Daten zu senden.

Interaktionsprozess

Clusterknoten verwenden Peer-to-Peer, um Informationen über den Standort und den Status der anderen auszutauschen ein Protokoll namens Gossip … Jede Sekunde sendet jeder Knoten maximal drei andere Knoteninformationen über sich selbst sowie Informationen über andere Knoten (die aus demselben Klatsch stammen), die er kennt. Die Konsistenz der Informationen wird mithilfe von Nachrichtenversionen aufrechterhalten, alte Daten werden überschrieben. Es ist sehr wichtig, dass die Knoten den Status des anderen kennen, denn wenn einer von ihnen ausfällt, muss verhindert werden, dass Clientanforderungen an sie weitergeleitet werden. Natürlich ist der Ausgang eines Knotens in einem Cluster aufgrund einiger Verzögerungen beim Informationsaustausch nicht sofort bekannt, aber diese Nuance der Interaktion kann auch angepasst werden, wodurch die Empfindlichkeit bestimmt wird zu Fehlern.

Initialisierungsprozess Der gesamte Cluster beginnt mit dem Start der sogenannten Seed-Knoten, die Informationen über andere Knoten und Daten über die Topologie des Rings enthalten. Sie müssen mindestens einen Quellknoten pro Rechenzentrum haben, es werden jedoch mindestens zwei empfohlen, um die Fehlertoleranz zu gewährleisten. Als nächstes sollten die üblichen Knoten gestartet werden, die die erforderlichen Informationen für die Quellknoten bereitstellen. Danach wird der Interaktionsprozess wie gewohnt durchgeführt.

Kommentare bereitgestellt von HyperComments

Leave a Reply

Your email address will not be published. Required fields are marked *