Release van rqlite 7.0, een gedistribueerd fouttolerant DBMS gebaseerd op SQLite

De gedistribueerde DBMS rqlite 7.0 is uitgebracht. Deze gebruikt SQLite als storage engine en stelt u in staat om het werk van een cluster van gesynchroniseerde storages te organiseren. Een van de kenmerken van rqlite is de eenvoudige installatie, implementatie en het onderhoud van een gedistribueerde fouttolerante storage, vergelijkbaar met etcd en Consul, maar met een relationeel model voor het werken met data in plaats van een sleutel/waarde-indeling. De projectcode is geschreven in Go en wordt gedistribueerd onder de MIT-licentie.

Om alle knooppunten synchroon te houden, wordt het Raft-consensusalgoritme gebruikt. Rqlite maakt gebruik van de originele SQLite-bibliotheek en de go-sqlite3-driver. Daarbovenop wordt een laag gestart die clientverzoeken verwerkt, replicatie naar andere knooppunten uitvoert en het bereiken van consensus over de keuze van het leidende knooppunt bewaakt.

Wijzigingen in de database kunnen alleen worden aangebracht door het knooppunt dat als leider is geselecteerd, maar verbindingen met schrijfbewerkingen kunnen worden doorgestuurd naar andere knooppunten in het cluster. Deze knooppunten retourneren het adres van het leiderknooppunt om de aanvraag te herhalen (de volgende versie belooft automatisch doorsturen van aanvragen naar het leiderknooppunt). De nadruk ligt vooral op fouttolerantie, waardoor het DBMS alleen wordt geschaald door leesbewerkingen, en schrijfbewerkingen een knelpunt vormen. Het is mogelijk om een ​​rqlite-cluster vanaf één knooppunt te draaien. Een dergelijke oplossing kan worden gebruikt om toegang tot SQLite via HTTP te organiseren zonder fouttolerantie te bieden.

SQLite-gegevens op elk knooppunt worden in het geheugen opgeslagen in plaats van in een bestand. Op het niveau van de laag die het Raft-protocol implementeert, wordt een logbestand bijgehouden van alle SQLite-opdrachten die de database wijzigen. Dit logbestand wordt gebruikt tijdens replicatie (replicatie op het niveau van het reproduceren van query's op andere knooppunten), bij het starten van een nieuw knooppunt of voor herstel na verlies van connectiviteit. Om de logbestandgrootte te verkleinen, wordt automatisch inpakken gebruikt. Dit wordt gestart na een bepaald aantal wijzigingen en leidt tot het vastleggen van een momentopname, ten opzichte waarvan een nieuw logbestand wordt gestart (de status van de database in het geheugen is identiek aan de momentopname + het verzamelde wijzigingslogbestand).

Kenmerken van rqlite:

  • Eenvoudig een cluster te implementeren, zonder dat er een aparte SQLite-installatie nodig is.
  • Mogelijkheid om snel gerepliceerde SQL-opslag te verkrijgen.
  • Klaar voor gebruik in productieprojecten (productiekwaliteit).
  • Beschikbaarheid van HTTP(S) API, waarmee gegevens batchgewijs kunnen worden bijgewerkt en het leidende knooppunt van het cluster kan worden bepaald. Ook zijn een opdrachtregelinterface en clientbibliotheken voor diverse programmeertalen beschikbaar.
  • Beschikbaarheid van een service voor het identificeren van andere knooppunten, waardoor u dynamisch clusters kunt maken.
  • Ondersteuning voor het coderen van gegevensuitwisseling tussen knooppunten.
  • Mogelijkheid om het niveau van controle van de relevantie en consistentie van gegevens tijdens het lezen te configureren.
  • Optionele mogelijkheid om knooppunten in alleen-lezen-modus te verbinden, die niet deelnemen aan het bepalen van consensus en worden gebruikt om de schaalbaarheid van het cluster voor leesbewerkingen te vergroten.
  • Ondersteuning voor uw eigen transactievorm op basis van het combineren van opdrachten in één verzoek (transacties op basis van BEGIN, COMMIT, ROLLBACK, SAVEPOINT en RELEASE worden niet ondersteund).
  • Ondersteuning voor het maken van actieve back-ups.

In de nieuwe uitgave:

  • Er is ondersteuning toegevoegd voor automatische rqlite-clustering met behulp van een nieuwe node-ontdekkingsservice die kan draaien op gedistribueerde opslag zoals Consul en etcd. Deze service zorgt ervoor dat rqlite-nodes elkaar automatisch kunnen vinden; de beheerder hoeft alleen maar meerdere nodes op verschillende servers te starten. serversDoor het gedeelde adres van het Consul- of etcd-cluster op te geven (bijvoorbeeld "example.com:8500"), worden de knooppunten automatisch aan het cluster toegevoegd. Het leidende knooppunt werkt periodiek zijn adresgegevens bij in de Consul- of etcd-opslag, waardoor u later het leidende knooppunt kunt wijzigen zonder de andere knooppunten opnieuw te hoeven configureren, en ook nieuwe knooppunten kunt toevoegen, zelfs nadat het leidende knooppunt is gewijzigd. De ondersteuning voor de oude knooppuntdetectieservice (Discovery-modus), mogelijk gemaakt door AWS Lambda, is stopgezet.
  • Met de CLI-interface kunt u meerdere hosts tegelijk opgeven. Als het eerste knooppunt niet beschikbaar is, worden de volgende hosts gecontacteerd.
  • De code voor het parseren van rqlited opdrachtregelargumenten is herzien.
  • Het verouderde protobuf-pakket is verouderd.
  • De BoltDB-opslag die in de implementatie van het Raft-protocol wordt gebruikt, is vervangen door bbolt, een fork van het etcd-project.

Bron: opennet.ru

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster