La version 7.0 de la base de données distribuée rqlite a été publiée. Elle utilise SQLite comme moteur de stockage et permet de structurer un cluster d'entrepÎts synchronisés. Parmi les caractéristiques de rqlite, on note la simplicité d'installation, de déploiement et d'entretien d'un entrepÎt distribué tolérant aux pannes, similaire à etcd et Consul, mais adoptant un modÚle relationnel de travail avec les données au lieu d'un format clé/valeur. Le code du projet est écrit en Go et est distribué sous licence MIT.
Pour maintenir tous les nĆuds en Ă©tat synchronisĂ©, l'algorithme de consensus Raft est utilisĂ©. Rqlite utilise la bibliothĂšque SQLite originale et le pilote go-sqlite3, sur lesquels s'exĂ©cute une couche traitant les requĂȘtes des clients, rĂ©alisant la rĂ©plication vers d'autres nĆuds et surveillant l'atteinte du consensus pour le choix du nĆud leader.
Les modifications de la base de donnĂ©es ne peuvent ĂȘtre apportĂ©es que par le nĆud dĂ©signĂ© comme leader, mais les connexions pour les opĂ©rations d'Ă©criture peuvent ĂȘtre envoyĂ©es Ă d'autres nĆuds du cluster, qui renverront l'adresse du leader pour rĂ©pĂ©ter la requĂȘte (la prochaine version promet d'ajouter un passage automatique Ă l'adresse du leader). L'accent est mis sur la tolĂ©rance aux pannes, c'est pourquoi la base de donnĂ©es ne se dĂ©veloppe que pour les opĂ©rations de lecture, tandis que les opĂ©rations d'Ă©criture constituent un goulet d'Ă©tranglement. Un cluster rqlite peut ĂȘtre lancĂ© Ă partir d'un seul nĆud, ce qui peut ĂȘtre utilisĂ© pour organiser l'accĂšs Ă SQLite via HTTP sans garantir 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 de la couche implĂ©mentant le protocole Raft, un journal de toutes les commandes SQLite entraĂźnant des modifications de la base de donnĂ©es est tenu. Ce journal est utilisĂ© lors de la rĂ©plication (rĂ©plication au niveau de la reproduction des requĂȘtes sur d'autres nĆuds), au lancement d'un nouveau nĆud ou pour la rĂ©cupĂ©ration aprĂšs une perte de connectivitĂ©. Pour rĂ©duire la taille du journal, une compression automatique est appliquĂ©e, qui se dĂ©clenche aprĂšs un certain nombre de modifications et conduit Ă la fixation d'un instantanĂ©, par rapport auquel un nouveau journal commence Ă ĂȘtre tenu (l'Ă©tat de la base en mĂ©moire est identique Ă l'instantanĂ© + le journal des modifications accumulĂ©es).
Caractéristiques de rqlite :
- Simplicité de déploiement du cluster, sans nécessiter d'installation séparée de SQLite.
- Possibilité d'obtenir rapidement un stockage SQL répliqué.
- PrĂȘt Ă ĂȘtre utilisĂ© dans des projets de production.
- DisponibilitĂ© d'une API HTTP(S) permettant de mettre Ă jour les donnĂ©es par lots et de dĂ©finir le nĆud principal du cluster. Une interface en ligne de commande et des bibliothĂšques clientes pour divers langages de programmation sont Ă©galement fournies.
- DisponibilitĂ© d'un service pour identifier d'autres nĆuds, permettant de crĂ©er des clusters de maniĂšre dynamique.
- Support du chiffrement des Ă©changes de donnĂ©es entre les nĆuds.
- Possibilité de configurer le niveau de vérification de l'actualité et de la cohérence des données lors de la lecture.
- PossibilitĂ© optionnelle de connecter des nĆuds en mode lecture seule, ne participant pas Ă la dĂ©termination du consensus et utilisĂ©s pour augmenter la scalabilitĂ© du cluster pour les opĂ©rations de lecture.
- Support d'une forme propre des transactions basĂ©e sur la fusion de commandes dans une seule requĂȘte (les transactions basĂ©es sur BEGIN, COMMIT, ROLLBACK, SAVEPOINT et RELEASE ne sont pas supportĂ©es).
- Support de la création de sauvegardes à chaud.
Dans cette nouvelle version :
- Ajout du support du clustering automatique rqlite utilisant un nouveau service d'identification des nĆuds, pouvant fonctionner sur des stockages distribuĂ©s 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 indiquant l'adresse commune du cluster Consul ou etcd (par exemple, « example.com:8500 »), et les nĆuds seront automatiquement groupĂ©s en cluster. Le nĆud principal met rĂ©guliĂšrement Ă jour dans le stockage Consul ou etcd son adresse, permettant de changer ensuite de leader sans reconfiguration des autres nĆuds, ainsi que d'ajouter de nouveaux nĆuds mĂȘme aprĂšs un changement de leader. Le support de l'ancien service d'identification des nĆuds (Discovery mode) fonctionnant sur AWS Lambda est interrompu.
- Dans l'interface CLI, il est maintenant possible d'indiquer plusieurs hĂŽtes â si le premier nĆud est inaccessible, l'appel se fera aux hĂŽtes suivants.
- Le code pour l'analyse des arguments de ligne de commande rqlited a été retravaillé.
- L'utilisation du paquet obsolÚte protobuf a été abandonnée.
- Le stockage BoltDB, utilisĂ© dans la mise en Ćuvre du protocole Raft, a Ă©tĂ© remplacĂ© par bbolt, un fork du projet etcd.
Source : opennet.ru
