Einleitung

In modernen Microservice-Landschaften wird häufig Kubernetes als Laufzeitumgebung für die containerisierten Anwendungen benutzt. Die Herausforderungen für den Betrieb von Microservices im Gegensatz zu Monolithen lassen sich durch den Einsatz geeigneter Management-Systeme und Praktiken sehr gut kontrollieren.

SQL-Datenbanken lassen sich zwar hochverfügbar betreiben, wurden aber nicht für die Welt der Microservices entwickelt. Etablierte Datenbanksysteme können dadurch häufig nicht alle Vorteile aus der Containerwelt mitnehmen. CockroachDB hingegen wurde speziell als hochgradig verteilbares Datenbanksystem entwickelt. Das bringt einige Vorteile mit sich, bedeutet aber natürlich auch Veränderungen im Betriebsablauf.

Was ist CockroachDB

CockroachDB beschreibt sich selbst als „distributed sql database“. Sie wird von Cockroachlabs entwickelt. Ihre größte Stärke ist die Ausfalltoleranz (egal ob Node, Rack oder sogar Datacenter). Mit geringer Latenz und ohne menschliches Eingreifen können sogar große Ausfälle von der Datenbank abgefangen werden. Der Name „CockroachDB“ ist an die Küchenschaben (engl. „cockroach“), die als äußerst widerstandsfähig gegen Umwelteinflüsse (z.B. Radioaktivität) gelten, angelehnt.

Das Datenbanksystem legt den Fokus dem CAP-Theorem nach auf CP.
Konsistenz und Zufallstolleranz sind also höher gewichtet als die Verfügbarkeit. Wie zu Beginn erwähnt, lässt sich die Datenbank durch ihre Verteilbarkeit dennoch hochverfügbar betreiben. Die Datenbank ist zudem Open-Source und steht unter einer freien Lizenz. Verfügbare Features sind sehr gut dokumentiert. Für die Entwicklung wurde überwiegend die Programmiersprache Go eingesetzt.

CockroachDB aus Technischer Sicht

Für die Speicherung der enthaltenen Daten setzt CockroachDB auf einen transaktionalen und streng-konsistenten key-value-store. Als API zur Außenwelt dient dabei ein SQL-Layer. Hierdurch wird dem Entwickler der bekannte Komfort von SQL-Datenbanken geboten. Darunter fallen z.B. Schemata und Tabellen. Die verwendete SQL-Syntax ist zum Großteil kompatibel zu PostgreSQL. Somit wird eine Migration von vorhandener Software enorm erleichtert. Außerdem müssen die Entwickler weniger neues Wissen aufbauen. Das Team von CockroachDB bietet eine Kompatibilitätsübersicht.

Replikation der Einträge

Das Replizieren von CockroachDB funktioniert über sogenannte Ranges, die definierte Teile von Daten aus einer Tabelle beinhalten. Eine Tabelle besteht aus mindestens einer Range. Jede Range wird (je nach Einstellungen) auf mehrere Nodes repliziert. Ein Node erhält immer den Lease über eine Range und ist somit für einen gewissen Zeitraum der Verwalter über diesen Teil der Daten. Solange er den Lease besitzt müssen alle Schreib- und Lesevorgänge für seinen Datenteil über diesen Node abgewickelt werden, um die Konsistenz der Daten zu gewährleisten.

Cluster Architecture

Drei Nodes speichern eine Tabelle, die sich in drei Ranges (Blau, Grün, Rot) unterteilt. Jeder Node hält in diesem Beispiel den Lease über die dick umrandete Range.

Lesen von Einträgen

Möchte ein Benutzer nun von einer Tabelle lesen, kann er seine Anfrange grundsätzlich an jeden Node stellen. Der Node gibt die Daten direkt zurück, falls er selbst gerade Leaseholder ist. Ansonsten wird die Anfrage innerhalb des Clusters an den Leaseholder übertragen. Der zuerst kontaktierte Node dient in diesem Fall als Gateway.

Database read

Read-Anfrage an Node 3. Er ermittelt Range und Leaseholder. Anfrage wird weitergeleitet und vom Leaseholder (Node 2) beantwortet. Antwort wird über Node 3 zurück an den Benutzer geleitet.

Schreiben von Einträgen

Schreibvorgänge funktionieren ähnlich. Auch hier kann jeder Node mit einem Schreibvorgang beauftragt werden. Auch hier wird ggf. wieder eine Verbindung zum Leaseholder der betroffenen Range aufgebaut. Der Leaseholder verändert die Daten und beauftragt, alle weiteren Replicas die Änderung durchzuführen. Die Operation wird erst bestätigt, wenn eine Mehrheit der vorhandenen Replicas die Änderung durchgeführt und eine Bestätigung an den Leaseholder gesendet hat.

Ein Eintrag aus der grünen Range soll geändert werden. Die Anfrage wird von Node 3 an den Leaseholder (Node 2) weitergeleitet. Er ändert den Eintrag und sendet die Anfrage an alle weiteren Replicas. Sobald >50% der Replicas die Änderung bestätigt haben wird die Bestätigung über Node 3 zurück an den Benutzer gesendet.

Vor- und Nachteile der Replikation

Lese- und Schreibzugriffe auf diese Art zu verwalten sorgt für eine sehr hohe Verfügbarkeit der Datenbank. Dieses Prinzip ist außerdem maßgeblich dafür, dass CockroachDB enorme Ausfälle sehr gut überwinden kann.

Es ist aber nicht alles Gold was glänzt. Die Ausfallsicherheit wird mit hohen Latenzzeiten erkauft. Wenn eine Anfrage erst durch das gesamte Cluster geleitet werden muss, kann das einige Zeit in Anspruch nehmen. Um diese Latenzzeiten zu verringern werden eine hohe Bandbreite und schnelle Festplatten benötigt. Für Big Data in der Dimension der Geschwindigkeit eintreffender Daten wäre CockroachDB also nicht die erste Wahl.

Wer sich für die Lese- und Schreibprozess in allen Facetten interessiert, dem möchte ich an dieser Stelle diese Dokumentation ans Herz legen. Dort gibt es einige Abbildungen und die „unverfälschten“ Worte der Entwickler.

CockroachDB ist eine Cloud-Native Datenbank

Die Entwickler bei Cockroachlabs haben viele erprobte Cloud-Native Konzepte übernommen. Die gesamte High-Availability-Philosophie gliedert sich perfekt in den Kubernetes-Stack ein:

  • Erstelle mehrere Instanzen des Progammes (Voraussetzung: Multi-Instanzfähigkeit)
  • Eintreffende Anfragen werden auf alle Instanzen verteilt
  • Wenn eine Instanz nicht mehr richtig funktioniert, stoppe diese

Cockroachlabs stellt die Anwendung außerdem direkt in Container-Images zur allgemeinen Verfügung. In der offiziellen Dokumentation finden sich neben Anleitungen für die Installation in diverse Cloud-Plattformen auch Guides für ein Deployment in eines Kubernetes-Cluster.

Fazit

CockroachDB macht viele Dinge anders als traditionelle SQL-Datenbanken. Es wurden konsequent neue („Cloud-Native“-)Konzepte in die Grundprinzipien der Datenbank verbaut. Das führt dazu, dass sich CockroachDB sowohl mit Kubernetes, als auch mit Microservices sehr gut integrieren lässt.

Das größte Feature des Datenbanksystems ist die Verfügbarkeit. Der Schwerpunkt wurde nicht auf die Geschwindigkeit gelegt, da ein Ausfall schwerwiegender wäre. Dies ist ein großer Vorteil von CockroachDB gegenüber anderen Datenbanksystemen.

Tags:

Keine Kommentare vorhanden.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.