Checkmark on Circle.png

Apache Cassandra

Aus KGS-Wiki
Das Logo von Apache Cassandra

Cassandra ist der Name eines Open Source NoSQL-Datenbankverwaltungssystems, das als freie Software mit Apache Lizenz vertrieben wird. Apache Cassandra startete 2008 als Gemeinschaftsprojekt eines Facebook- und eines Amazon-Dynamo-Entwicklers. Später nahm sich die Apache Software Foundation der weiteren Ausarbeitung an. Die NoSQL Datenbank Cassandra kommt unter anderem bei Apple, Instagram, Netflix, Comcast, Twitter und Reddit zum Einsatz.[1]

Funktionsweise

Apache Cassandra ist ein Datensystem, dass für großen Datenmengen ausgelegt ist. Die Übermittlung geschieht über sog. Commodity-Server, die komplett ohne einen Single Point of Failure auskommen. Das heißt, dass das Cassandra eine enorm hohe Fehlertoleranz aufweist. Dies ist unter einem P2P-Protokoll gesichert.

Cassandra ähnelt zwar im Aufbau einer Datenbank, nutz aber kein relationales Datenmodell. Man kann es sich wie eine Hashtabelle vorstellen, da Cassandra Daten in Schlüssel-Werte-Paaren speichert. Ein Row-Key einer Tabelle besteht aus einem String mit 16–32 Bytes, obwohl das System auch mehr Bytes hergeben könnte. Die Spalten werden in Sets gruppiert, die sich nach dem Namen oder Zeitcode ordnen lassen. Üblicherweise verwenden Anwendungen einen zugehörigen Cassandra Cluster und verwalten ihn, während die Applikation in Betrieb ist. Zwar unterstützt das System ein multitabellarisches Konzept, dennoch hat jedes Deployment nur eine Tabelle in seinem Schema.

Durch dieses ausgeklügelte System, kann Apache Cassandra Daten bis auf 80% komprimieren. Die Daten werden via Commit Log, einer Transaktionsaufzeichnung sowie durch integrierte Backup-Store Mechanismen geschützt. In Cassandra werden Daten zunächst in sogenannte Mem-Tables geschrieben. Erst wenn diese voll sind, werden sie auf Festplatten gespeichert.

Das P2P Protokoll (Gossip Protocol)

Das P2P Protokoll verwaltet den Informationsaustausch zwischen den Rechnern in einem Netzwerk. Außerdem stellt es sicher, dass falls ein Netzwerkknoten ausfällt, ein anderer dessen Aufgaben übernimmt, bis der Ausgefallene wieder funktioniert. Bei der Kommunikation P2P werden zudem in den Nachrichten gespeicherte Versionen älterer Informationen fortlaufend mit aktuelleren Versionen überschrieben.

Konzepte, Datenstruktur und Algorithmen[2]

Daten-Partitionierung
Apache Cassandra verwendet eine Shared-Nothing-Architektur (kurz auch: SN). Dabei wird eine singuläre, logische Datenbank über ein Netzwerkknotencluster verteilt, woraus der Bedarf an gleichmäßiger Verteilung der Daten auf alle Nodes resultiert. Hierdurch wird jeder Netzknoten für einen Teil der Daten verantwortlich.[3]
Hashing
Bei einer effizienten Datendistribution kann es zu zwei Hauptproblemen kommen. Einerseits muss ein bestimmter Netzwerkknoten definiert werden, auf dem ein bestimmter Datenanteil abgelegt wird. Andererseits muss der Datenstrom minimiert werden, wenn Netzknoten hinzugeschaltet oder entfernt werden. Erst die Hashfunktion macht es möglich, diese Probleme zu lösen. Ein Hashing-Algorithmus sorgt dafür, dass Cassandra RowKeys auf physischen Nodes abgebildet werden können. Die Werte aus einem solchen Algorithmus können als Ring dargestellt werden.[4]
Datenreplikation
Die Datenpartitionierung auf einem Shared-Nothing-System hat oft einen SPOF zur Folge. Das bedeutet, dass, wenn ein Netzwerkknoten ausfällt, kann auf Teile der Daten nicht zugegriffen werden. Durch die Datenreplikation umgeht Cassandra dieses Problem und erstellt Kopien der Daten. Die Speicherung solcher Kopien auf mehreren Netzknoten wird als Datenreplikation bezeichnet, die einen hohen Anteil an der Fehlertoleranz und Zuverlässigkeit des Datenbanksystems hat.[5]
Konsistenz
Die Replikation verlangt nach einer Kopien übergreifenden Synchronisierung der Daten. Ist diese gewährleistet, spricht man von Datenkonsistenz (auch: weak oder eventual consistency), wie sie etwa auch beim Domain Name System angewendet wird. Damit soll sichergestellt werden, dass alle Netzknoten und Replikas schließlich die aktualisierten Werte ausgeben. Bei Cassandra können User selbst das Maß der Konsistenz (consistency level)[6] bestimmen, indem sie es per Read-and-Write-Operationen an den eigenen Bedarf anpassen (tunable consistency). Sie können etwa die Anzahl der Repliken innerhalb eines Clusters konfigurieren. Der Consistency Level ist in Cassandra ein erforderlicher Parameter, weil er die genau Netzknotenanzahl festlegt, die eine Operation erfolgreich beenden müssen, bevor der gesamte Prozess abgeschlossen wird.
Replikationsstrategien
Die Datendistribution in Apache Cassandra kann konfiguriert werden. Hierzu stellt Cassandra Replikationsstrategien zur Verfügung, die festlegt, wie Daten Netzknoten und Rack übergreifend kopiert werden. Die Replikationsstrategien verwenden Umgebungsinformationen (Proximity), um eine geeignete Lokalität zur Speicherung einer Replik zu finden.
Gossip Protocol
Die Kommunikation in Cassandra ist nicht nach dem Master-Slave-System gestaffelt, sondern basiert auf dem Gossip Protocol. Dabei tauschen die Netzwerkknoten untereinander mit maximal 3 anderen Nodes Statusinformationen aus. Dadurch wird die Netzlast reduziert.[7]
Bloomfilter
Dank dem Bloomfilter, einer probabilistischen Datenstruktur, kann in Cassandra sehr schnell überprüft werden kann, ob ein Element innerhalb eines Datensets vorhanden ist oder nicht. Falsch positive Ergebnisse sind zwar möglich, falsch negative aber nicht. Mit Bloomfiltern lassen sich teure Ein-/Ausgabe-Operationen vermeiden.[8]
Sorted String Table (SST)
Eine sortierte String-Tabelle ist eine unveränderbare Schlüsselwertübersicht, mittels derer riesige sortierte Datensegmente in einer Datei gespeichert werden können.[9]
Write-Back Cache
Im Write-Back Cache wird die Schreib-Operation ausschließlich an den Cache verwiesen und ist umgehend abgeschlossen. Dies kürzt den Datenschreibprozess ab, der bei einem Write-Through Cache erst dann als abgeschlossen gilt, wenn die Informationen sowohl im Cache, als auch in der zugrunde liegenden Speicherstruktur hinterlegt sind. In Cassandra sind die Mem-Tables solche Write-Back Caches innerhalb eines Speichers.[10]
Cassandra Keyspace
Der Keyspace in Apache Cassandra ist schematisch ähnlich einem relationalen Datenbankmanagementsystem (kurz: RDBMS). Es handelt sich um Container, in denen alle Anwendungsdaten abgelegt werden. Wird ein Keyspace definiert, muss auch die Replikationsstrategie und ein Replikationsfaktor für den jeweiligen Container samt Inhalt festgelegt werden.[11]
Column Family (Spaltenfamilie)
Die Column Family in Apache Cassandra ist das, was in einem RDBMS eine Tabelle ist. Dabei kann man sich die Column Family besser als eine Art Übersicht über eine sortierte Übersicht vorstellen. Eine Reihe in der Übersicht gibt Zugriff zu einem Spaltensatz, der in Form einer sortierten Übersicht dargestellt ist. Allerdings wird in CQL (Cassandra Query Language) von einer Tabelle (Table) gesprochen, wenn eine Spaltenfamilie gemeint ist.[12]
Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
RowKey
Der RowKey ist der Partitionsschlüssel in Apache Cassandra. Ihm sind mehrere Spalten zugewiesen. Der RowKey ist verantwortlich dafür, wie die Daten über ein Cluster verteilt werden.[13]

Verwendung

Apache Cassandra wird vor allem bei Apple , Twitter, Spotify, Discord und Reddit genutzt. Außerdem wurde es bis 2011 bei Facebook benutzt.

CQL – Cassandra Query Language

Cassandra Query Language ist die Datenbanksprache, über die man Zugriff auf Apache Cassandra erhält. CQL betrachtet die Datenbank (Keyspace) als einen Tabellen-Container. Der Client kann jeden Netzwerkknoten für seine Schreib-Operation ansprechen. Dieser Node stellt dann die Kommunikationsschnittstelle zwischen dem Client und den Netzknoten dar, die die Daten beinhalten.