Veröffentlichung von rqlite 7.0, einem verteilten fehlertoleranten DBMS auf Basis von SQLite

Es erfolgte die Veröffentlichung des verteilten DBMS rqlite 7.0, das SQLite als Speicher-Engine verwendet und es Ihnen ermöglicht, die Arbeit eines Clusters aus miteinander synchronisierten Speichern zu organisieren. Eines der Merkmale von rqlite ist die einfache Installation, Bereitstellung und Wartung eines verteilten fehlertoleranten Speichers, der in gewisser Weise etcd und Consul ähnelt, jedoch ein relationales Datenmodell anstelle eines Schlüssel/Wert-Formats verwendet. Der Projektcode ist in Go geschrieben und wird unter der MIT-Lizenz vertrieben.

Um alle Knoten in einem synchronisierten Zustand zu halten, wird der Raft-Konsensalgorithmus verwendet. Rqlite verwendet die ursprüngliche SQLite-Bibliothek und den go-sqlite3-Treiber, auf dem eine Ebene gestartet wird, die Client-Anfragen verarbeitet, die Replikation auf andere Knoten durchführt und das Erreichen eines Konsenses über die Wahl eines führenden Knotens überwacht.

Änderungen an der Datenbank können nur von dem Knoten vorgenommen werden, der als Anführer ausgewählt wurde. Verbindungen mit Schreibvorgängen können jedoch auch an andere Knoten im Cluster gesendet werden, die die Adresse des Anführers zurückgeben, um die Anfrage zu wiederholen (in der nächsten Version sie). versprechen, eine automatische Weiterleitung von Anfragen an den Leiter hinzuzufügen). Der Schwerpunkt liegt auf der Fehlertoleranz, sodass das DBMS nur mit Lesevorgängen skaliert und Schreibvorgänge den Flaschenhals darstellen. Es ist möglich, einen rqlite-Cluster von einem einzelnen Knoten aus auszuführen, und diese Lösung kann verwendet werden, um Zugriff auf SQLite über HTTP bereitzustellen, ohne Fehlertoleranz bereitzustellen.

Die SQLite-Daten auf jedem Knoten werden nicht in einer Datei, sondern im Speicher gespeichert. Auf Schichtebene wird bei der Implementierung des Raft-Protokolls ein Protokoll aller SQLite-Befehle geführt, die zu Änderungen an der Datenbank führen. Dieses Protokoll wird während der Replikation (Replikation auf der Ebene der Reproduktion von Anforderungen auf anderen Knoten), beim Starten eines neuen Knotens oder zur Wiederherstellung nach einem Verbindungsverlust verwendet. Um die Größe des Protokolls zu reduzieren, wird das automatische Packen verwendet, das nach einer bestimmten Anzahl von Änderungen beginnt und zur Fixierung eines Snapshots führt, in Bezug auf den ein neues Protokoll verwaltet wird (der Zustand der Datenbank im Speicher ist). identisch mit dem Snapshot + dem akkumulierten Änderungsprotokoll).

Funktionen von rqlite:

  • Einfache Bereitstellung eines Clusters, ohne dass eine separate SQLite-Installation erforderlich ist.
  • Möglichkeit, schnell replizierten SQL-Speicher zu erhalten.
  • Bereit für den Einsatz in Produktionsprojekten (Produktionsqualität).
  • Das Vorhandensein einer HTTP(S)-API, die es Ihnen ermöglicht, Daten im Batch-Modus zu aktualisieren und den führenden Knoten des Clusters zu bestimmen. Außerdem werden eine Kommandozeilenschnittstelle und Client-Bibliotheken für verschiedene Programmiersprachen bereitgestellt.
  • Verfügbarkeit eines Dienstes zur Identifizierung anderer Knoten, der Ihnen die dynamische Erstellung von Clustern ermöglicht.
  • Unterstützung für den verschlüsselten Datenaustausch zwischen Knoten.
  • Möglichkeit, den Grad der Überprüfung der Relevanz und Konsistenz von Daten beim Lesen zu konfigurieren.
  • Optionale Möglichkeit, Knoten im schreibgeschützten Modus zu verbinden, die nicht an der Konsensfindung beteiligt sind und dazu dienen, die Skalierbarkeit des Clusters für Lesevorgänge zu erhöhen.
  • Unterstützung Ihrer eigenen Transaktionsform basierend auf der Kombination von Befehlen in einer Anfrage (Transaktionen basierend auf 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 rqlite-Clustering mit einem neuen Knotenerkennungsdienst hinzugefügt, der auf der Basis von verteiltem Consul- und etcd-Speicher arbeiten kann. Der Dienst ermöglicht es rqlite-Knoten, einander automatisch zu finden – der Administrator muss lediglich mehrere Knoten auf verschiedenen Servern starten und dabei die gemeinsame Consul- oder etcd-Cluster-Adresse angeben (z. B. „example.com:8500“), und die Knoten werden automatisch gefunden zu einem Cluster zusammengefasst. Der führende Knoten aktualisiert regelmäßig Informationen zu seiner Adresse im Consul- oder etcd-Speicher, sodass Sie den Anführer nachträglich ändern können, ohne andere Knoten neu konfigurieren zu müssen, und auch nach dem Wechsel des Anführers neue Knoten hinzufügen können. Der auf AWS Lambda ausgeführte Legacy-Discovery-Modus-Dienst wurde eingestellt.
  • Die CLI-Schnittstelle ermöglicht die gleichzeitige Angabe mehrerer Hosts – wenn der erste Knoten nicht verfügbar ist, werden die nächsten Hosts kontaktiert.
  • Der Code zum Parsen von rqlited-Befehlszeilenargumenten wurde überarbeitet.
  • Das veraltete Protobuf-Paket wurde eingestellt.
  • Der bei der Implementierung des Raft-Protokolls verwendete BoltDB-Speicher wurde durch bbolt ersetzt, einen Fork des etcd-Projekts.

Source: opennet.ru

Kommentar hinzufügen