Sortie de rqlite 7.0, un SGBD distribué tolérant aux pannes basé sur SQLite

La sortie du SGBD distribué rqlite 7.0 a eu lieu, qui utilise SQLite comme moteur de stockage et permet d'organiser le travail d'un cluster à partir de stockages synchronisés les uns avec les autres. L'une des fonctionnalités de rqlite est la facilité d'installation, de déploiement et de maintenance d'un stockage distribué tolérant aux pannes, quelque peu similaire à etcd et Consul, mais utilisant un modèle de données relationnel au lieu d'un format clé/valeur. Le code du projet est écrit en Go et distribué sous licence MIT.

Pour maintenir tous les nœuds dans un état synchronisé, l'algorithme de consensus Raft est utilisé. Rqlite utilise la bibliothèque SQLite d'origine et le pilote go-sqlite3, au-dessus desquels une couche est lancée qui traite les demandes des clients, effectue la réplication vers d'autres nœuds et surveille l'obtention d'un consensus sur le choix d'un nœud leader.

Les modifications apportées à la base de données ne peuvent être apportées que par le nœud sélectionné comme leader, mais les connexions avec des opérations d'écriture peuvent également être envoyées à d'autres nœuds du cluster, qui renverront l'adresse du leader pour répéter la demande (dans la version suivante, ils promesse d'ajouter la transmission automatique des demandes au leader). L'accent principal est mis sur la tolérance aux pannes, de sorte que le SGBD évolue uniquement avec les opérations de lecture, et les opérations d'écriture constituent le goulot d'étranglement. Il est possible d'exécuter un cluster rqlite à partir d'un seul nœud et cette solution peut être utilisée pour fournir un accès à SQLite via HTTP sans fournir de tolérance aux pannes.

Les données SQLite sur chaque nœud ne sont pas stockées dans un fichier, mais en mémoire. Au niveau des couches avec la mise en œuvre du protocole Raft, un journal de toutes les commandes SQLite conduisant à des modifications de la base de données est conservé. Ce log est utilisé lors de la réplication (réplication au niveau de la reproduction des requêtes sur d'autres nœuds), lors du démarrage d'un nouveau nœud, ou pour récupérer d'une perte de connectivité. Pour réduire la taille du journal, un emballage automatique est utilisé, qui démarre après un nombre spécifié de modifications et conduit à la fixation d'un instantané, par rapport auquel un nouveau journal commence à être conservé (l'état de la base de données en mémoire est identique à l'instantané + le journal des modifications accumulées).

Caractéristiques de rqlite :

  • Déploiement facile d'un cluster, sans avoir besoin d'une installation SQLite distincte.
  • Possibilité d'obtenir rapidement un stockage SQL répliqué.
  • Prêt à être utilisé dans des projets de production (qualité production).
  • La présence d'une API HTTP(S) qui permet de mettre à jour les données en mode batch et de déterminer le nœud leader du cluster. Une interface de ligne de commande et des bibliothèques clientes pour divers langages de programmation sont également fournies.
  • Disponibilité d'un service d'identification d'autres nœuds, permettant de créer des clusters de manière dynamique.
  • Prise en charge du cryptage des échanges de données entre nœuds.
  • Possibilité de configurer le niveau de vérification de la pertinence et de la cohérence des données lors de la lecture.
  • Possibilité facultative de connecter des nœuds en mode lecture seule, qui ne participent pas à la détermination du consensus et sont utilisés pour augmenter l'évolutivité du cluster pour les opérations de lecture.
  • Prise en charge de votre propre forme de transactions basée sur la combinaison de commandes en une seule requête (les transactions basées sur BEGIN, COMMIT, ROLLBACK, SAVEPOINT et RELEASE ne sont pas prises en charge).
  • Prise en charge de la création de sauvegardes à chaud.

Dans la nouvelle version :

  • Ajout de la prise en charge du clustering rqlite automatique à l'aide d'un nouveau service de détection de nœuds pouvant fonctionner sur la base du stockage distribué Consul et etcd. Le service permet aux nœuds rqlite de se trouver automatiquement - l'administrateur n'a qu'à lancer plusieurs nœuds sur différents serveurs, en spécifiant l'adresse commune du cluster Consul ou etcd (par exemple, « exemple.com:8500 »), et les nœuds seront automatiquement regroupés en un cluster. Le nœud principal met périodiquement à jour les informations sur son adresse dans le stockage Consul ou etcd, ce qui vous permet de changer de leader par la suite sans avoir besoin de reconfigurer d'autres nœuds, ainsi que d'ajouter de nouveaux nœuds même après avoir changé de leader. L'ancien service en mode découverte exécuté sur AWS Lambda a été interrompu.
  • L'interface CLI permet de spécifier plusieurs hôtes à la fois - si le premier nœud n'est pas disponible, les hôtes suivants seront contactés.
  • Le code d'analyse des arguments de ligne de commande rqlited a été retravaillé.
  • Le package protobuf, obsolète, a été abandonné.
  • Le stockage BoltDB utilisé dans l'implémentation du protocole Raft a été remplacé par bbolt, un fork du projet etcd.

Source: opennet.ru

Ajouter un commentaire