Die Veröffentlichung der verteilten Datenbank rqlite 7.0 fand statt, die SQLite als Speicher-Engine nutzt und es ermöglicht, ein Cluster von synchronisierten Speichern zu betreiben. Zu den besonderen Merkmalen von rqlite gehören die einfache Installation, Bereitstellung und Wartung eines verteilten, fehlertoleranten Speichers, der ähnlich wie etcd und Consul funktioniert, jedoch ein relationales Modell für die Datenverarbeitung anstelle des Schlüssel/Wert-Formats verwendet. Der Projektcode 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 Konsensalgorithmus Raft verwendet. Rqlite nutzt die originale SQLite-Bibliothek und den Treiber go-sqlite3, über die eine Schicht läuft, die die Kundenanfragen verarbeitet, die Replikation auf andere Knoten durchführt und den Konsens beim Auswählen des führenden Knotens überwacht.
Datenbankänderungen können nur von dem als führend ausgewählten Knoten vorgenommen werden. Verbindungen zu Schreiboperationen können jedoch auch zu anderen Knoten im Cluster geleitet werden, die die Adresse des Leaders zurückgeben, um die Anfrage zu wiederholen (in der nächsten Version wird versprochen, die automatische Weiterleitung an den Leader hinzuzufügen). Der Schwerpunkt liegt auf der Ausfallsicherheit, weshalb das DBMS nur nach Leseoperationen skalierbar ist, während Schreiboperationen einen Engpass darstellen. Es ist möglich, einen rqlite-Cluster von einem einzelnen Knoten aus zu starten. Diese Lösung kann verwendet werden, um den Zugriff auf SQLite über HTTP zu organisieren, ohne die Ausfallsicherheit bereitzustellen.
SQLite-Daten werden nicht in einer Datei, sondern im Arbeitsspeicher an jedem Knoten gespeichert. Auf der Ebene des Raft-Protokolls wird ein Protokoll aller SQLite-Befehle geführt, die zu Änderungen in der Datenbank führen. Dieses Protokoll wird bei der Replikation (Replikation durch die Wiedergabe von Anfragen auf anderen Knoten), beim Hochfahren neuer Knoten oder zur Wiederherstellung nach einem Verbindungsverlust verwendet. Um die Größe des Protokolls zu reduzieren, wird eine automatische Komprimierung durchgeführt, die nach einer festgelegten Anzahl von Änderungen gestartet wird und einen Snapshot erstellt, ab dem ein neues Protokoll geführt wird (der Zustand der Datenbank im Arbeitsspeicher entspricht dem Snapshot + dem angesammelten Änderungsprotokoll).
Eigenschaften von rqlite:
- Einfache Bereitstellung von Clustern, ohne dass eine separate Installation von SQLite erforderlich ist.
- Möglichkeit, schnell ein repliziertes SQL-Speicher zu erhalten.
- Bereit für den Einsatz in Produktionsprojekten (production-grade).
- Verfügbarkeit einer HTTP(S)-API, die das Aktualisieren von Daten im Batch-Modus ermöglicht und den führenden Knoten im Cluster definiert. Außerdem sind eine Kommandozeilenoberfläche und Client-Bibliotheken für verschiedene Programmiersprachen verfügbar.
- Verfügbarkeit eines Dienstes zur Identifizierung 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üfungsniveaus für Aktualität und Konsistenz der Daten beim Lesen.
- Optionale Möglichkeit, Knoten im Nur-Lese-Modus zu verbinden, die nicht am Konsensprozess teilnehmen und zur Skalierung des Clusters bei Lesevorgängen verwendet werden.
- Unterstützung einer benutzerdefinierten 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:
- Automatisches Clustering von rqlite mit einem neuen Knotenbestimmungsdienst, der auf verteilten Speichern wie Consul und etcd arbeiten kann, wurde hinzugefügt. Der Dienst ermöglicht rqlite-Knoten, sich automatisch zu finden – der Administrator muss lediglich mehrere Knoten auf verschiedenen Servern, indem Sie die allgemeine Adresse des Consul-Clusters oder etcd angeben (z.B. „example.com:8500“), werden die Knoten automatisch zu einem Cluster verbunden. Der führende Knoten aktualisiert regelmäßig seine Adresse im Consul- oder etcd-Speicher, was eine nachfolgende Änderung des Führers ohne die Notwendigkeit einer Neukonfiguration der anderen Knoten ermöglicht und zudem neue Knoten auch nach einer Änderung des Führers hinzufügt. Der Support für den alten Dienst zur Knotenbestimmung (Discovery-Modus), der auf AWS Lambda basiert, wurde eingestellt.
- Im CLI-Interface ist es erlaubt, mehrere Hosts gleichzeitig anzugeben — falls der erste Knoten nicht verfügbar ist, wird auf die nächsten Hosts zugegriffen.
- Der Code zum Parsen der Kommandozeilenargumente von rqlited wurde überarbeitet.
- Die Verwendung des veralteten Protobuf-Pakets wurde eingestellt.
- Das in der Raft-Protokollimplementierung verwendete BoltDB-Speicher wurde durch bbolt ersetzt, einem Fork des etcd-Projekts.
Quelle: opennet.ru
