Auf einen Blick: Die Konfiguration von Apache Cassandra konzentriert sich auf die Verwaltung der Datenkonsistenz durch Replikationseinstellungen und balanciert die Reaktionszeit mit der Genauigkeit aus, was für Anwendungen mit hoher Integrität entscheidend ist.
- Spätere Konsistenzkonfigurationen verbessern die Schreib- und Leseoperationen.
- Replikationsstrategien umfassen SimpleStrategy und NetworkTopologyStrategy für effektives Datenmanagement.
Schauen wir uns an, wie Apache Cassandra mit Datenkonsistenz umgeht.
Wenn Sie Daten an n bis 1 Knoten in einem Cluster schreiben und dann liest eine Anwendung sie von Knoten n, könnte Cassandra melden, dass die Daten nicht vorhanden sind, da die Replikation nicht sofort erfolgt. Das könnte ein großes Problem sein oder gar kein Problem. Es hängt von der Anwendung ab. Wenn es eine umsatzgenerierende Anwendung ist, dann ist es ein Problem.
Cassandra erlaubt Administratoren also, Datenreplikation und Konsistenz auf Anwendungsebene zu konfigurieren. Der Kompromiss ist die Antwortzeit im Vergleich zur Datengenauigkeit.
Diese Fähigkeit, dies auf Anwendungsebene zu konfigurieren, nennt man Eventual Consistency. Wie der Name schon sagt, kann man Cassandra sagen, sie solle nach einer Operation warten, um alle Daten in alle Rechenzentren und Racks zu schreiben, oder nach dem ersten Schreiben zur nächsten Operation wechseln, mit dem Verständnis, dass Cassandra schließlich aufholt.
Diese Idee ist dieselbe wie die Feststellung, welche Art von Speicher gemietet oder gekauft werden soll, wenn man eine Anwendung entworfen hat. Anwendungen, die als weniger geschäftskritisch gelten, könnten kostengünstigere Speicher und noch weniger Laufwerke verwenden und weniger oder gar keine Replika herstellen als missionskritische.
Konsistenz kann auf folgenden Ebenen festgelegt werden:
- Rechenzentrum
- Cluster
- I/O-Operationstyp (d. h. lesen oder schreiben)
Schreib- und Lesekonsistenz
Write Consistency bietet viele verschiedene Optionen. Hier sind ein paar.
| ALLE |
Daten müssen auf jedem Knoten in das Memtable- und Commit-Log geschrieben werden. Die Schritte, die Cassandra beim Schreiben der Daten durchführt, sind:
|
| QUORUM | Ein Quorum auf Rechenzentrumsebene. Ein Quorum ist ((Anzahl der Repliken)) / 2 + 1 aufgerundet. Das Addieren von 1 macht diese Zahl zur nächsten Ganzzahl, wenn diese Division einen Bruchteil ergibt. Und man kann nicht in einen Bruchteil eines Rechenzentrums schreiben, also fügt man noch einen weiteren hinzu |
| EINS, ZWEI, DREI | 1, 2 oder 3 replizieren, also auf Knotenebene. |
Lesen Sie Konsistenz
Je nach Schreibkonsistenzset haben manche Knoten ältere Datenkopien als andere. Es ist also sinnvoll, dass du auch die Lesekonsistenz konfigurieren kannst.
| ALLE | Wartet, bis alle Repliken geantwortet haben. |
| ... | usw. |
Replikationsstrategie
Replikation ist ein Faktor für die Konsistenz der Daten. Eine Replik bedeutet eine Kopie der Daten.
um festzustellen, ob ein Schreiben erfolgreich war und ob die Replikation funktioniert, verfügt Cassandra über ein Objekt namens Snitch, das bestimmt, zu welchem Rechenzentrum und Rack-Knoten gehören und welche Netzwerktopologie es gibt.
Es gibt zwei Replikationsstationen:
- SimpleStrategy – ein Rechenzentrum und ein Rack.
- NetworkTopologyStrategy – mehrere Racks und mehrere Rechenzentren. Dies wird bevorzugt, selbst wenn es nur ein Rechenzentrum gibt.
Hier veranschaulichen wir das mit einem Beispiel.
Befolge zuerst diese Anweisungen , um einen Cluster einzurichten.
Verwenden Sie NodeTool, um den Namen des Rechenzentrums zu bestimmen, wie vom Informanten gemeldet. Hier lautet der Name Datacenter1. Das zeigt, dass es zwei Knoten in diesem Cluster gibt. Natürlich würden Sie das auf jedem Knoten ausführen, um zu sehen, zu welchem Rechenzentrum jeder Knoten gehört.
nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 172.31.46.15 532.22 MiB 256 ? 58999e76-cf3e-4791-8072-9257d334d945 rack1
UN 172.31.47.43 532.59 MiB 256 ? 472fd4f0-9bb3-48a3-a933-9c9b07f7a9f6 rack1
Erstellen Sie mit NetworkTopologyStrategy einen Keyspace mit einer Replik zu Datacenter1. Das bedeutet, die Daten in zwei Racks zu schreiben, da es nur ein Rechenzentrum gibt.
CREATE KEYSPACE Customers
WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1};
Erstellen Sie nun eine Tabelle:
CREATE TABLE Customers.Customers (
Name text PRIMARY KEY,
credit int
);
Fügen Sie einige Daten hinein:
insert into Customers.Customers (name, credit) values ('Hardware Store', 1000);
Schalte das Nachzeichnen ein.
cqlsh> TRACING on;
Now Tracing is enabled
Und ein weiteres Album schreiben:
insert into Customers.Customers (name, credit) values ('Book Store', 1000);
Cassandra antwortet mit einigen Informationen zur Latenz. Es werden keine Rack-Level-Operationen angezeigt.
Tracing session: bf8e0a90-0c43-11e9-9628-9d6a90b241c5
Parsing insert into Customers.Customers (name, credit) values ('Book Store', 1000);
activity| timestamp | source | source_elapsed | client
[Native-Transport-Requests-1] | 2018-12-30 15:01:12.761000 | 172.31.46.15 | 203 | 127.0.0.1
Preparing statement [Native-Transport-Requests-1] | 2018-12-30 15:01:12.762000 | 172.31.46.15 | 359 | 127.0.0.1
Determining replicas for mutation [Native-Transport-Requests-1] | 2018-12-30 15:01:12.762000 | 172.31.46.15 | 662 | 127.0.0.1
Appending to commitlog [Native-Transport-Requests-1] | 2018-12-30 15:01:12.762000 | 172.31.46.15 | 753 | 127.0.0.1
Adding to customers memtable [Native-Transport-Requests-1] | 2018-12-30 15:01:12.762000 | 172.31.46.15 | 827 | 127.0.0.1
Request complete | 2018-12-30 15:01:12.762121 | 172.31.46.15 | 1121 | 127.0.0.1
Cassandra-Führer
- Was ist Cassandra? Schlüsselmerkmale und Vorteile
- Wie man einen Cassandra-Cluster einrichtet
- Cassandra SQL Batches and Maps
- Stresstests und Leistungsabstimmung Apache Cassandra
- JSON mit Cassandra verwenden
- Konfiguration von Apache Cassandra Data Consistency
- Verwendung von Tokens zur Verteilung von Cassandra-Daten
- Partitionsschlüssel vs. zusammengesetzter Schlüssel vs. Clustering von Spalten in Cassandra
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.