Auf einen Blick: Stresstests und Performance-Tuning für Apache Cassandra umfassen die Generierung von Daten und das Ausführen von Abfragen zur Analyse von Leistungskennzahlen. Wichtige Schritte umfassen das Erstellen eines Schlüsselraums, die Konfiguration von Stresstests in YAML und das Ausführen von Befehlen zur Leistungsbewertung.
- Anweisungen zur Erstellung eines Cassandra-Schlüsselraums und einer Tabelle sind bereitgestellt.
- Eine YAML-Konfigurationsdatei für Stresstests ist umrissen.
Hier zeigen wir, wie man einen Cassandra-Cluster mit dem Cassandra-Stress-Tool stresstestet.
Dieses Tool führt Einfügungen und Abfragen gegen eine Tabelle aus, die es selbst oder eine bestehende Tabelle oder mehrere Tabellen generiert.
Der Grundfluss
Der Test funktioniert so:
- Zufallsdaten einfügen. Sie geben die Länge von Textfeldern oder Zufallszahlen an, indem Sie einen festen Wert oder eine statistische Verteilung wie eine Normal-, Uniform- oder andere Verteilung auswählen. Die Normalverteilung sind Werte, die aus einem Mittelwert und einer Standardabweichung, also der bekannten Glockenkurve, gezogen werden. Die gleichmäßige Verteilung sind Zufallszahlen, die aus einem Bereich wie 1, 2, 3 gezogen werden,....
- Führen Sie Select-Anweisungen mit den generierten Werten aus.
- Berechnen Sie die Zeit in Millisekunden für jede Operation.
- Berechne die mittlere Zeit, Standardabweichungen, Anzahl der Garbage Collections usw. für jede Iteration. Das ergibt dir einen Durchschnitt und die Glockenkurve, sodass du sehen kannst, wie weit deine Operationen verteilt sind. Es zeigt dir Diagramme über die Zeit, damit du sehen kannst, ob die Leistung im Laufe der Zeit nachlässt. Viele Operationen, die weit vom Mittelwert entfernt sind, deuten auf ein hohes Maß an Varianz hin. Das könnte auf Dinge hinweisen, die du optimieren musst, wie Indizes, Partitionen, mehr Speicher hinzufügen usw.
Testaufbau
Du brauchst einen Cassandra-Cluster. Wenn du noch keinen hast, befolge diese Anweisungen.
Wir müssen einen Schlüsselraum, eine Tabelle und einen Index erstellen sowie eine Stresstest-Konfigurationsdatei im YAML-Format erstellen.
Deaktiviere jetzt die virtuelle Python 2.7-Umgebung, falls du diese nutzt, führe dann cqlsh aus. Füge folgendes Cassandra SQL ein.
CREATE KEYSPACE Library
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
CREATE TABLE Library.book (
ISBN text,
copy int,
title text,
PRIMARY KEY (ISBN, copy)
);
create index on library.book (title);
Erstellen Sie nun eine Textdatei namens stress-books.yaml und fügen Sie Folgendes ein. Dies ist ein YAML-Format, also verpassen Sie die Einrückung nicht.
Im Folgenden erklären wir die Felder.
keyspace: library
table: book
columnspec:
- name: text
size: uniform(5..10)
population: uniform(1..10)
- name: copy
cluster: uniform(20..500)
- name: title
size: uniform(5..10)
insert:
partitions: fixed(1)
select: fixed(1)/500
batchtype: UNLOGGED
queries:
books:
cql: select * from book where title = ?
fields: samerow
Die Feldnamen lauten:
| Schlüsselraum | Name des vorhandenen Schlüsselraums. Du könntest auch SQL hier einfügen, um eines zu erstellen, falls es es nicht gibt. |
| Tabelle | Name der vorhandenen Tabelle. Du könntest auch SQL hier angeben, um eine zu erstellen, falls es keine gibt. |
| Einfügen, Abfragen | Das sind die Funktionen, die wir aufrufen werden. Der Insert führt den Insert aus und die Abfragen/Bücher erledigt die Abfrage, die wir dort platzieren. Es führt Abfragen gegen die Werte aus, die in der gerade ausgeführten Charge eingefügt wurden. |
| Spaltenspezifikation: - Name: Text Größe: Uniform (5..10) | Für jeden Wert, den wir ausfüllen wollen, gibt es eine Spaltenspezifikation . Die Größe ist die Länge des Feldes. Uniform(5..10) bedeutet, eine Textzeichenkette aus 5 bis 10 Zeichen zu erzeugen. Wäre es ein numerisches Feld, würde es Zufallszahlen in diesem Bereich erzeugen. |
| Einfügen: Partitionen: fixed(1) Select: Fixed(1)/500 batchtype: NICHT EINGELOGGT | Das bedeutet, eine feste Anzahl von Zeilen in jede Partition jedes Batches einzufügen. Wir haben hier die Batch-Operationen erklärt. |
Führen Sie den Stresstest durch
Führe den untenstehenden Befehl aus, um den Test zu starten. Die Argumente sind:
cassandra-stress user profile=stress-books.yaml ops\(insert=1,books=1\) n=10000 -graph file=stress.html
| Benutzerprofil=stress-books.yaml | Means nutzen Sie stress-books.yaml für Anleitungen. |
| n=10000 ops\(insert=1,books=1\) | Hier sagen wir, wir führen 10.000 Chargen aus und für jede Ausführung den Einfügungscode 1 Mal und den Buchcode 1 Mal. Wenn du das auslässt, läuft es bis zur Standardabweichung des Fehlers < 0,2. |
| -Graph file=stress.html | Dadurch wird eine HTML-Datei namens stress.html erstellt, die die Ergebnisse verschiedener Metriken grafisch darstellt. |
Die Ausgabe ist ziemlich lang. Hier ist ein Teil davon abgeschnitten.
******************** Stress Settings ********************
Command:
Type: user
Count: 10,000
…
Connected to cluster: Walker Cluster, max pending requests per connection 128, max connections per host 8
Datatacenter: datacenter1; Host: localhost/127.0.0.1; Rack: rack1
Generating batches with [1..1] partitions and [0..1] rows (of [20..500] total rows in the partitions)
Sleeping 2s...
Warming up insert with 500 iterations...
Warming up books with 500 iterations...
Thread count was not specified
Es wird die Metriken für jede Batch-Iteration widerspiegeln. Du kannst diesen Test kopieren, einfügen und dann in Excel oder Google Sheets importieren, um das Lesen zu erleichtern.
type total ops, op/s, pk/s, row/s, mean, med, .95, .99, .999, max, time, stderr, errors, gc: #, max ms, sum ms, sdv ms, mb
books, 1003, 1003, 383, 387, 5.0, 3.9, 12.5, 20.2, 29.7, 40.7, 1.0, 0.00000, 0, 2, 10, 18, 1, 319
insert, 825, 825, 825, 934, 2.7, 2.0, 7.3, 12.1, 16.9, 23.8, 1.0, 0.00000, 0, 2, 10, 18, 1, 319
total, 1828, 1828, 1208, 1321, 4.0, 2.9, 11.1, 18.1, 27.2, 40.7, 1.0, 0.00000, 0, 2, 10, 18, 1, 319
books, 1096, 930, 350, 360, 5.8, 3.9, 14.1, 27.4, 33.3, 33.3, 1.1, 0.11339, 0, 0, 0, 0, 0, 0
insert, 904, 790, 790, 910, 3.0, 2.3, 9.0, 12.1, 12.3, 12.3, 1.1, 0.11339, 0, 0, 0, 0, 0, 0
total, 2000, 1720, 1140, 1270, 4.5, 3.2, 11.9, 21.9, 33.3, 33.3, 1.1, 0.11339, 0, 0, 0, 0, 0, 0
Mach das, dann ist die Tabelle leichter zu lesen.
Dies zeigt die Gesamtzahl der Einsätze und Auswahlen (Bücher haben wir genannt) und die durchschnittliche (durchschnittliche) Anzahl der dafür benötigten Millisekunden. In diesem Beispiel, das ich zuvor ausgeführt habe, lief es 2.000 Mal.
Ein Statistiker, der sich das ansieht, möchte 2, 3 und 4 Standardabweichungen vom Mittelwert kennen. Das entspricht 95 %, 99 % und 99,9 % der Transaktionen. Mit anderen Worten, das sind weit vom Mittelwert entfernt.
Unten ist die rechte Seite der Tabelle zu sehen. Nicht alle Metriken passen auf diesen Bildschirm, wie die Anzahl der Garbage Collections (die Anzahl der Cache-Sammlungen der Java Virtual Machine). Wenn das passiert, pausieren alle Operationen.) Das spielt jedoch keine Rolle, da die HTML-Datei das vollständige Bild liefert.
Öffnen Sie die Datei stress.html mit einem Browser.
Du siehst, dass der Test auf meinen zwei Clustern t2.large Amazon Ubuntu-Rechner 22 Sekunden gedauert hat. Die Spitzen in der Betriebszeit fielen mit Garbage Collections zusammen. Das kannst du sehen, wenn du die gc# -Option im Graphentyp-Dropdown auswählst.
Die Statistiken zeigen, dass der Durchschnitt während der gesamten Phase 2.231 Einsätze pro Sekunde betrug.
Du kannst aus dem Dropdown-Menü oben rechts im Diagramm verschiedene Kennzahlen darstellen.
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.