Veröffentlichung von rqlite 6.0, einer verteilten ausfallsicheren Datenbank auf Basis von SQLite.

Die Veröffentlichung der verteilten Datenbank-Engine rqlite 6.0 wurde vorgestellt, die SQLite als Speicher-Engine nutzt und es ermöglicht, einen Cluster synchronisierter Speicher zu organisieren. Zu den Besonderheiten von rqlite zählen die einfache Installation, Bereitstellung und Wartung eines verteilten ausfallsicheren Speichers, der etwas Ähnliches wie etcd und Consul ist, jedoch das relationale Datenmodell anstelle des Schlüssel/Wert-Formats verwendet. Der Code des Projekts ist in der Programmiersprache Go geschrieben und wird unter der MIT-Lizenz veröffentlicht.

Um alle Knoten in einem synchronisierten Zustand zu halten, wird der Raft-Konsensalgorithmus verwendet. Rqlite nutzt die originale SQLite-Bibliothek und den standardmäßigen Go-SQLite3-Treiber, über den eine Schicht betrieben wird, die die Anfragen der Clients verarbeitet, die Replikation auf andere Knoten durchführt und den Konsens zur Auswahl des führenden Knotens überwacht.

Änderungen in der Datenbank können nur von dem Knoten vorgenommen werden, der als führend ausgewählt wurde. Verbindungen für Schreiboperationen können jedoch auch an andere Knoten im Cluster gerichtet werden, die die Adresse des Leiters zur Wiederholung der Anfrage zurückgeben (in der nächsten Version wird versprochen, eine automatische Weiterleitung zur Leitung einzuführen). Der Hauptfokus liegt auf der Ausfallsicherheit, weshalb die Datenbank nur für Lesevorgänge skaliert, während Schreiboperationen der Engpass sind. Es ist möglich, einen rqlite-Cluster aus einem einzelnen Knoten zu betreiben, und dieses Setup kann verwendet werden, um HTTP-Zugriff auf SQLite bereitzustellen, ohne Ausfallsicherheit zu gewährleisten.

Die SQLite-Daten werden auf jedem Knoten nicht in einer Datei, sondern im Speicher gespeichert. Auf der Ebene der Raft-Protokollimplementierung wird ein Log aller SQLite-Befehle geführt, die Änderungen an der Datenbank bewirken. Dieses Log wird bei der Replikation (Replikation auf der Ebene der Anfrage-Wiedergabe auf anderen Knoten), beim Start eines neuen Knotens oder bei der Wiederherstellung nach einem Verbindungsabriss verwendet. Zur Reduzierung der Log-Größe wird eine automatische Komprimierung eingesetzt, die nach einer festgelegten Anzahl von Änderungen ausgeführt wird und dazu führt, dass ein Snapshot auf der Festplatte festgeschrieben wird, auf dessen Grundlage ein neues Log geführt wird (der Zustand der Datenbank im Speicher entspricht dem Snapshot plus dem angesammelten Änderungslog).

Merkmale von rqlite:

  • Einfache Bereitstellung des Clusters, ohne dass eine separate Installation von SQLite erforderlich ist.
  • Die Möglichkeit, schnell ein repliziertes SQL-Speicher zu erhalten.
  • Bereit für den Einsatz in Produktionsprojekten (Production-grade).
  • Vorhandensein einer HTTP(S) API, die es ermöglicht, Daten im Batch-Modus zu aktualisieren und den führenden Knoten des Clusters zu bestimmen. Es wird auch eine Befehlszeilenschnittstelle bereitgestellt und die Möglichkeit angeboten, verschiedene Client-Bibliotheken, die für SQLite erstellt wurden, zu nutzen.
  • Vorhandensein eines Dienstes zur Bestimmung anderer Knoten, der es ermöglicht, Cluster dynamisch zu erstellen.
  • Unterstützung der Verschlüsselung des Datenaustauschs zwischen Knoten.
  • Möglichkeit zur Anpassung des Prüfniveaus der Relevanz und Konsistenz von Daten beim Lesen.
  • Optionale Möglichkeit, Knoten im Nur-Lese-Modus anzuschließen, die nicht an der Bestimmung des Konsenses teilnehmen und zur Skalierung des Clusters für Lesevorgänge verwendet werden.
  • Unterstützung einer eigenen Form von Transaktionen auf Basis der Zusammenführung von Befehlen in einer Anfrage (Transaktionen auf Basis von BEGIN, COMMIT, ROLLBACK, SAVEPOINT und RELEASE werden nicht unterstützt).
  • Unterstützung für die Erstellung von Hot-Backups.

Die neue Version enthält erhebliche architektonische Änderungen, die darauf abzielen, die Zuverlässigkeit des Clusters durch Verbesserung des Prozesses der Anfragenweiterleitung an die korrekten Knoten des Clusters zu erhöhen. Rqlite-Knoten können jetzt mehrere logische Verbindungen untereinander multiplexieren, indem sie TCP-Verbindungen nutzen, die gemäß dem Raft-Protokoll zwischen den Knoten hergestellt wurden. Wenn eine Anfrage die Berechtigungen des führenden Knotens erfordert, aber an einen sekundären Knoten gesendet wird, kann der sekundäre Knoten die Adresse des Führenden bestimmen und sie an den Client weitergeben, ohne den Konsensdurch rechen nach Raft-Protokoll durchführen zu müssen.

Die Änderung hat es auch ermöglicht, die separate Komponente zur Synchronisierung von Metadaten zu beseitigen und die separate Verarbeitung des Raft-Zustands und der Metadaten wegzulassen. Sekundäre Knoten leiten jetzt Anfragen nur nach Bedarf an den führenden Knoten weiter, wenn die Adresse des führenden Knotens ermittelt werden muss. In der API gibt es die Möglichkeit, Informationen über den Zustand anderer Knoten im Cluster abzurufen. Im Befehlszeileninterfac wurde der Befehl „.sysdump“ hinzugefügt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4