Apache Cassandra: Verteilte Verwaltung großer Datenbanken
Geht es darum, sehr große Datenmengen im Bereich von mehreren Terabyte oder gar Petabyte zu verwalten, sind klassische Datenbanksysteme überfordert. Hier sind spezielle Big-Data-Applikationen gefragt, bei denen ein Augenmerk auf Skalierbarkeit gelegt wird, da sich das tatsächliche Datenvolumen anfangs oft gar nicht abschätzen lässt. Einer der beliebtesten, modernen Vertreter ist die Open-Source-Lösung Cassandra, die ursprünglich für Facebook entwickelt wurde.
Was ist Apache Cassandra?
Apache Cassandra ist ein Open-Source-Datenbank-Management-System (DBMS) für sehr große, aber dennoch strukturierte Datenbanken. Durch die gute Skalierbarkeit können sich diese Datenbanken auf verschiedene Cluster verteilen, weshalb Cassandra nicht an einen einzelnen Server gebunden ist.
Cassandra zählt zur Kategorie der spaltenorientierten NoSQL-Datenbanken, wobei NoSQL hier in seiner Bedeutung „Not only SQL“ zu verstehen ist und nicht als „kein SQL“. Im Gegensatz zu typischen SQL-Datenbanken bieten NoSQL-Strukturen deutliche Vorteile bei der Verarbeitung großer Datenmengen, da sie nicht an die Beschränkungen der Abfragesprache SQL (Structured Query Language) gebunden sind. Apache Cassandra verfügt über eine eigene Abfragesprache mit dem Namen Cassandra Query Language (CQL), die SQL ähnelt, aber von Entwicklern wegen ihrer Anpassung an die Eigenheiten von Cassandra eindeutig bevorzugt wird.
Als NoSQL-Datenbank hat Cassandra einen redundanten Ansatz, der zu hoher Ausfallsicherheit beiträgt. Im Gegensatz dazu bereitet die Replikation von Daten in relationalen Datenbanksystemen immer wieder Probleme.
Cassandra wurde ursprünglich von Avinash Lakshman und Prashant Malik bei Facebook entwickelt und 2008 erstmals veröffentlicht. 2009 wurde das Projekt von der Apache Software Foundation, einer der wichtigsten Open-Source-Entwicklergemeinschaften, zunächst als Unterprojekt in den Apache Incubator aufgenommen. Seit Februar 2011 ist Apache Cassandra ein eigenes Top-Level-Projekt innerhalb der Apache Software Foundation, ebenso wie der weit verbreitete Apache Webserver, der Suchserver Solr, die Messaging-Plattform Kafka oder auch das bekannteste Apache-Projekt OpenOffice.
Neben den ursprünglichen Entwicklern tragen auch andere große Firmen wie IBM, Twitter und Rackspace, einer der größten IT-Serviceprovider in den USA, zu Cassandra bei. Einen wichtigen Beitrag zum Projekt leistet außerdem das Unternehmen DataStax, dessen Geschäftsmodell im Wesentlichen auf kostenpflichtigem Support, Installationsunterstützung und Schulungen zur Datenbank Cassandra beruht. DataStax trägt heute zu etwa 80 Prozent zur Open-Source-Entwicklung von Cassandra bei und liefert mit DataStax Enterprise auch eine kommerzielle Datenbanklösung, die auf dem frei zugänglichen Cassandra beruht.
Apache Cassandra ist nach dem bekannten Ranking von DB-Engines zurzeit die populärste spaltenorientierte Datenbank und hat bekannte Namen wie Microsoft Azure Cosmos DB oder Google Cloud Bigtable weit hinter sich gelassen.
Cassandra: Die wichtigsten Funktionen
Als echtes verteiltes System verwendet Cassandra keinen Master. Alle Cluster sind gleichberechtigt und können jede Datenbankanfrage bearbeiten, was die Leistungsfähigkeit deutlich erhöht. Die Daten liegen auf den Knoten verteilt. Durch das einfache Hinzufügen weiterer Knoten ist das System zudem leicht skalierbar. Nach der Installation gilt es lediglich, die Konfigurationsdateien auf den neuen Knoten zu verteilen. Cassandra liefert dazu geeignete Werkzeuge.
Um die Ausfallsicherheit und im Notfall auch die Wiederherstellung der Daten zu garantieren, verfügt Apache Cassandra über ein bedarfsgerecht konfigurierbares Replikationssystem. Die Fehlertoleranz wird minimiert, indem die Daten automatisch zwischen den Knoten repliziert werden. Ausgefallene Knoten lassen sich leicht ersetzen. Das System bleibt für Anfragen jederzeit verfügbar.
Cassandra bietet zudem eine hohe Verfügbarkeit und Partitionstoleranz. Nach dem CAP-Theorem der Informatik ist es niemals möglich, Konsistenz (Consistency), Verfügbarkeit (Availability) und Partitionstoleranz (Partition tolerance) garantiert gleichzeitig zu erfüllen. Dabei räumt man der Konsistenz, was bedeutet, dass alle Knoten zu jeder Zeit dieselben Daten sehen, wie bei vielen Big-Data-Systemen die geringste Priorität ein. Nach einem Ausfall lässt sich die Konsistenz durch Datenwiederherstellung zeitnah wieder gewährleisten, wohingegen die beiden anderen Eigenschaften jederzeit sichergestellt sein müssen.
Cassandra-Datenbanken unterstützen das von Google entwickelte Programmiermodell MapReduce für Berechnungen mit großen Datenmengen auf verteilten Systemen. Die eigene Datenbankabfragesprache CQL (Cassandra Query Sprache) ist speziell an die Datenstrukturen von Cassandra angepasst.
Was sind die Vorteile von Apache Cassandra?
Einer der wichtigsten Vorteile von Cassandra ist die gute Skalierbarkeit bei sehr hoher Ausfallsicherheit – elementare Voraussetzungen für Big-Data-Anwendungen. Bei Cassandra spricht man von einer horizontalen Skalierbarkeit, was bedeutet, dass sich Kapazität und Leistungsfähigkeit des Systems durch zusätzliche Knoten erhöhen lassen. Bei der gegenteiligen vertikalen Skalierung, muss der einzige Datenbankserver durch stärkere Prozessoren und größere Festplatten aufgerüstet werden, falls die Leistung oder Kapazität den Anforderungen nicht mehr entspricht. Da man mit handelsüblicher Server-Hardware arbeiten kann, ist die horizontale Skalierung in den meisten Fällen die preisgünstigere Lösung.
Das Datenmodell von Cassandra basiert auf multidimensionalen Hash-Tables (Hashwert-Tabellen), in denen jede Zeile beliebig viele Spalten hat. Im Gegensatz zu einer klassischen Datenbanktabelle müssen diese Spalten nicht in jeder Zeile gleich sein. In Benchmarks und in realen Anwendungsszenarien überzeugt Apache Cassandra außerdem durch einen deutlichen Geschwindigkeitsvorteil gegenüber anderen NoSQL-Datenbanken.
Wo kommt Apache Cassandra zum Einsatz?
Eines der Hauptziele bei der Entwicklung von Cassandra war das komfortable Durchsuchen der Nachrichteneingänge bei Facebook durch die Nutzer. Der Großkonzern nutzte hierfür ein Cluster aus über 150 einzelnen Knoten. Nicht von ungefähr wird Cassandra, das in den Grundstrukturen Amazon Dynamo und Google Bigtable ähnelt, heute gerne von Anbietern großer sozialer Netzwerke verwendet, bei denen vielfältige Daten zwischen den Nutzern zu vernetzen sind. Bekannte Kunden sind neben Twitter, Instagram und Spotify auch der Social-Bookmark-Anbieter Digg und der Social-News-Aggregator Reddit.
Facebook hat mittlerweile auf eine Eigenentwicklung aus einer Kombination der Datenbanksysteme HBase und HDFS gewechselt, beides Komponenten des Apache-Hadoop-Frameworks.
Auch viele andere Netzwerke mit großen Datenmengen nutzen Cassandra als Datenbank – sowohl als Haupt-Datenbank als auch als Nebenkomponente für bestimmte Aufgaben. Hier sind u. a. eBay, GitHub, Netflix, The Weather Channel und der Large Hadron Collider am europäischen Kernforschungszentrum CERN (pro Jahr etwa 30.000 Terabyte Daten) als Beispiele zu nennen. Eine der größten Cassandra-Installationen läuft bei Apple mit 75.000 Knoten.
Erste Schritte mit Apache Cassandra
Apache Cassandra läuft auf UNIX-ähnlichen Systemen, bevorzugt auf Linux-Servern. Zusätzlich benötigt man die Java-Runtime, da Cassandra in Java programmiert ist. Die Installationspakete liegen als Debian-Pakete oder RPM auf den Apache-Servern. Zur Installation fügen Sie das passende Repository hinzu. Nach der Installation sind die typischen Daten-, Cache- und Protokollverzeichnisse anzulegen und in der Datei cassandra.yaml zu konfigurieren.
Die Administration von Cassandra läuft über eigene Kommandozeilentools. Das wichtigste ist die Shell, der Cassandra Query Language cqlsh.
Mit folgendem Befehl erhalten Sie eine erste Übersicht aller möglichen Kommandos:
cqlsh --help
Eine anschauliche Einführung in Apache Cassandra gibt folgendes YouTube-Video:
Mit OpsCenter bietet DataStax ein webbasiertes grafisches Werkzeug zur Verwaltung und visuellen Überwachung von Cassandra-Systemen.