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

Es wird die Veröffentlichung des verteilten DBMS rqlite 6.0 vorgestellt, das SQLite als Speicher-Engine verwendet und es Ihnen ermöglicht, die Arbeit eines Clusters synchronisierter Speicher 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 standardmäßigen go-sqlite3-Treiber, auf dem eine Schicht 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 in 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 bei der Wiederherstellung nach einem Verbindungsverlust verwendet. Um die Größe des Protokolls zu reduzieren, wird die automatische Paketierung verwendet, die nach einer bestimmten Anzahl von Änderungen startet und dazu führt, dass ein Snapshot auf der Festplatte fixiert wird, in Bezug auf den ein neues Protokoll gespeichert 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 Arbeitsprojekten (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. Es bietet außerdem eine Befehlszeilenschnittstelle und die Möglichkeit, verschiedene für SQLite erstellte Client-Bibliotheken zu verwenden.
  • 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.

Die neue Version führt bedeutende Architekturänderungen ein, die darauf abzielen, die Cluster-Zuverlässigkeit zu erhöhen, indem der Prozess der Weiterleitung von Lese- und Schreibanforderungen an die richtigen Cluster-Knoten verbessert wird. rqlite-Knoten können jetzt mehrere logische Verbindungen untereinander multiplexen, indem sie TCP-Verbindungen verwenden, die zwischen Knoten durch das Raft-Protokoll hergestellt werden. Wenn eine Anfrage die Autorität eines Leiters erfordert, aber an einen sekundären Knoten gesendet wird, kann der sekundäre Knoten die Adresse des Leiters ermitteln und sie an den Client weiterleiten, ohne Raft-Konsensberechnungen durchzuführen.

Durch die Änderung entfällt auch die Notwendigkeit einer separaten Metadaten-Synchronisierungskomponente und die separate Verarbeitung von Raft-Status und Metadaten. Sekundärknoten senden jetzt nur noch bei Bedarf Anfragen an den Leitknoten, wenn sie die Adresse des Leitknotens herausfinden müssen. Die API bietet die Möglichkeit, Informationen über den Status anderer Knoten im Cluster abzurufen. Der Befehl „.sysdump“ wurde zur Befehlszeilenschnittstelle hinzugefügt.

Source: opennet.ru

Kommentar hinzufügen