CockroachDB 19.2 halbiert Transaktionszeiten

Die Entwickler hinter der verteilten SQL-Datenbank CockroachDB haben Version 19.2 veröffentlicht. Verteilte Transaktionen laufen dank eines neuen Protokolls schneller ab.

Bei CockroachDB handelt es sich um eine verteilt arbeitende Datenbank, die einen großen adressierbaren Keyspace in kleine so genannte Ranges zerlegt und diese redundant auf verschiedenen Nodes und Clustern verteilt. Key-Value-Datenbanken gibt es einige. CockroachDB liefert aber auch Unterstützung für SQL, indem es erlaubt, SQL-Tables auf diesen Keyspace zu mappen. Das bedeutet aber auch, sämtliche Aktualisierungen der Daten wandern nicht in eine zentrale Datenbank, sondern in mehrere Replicas der Ranges. Das Aktualisieren dauert länger, je mehr Replicas die Admins einsetzen.

Beim Aktualisieren der Daten soll ab Version 19.2 (die Versionierung orientiert sich neuerdings am Veröffentlichungsjahr) ein neues Protokoll helfen. Parallel Commits erlaubt es, verteilte ACID-Transaktionen schneller abzuwickeln. In Version 2.1 wurden bereits Pipeline-Transaktionen eingeführt, was die Schreibvorgänge beschleunigte. Das neue Protokoll soll die Dauer von verteilten Transaktionen halbieren.

Was bisher geschah

Bei dem verteilten Schreibvorgang landeten die geplanten Schreibvorgänge zunächst in einer Warteschlange und signalisierten einen “Write Intent”. Erst wenn alle Write Intents repliziert waren, gab der Client einen Commit-Befehl. Die Transaktion schreibt den Commit nach einer erfolgreichen Umsetzung in ihren Transaktions-Record.

Das Modell brauchte in verteilten Umgebungen zwei Konsensrunden, um zu prüfen, ob a) alle Write Intents vollständig waren und b) alle Commits umgesetzt wurden. Das Zwei-Phasen-Modell sollte ein Chaos verhindern, falls der Koordinator der Transaktionen mitten im Prozess, also zwischen Intent und tatsächlichem Schreibprozess, abstürzte. Allerdings erzeugten die zwei Konsensrunden zu viel Wartezeit, insbesondere in Szenarios mit mehreren Rechenzentren.

Neuer Ansatz

Die akademische Forschung hat das Problem der Zwei-Phasen-Commits seit einiger Zeit analysiert und es gibt laut dem CockroachDB-Blogpost verschiedene Vorschläge, die Situation zu verbessern. Keiner davon betraf allerdings existierende Systeme wie CockroachDB, weshalb die Macher ihre eigene Lösung erarbeiteten. Geändert haben die Entwickler die Voraussetzung, unter der sie eine Transaktion als ausgeführt betrachten. Das war zuvor ein “COMMITED”-Status im Transaktions-Record.

Ein neuer Eintrag in die Transaktions-Records heißt hingegen “STAGING”. Er zeigt an, dass eine Transaktion alle Keys ermittelt hat, die es ändern möchte, ohne sie aber bereits geschrieben zu haben. Der Transaktionskoordinator sammelt die Write Intents in einer Warteschlange und schreibt dann die Keys zu den Schreibvorgängen als “STAGING”-Statements in die Transaktions-Records. Erst dann starten die eigentlichen Schreibvorgänge und melden parallel ihre Erfolge weiter.

In der STAGING-Phase ist also noch nicht klar, ob die Schreibvorgänge tatsächlich alle erfolgreich waren. Bemerkt eine Transaktion einen Konflikt mit einer zweiten Transaktion, wirft sie einen Blick in den Transaktions-Record, sieht den “STAGING”-Eintrag und startet in diesem Fall eine “Transaction Status Recovery Procedure”. Sie überprüft, ob auch sämtliche geplanten Schreibvorgänge mit “STAGING”-Status tatsächlich umgesetzt wurden. Gibt es Vermisste, markiert sie die Transaktion als “ABORTED”, andernfalls als “COMMITED”.

Notfallprotokoll

Das neue Konstrukt geht also von erfolgreichen Schreibvorgängen aus, kann im Konfliktfall aber nochmal nachsehen. Um auch diesen Overhead zu vermeiden, bestätigen die Transaktions-Koordinatoren erfolgreiche Commits asynchron und so schnell wie möglich. Zugleich senden die Koordinatoren Heartbeats an die Transaktionseinträge, um zu prüfen, welche Transaktionen noch im Gange sind.

Dank dieser Vorsichtsmaßnahmen sollen die Notfallprozeduren nur dann starten, wenn sie wirklich gebracht werden: Wenn der Transaktions-Koordinator ausfällt. Als Folge der Umbauten sollten mit der neuen Version 19.2 dank des Parallel-Commit-Protokolls Single- und Cross-Range-Transaktionen nun nahezu denselben Zeitaufwand benötigen. Weitere Neuerungen von CockroachDB 19.2 liefert die Release-Mitteilung.

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben