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

De release van de gedistribueerde DBMS rqlite 7.0 vond plaats, die SQLite als opslagengine gebruikt en waarmee u het werk van een cluster kunt organiseren vanuit met elkaar gesynchroniseerde opslagplaatsen. Eén van de kenmerken van rqlite is het gemak van installatie, implementatie en onderhoud van een gedistribueerde fouttolerante opslag, enigszins vergelijkbaar met etcd en Consul, maar met behulp van een relationeel datamodel in plaats van een sleutel/waarde-formaat. De projectcode is geschreven in Go en gedistribueerd onder de MIT-licentie.

Om alle knooppunten in een gesynchroniseerde toestand te houden, wordt het Raft-consensusalgoritme gebruikt. Rqlite maakt gebruik van de originele SQLite-bibliotheek en de go-sqlite3-driver, waarbovenop een laag wordt gelanceerd die klantverzoeken verwerkt, replicatie naar andere knooppunten uitvoert en het bereiken van consensus over de keuze van een leidend knooppunt bewaakt.

Wijzigingen in de database kunnen alleen worden aangebracht door het knooppunt dat als leider is geselecteerd, maar verbindingen met schrijfbewerkingen kunnen ook naar andere knooppunten in het cluster worden verzonden, die het adres van de leider retourneren om het verzoek te herhalen (in de volgende versie zullen ze beloven om automatisch doorsturen van verzoeken naar de leider toe te voegen). De nadruk ligt vooral op fouttolerantie, dus het DBMS schaalt alleen met leesbewerkingen, en schrijfbewerkingen vormen het knelpunt. Het is mogelijk om een ​​rqlite-cluster vanaf één enkel knooppunt te laten draaien en deze oplossing kan worden gebruikt om toegang tot SQLite via HTTP te bieden zonder fouttolerantie te bieden.

De SQLite-gegevens op elk knooppunt worden niet in een bestand opgeslagen, maar in het geheugen. Op laagniveau wordt bij de implementatie van het Raft-protocol een log bijgehouden van alle SQLite-opdrachten die tot wijzigingen in de database leiden. Dit logboek wordt gebruikt tijdens replicatie (replicatie op het niveau van het reproduceren van verzoeken op andere knooppunten), bij het starten van een nieuw knooppunt of om te herstellen van een verlies aan connectiviteit. Om de grootte van het logboek te verkleinen, wordt automatisch inpakken gebruikt, dat begint na een bepaald aantal wijzigingen en leidt tot de fixatie van een momentopname, in relatie waarmee een nieuw logboek wordt bijgehouden (de status van de database in het geheugen is identiek aan de momentopname + het verzamelde wijzigingslogboek).

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).
  • De aanwezigheid van een HTTP(S) API waarmee u gegevens in batchmodus kunt bijwerken en het leidende knooppunt van het cluster kunt bepalen. Er zijn ook een opdrachtregelinterface en clientbibliotheken voor verschillende programmeertalen aanwezig.
  • 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:

  • Ondersteuning toegevoegd voor automatische rqlite-clustering met behulp van een nieuwe knooppuntdetectieservice die kan werken op basis van Consul en etcd gedistribueerde opslag. Met de service kunnen rqlite-knooppunten elkaar automatisch vinden - de beheerder hoeft alleen maar meerdere knooppunten op verschillende servers te starten, waarbij het gemeenschappelijke Consul- of etcd-clusteradres wordt opgegeven (bijvoorbeeld "example.com:8500"), en de knooppunten worden automatisch samengevoegd tot een cluster. Het leidende knooppunt werkt periodiek informatie over zijn adres bij in de Consul- of etcd-opslag, waardoor u vervolgens de leider kunt wijzigen zonder dat u andere knooppunten opnieuw hoeft te configureren, en nieuwe knooppunten kunt toevoegen, zelfs nadat u de leider hebt gewijzigd. De oude Discovery-modusservice die op AWS Lambda draait, is stopgezet.
  • Met de CLI-interface kunnen meerdere hosts tegelijk worden opgegeven. Als het eerste knooppunt niet beschikbaar is, wordt er contact opgenomen met de volgende hosts.
  • De code voor het parseren van rqlited opdrachtregelargumenten is herwerkt.
  • Het verouderde protobuf-pakket is niet meer leverbaar.
  • De BoltDB-opslag die wordt gebruikt bij de implementatie van het Raft-protocol is vervangen door bbolt, een vork uit het etcd-project.

Bron: opennet.ru

Voeg een reactie