Veröffentlichung von rqlite 7.0, einer verteilten, fehlertoleranten Datenbank auf Basis von SQLite.

Die verteilte Datenbank rqlite 7.0 wurde veröffentlicht, die SQLite als Speichermotor verwendet und die Organisation eines Clusters aus untereinander synchronisierten Speichern ermöglicht. Zu den Eigenschaften von rqlite zählen die Einfachheit der Installation, Bereitstellung und Wartung eines verteilten fehlertoleranten Speichers, ähnlich wie bei etcd und Consul, jedoch mit einem relationalen Datenmodell anstelle des Key/Value-Formats. Der Projektcode ist in Go geschrieben und wird unter der MIT-Lizenz verbreitet.

Zur Aufrechterhaltung aller Knoten in synchronisiertem Zustand wird der Konsensalgorithmus Raft verwendet. Rqlite nutzt die originale SQLite-Bibliothek und den Treiber go-sqlite3, auf denen eine Schnittstelle läuft, die die Clientanfragen verarbeitet, die Replikation auf andere Knoten durchführt und den Konsens über die Wahl des führenden Knotens verfolgt.

Änderungen an der Datenbank können nur von dem Knoten vorgenommen werden, der als führend ausgewählt wurde, jedoch können Verbindungen für Schreiboperationen auch an andere Knoten im Cluster gerichtet werden, die die Adresse des Leaders zur Wiederholung der Anfrage zurückgeben. In der nächsten Version wird versprochen, die automatische Weiterleitung von Anfragen an den Leader hinzuzufügen. Der Hauptfokus liegt auf der Fehlertoleranz, daher skaliert die Datenbank nur bei Leseoperationen, während Schreiboperationen ein Engpass darstellen. Es ist möglich, ein rqlite-Cluster mit einem einzigen Knoten zu starten, und dieses Setup kann verwendet werden, um auf SQLite über HTTP zuzugreifen, ohne Fehlertoleranz bereitzustellen.

Die SQLite-Daten werden auf jedem Knoten nicht in einer Datei, sondern im Arbeitsspeicher gespeichert. Auf der Ebene des Raft-Protokolls wird ein Protokoll aller SQLite-Befehle geführt, die zu Änderungen der Datenbank führen. Dieses Protokoll wird bei der Replikation (Replikation auf der Ebene der Wiederholung von Abfragen auf anderen Knoten), beim Start eines neuen Knotens oder zur Wiederherstellung nach einem Verbindungsverlust verwendet. Zur Reduzierung der Protokollgröße wird eine automatische Kompression angewendet, die nach einer bestimmten Anzahl von Änderungen ausgelöst wird und einen Snapshot erstellt, auf dessen Grundlage ein neues Protokoll geführt wird (der Zustand der Datenbank im Speicher entspricht dem Snapshot plus dem angefallenen Änderungsprotokoll).

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 Arbeitsprojekten (Production-Grade).
  • Vorhandensein einer HTTP(S) API, die das Aktualisieren von Daten im Batch-Modus ermöglicht und den führenden Knoten des Clusters bestimmt. Es stehen auch eine Kommandozeilenoberfläche und Client-Bibliotheken für verschiedene Programmiersprachen zur Verfügung.
  • 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.

In der neuen Version:

  • Unterstützung für automatisches Clustering von rqlite mit dem neuen Dienst zur Bestimmung von Knoten, der auf verteilten Speichern wie Consul und etcd arbeiten kann, wurde hinzugefügt. Der Dienst ermöglicht es rqlite-Knoten, sich automatisch zu finden – der Administrator muss nur einige Knoten auf verschiedenen Servern, angeben einer gemeinsamen Adresse des Consul- oder etcd-Clusters (zum Beispiel „example.com:8500“), und die Knoten werden automatisch zu einem Cluster verbunden. Der führende Knoten aktualisiert regelmäßig die Informationen über seine Adresse im Consul- oder etcd-Speicher, was es ermöglicht, den Führenden später zu ändern, ohne dass eine Neukonfiguration der anderen Knoten erforderlich ist, und neue Knoten hinzuzufügen, selbst nach einer Änderung des Führenden. Der alte Dienst zur Bestimmung von Knoten (Discovery-Modus), der auf AWS Lambda basierte, wurde eingestellt.
  • Im CLI-Interface ist es erlaubt, mehrere Hosts gleichzeitig anzugeben – wenn der erste Knoten nicht verfügbar ist, wird auf die nächsten Hosts zugegriffen.
  • Der Code zur Analyse der Kommandozeilenargumente von rqlited wurde überarbeitet.
  • Die Verwendung des veralteten Protokollpakets wurde eingestellt.
  • Der BoltDB-Speicher, der in der Implementierung des Raft-Protokolls verwendet wurde, wurde durch bbolt ersetzt, einen Fork des Projekts etcd.

Quelle: opennet.ru

60GB SSD 8Gb DDR4