De gedistribueerde database rqlite 7.0 is uitgebracht, die SQLite gebruikt als opslagengine en het mogelijk maakt om een cluster van gesynchroniseerde opslagplaatsen te organiseren. Kenmerken van rqlite zijn onder andere de eenvoud van installatie, implementatie en onderhoud van een gedistribueerde fouttolerante opslag, vergelijkbaar met etcd en Consul, maar met een relationeel datamodel in plaats van een sleutel/waarde-formaat. De projectcode is geschreven in Go en wordt verspreid onder de MIT-licentie.
Voor het onderhouden van alle knooppunten in een gesynchroniseerde staat wordt het consensusalgoritme Raft gebruikt. Rqlite maakt gebruik van de oorspronkelijke SQLite-bibliotheek en de go-sqlite3-driver, waarboven een laag draait die klantverzoeken verwerkt, replicatie naar andere knooppunten uitvoert en consensus bereikt over de keuze van de leidende knoop.
Wijzigingen in de database kunnen alleen worden aangebracht door de knoop die is geselecteerd als leidende, maar verbindingen met schrijfoperaties kunnen ook naar andere knooppunten in het cluster worden gestuurd, die het adres van de leider zullen retourneren om het verzoek te herhalen (in de volgende versie beloven ze automatisch het verzoek naar de leider door te sturen). De belangrijkste focus ligt op fouttolerantie, поэтому hangt de schaalbaarheid van de database alleen af van leesoperaties, terwijl schrijfoperaties het knelpunt zijn. Het is mogelijk om een rqlite-cluster vanuit één knoop te starten, en deze oplossing kan worden gebruikt om toegang tot SQLite via HTTP te organiseren, zonder fouttolerantie te bieden.
De SQLite-gegevens op elk knooppunt worden niet in een bestand, maar in het geheugen opgeslagen. Op het niveau van de implementatie van het Raft-protocol wordt een logboek van alle SQLite-commando's bijgehouden die leiden tot wijzigingen in de database. Dit logboek wordt gebruikt bij replicatie (replicatie op het niveau van het reproduceren van verzoeken op andere knooppunten), bij het opstarten van een nieuwe knoop of voor herstel na verlies van connectiviteit. Om de grootte van het logboek te verkleinen, wordt automatische compressie toegepast die wordt geactiveerd na een bepaald aantal wijzigingen en leidt tot het vastleggen van een momentopname, waarna een nieuw logboek wordt bijgehouden (de toestand van de database in het geheugen is identiek aan de momentopname + het opgelopen logboek van wijzigingen).
Kenmerken van rqlite:
- Eenvoudige uitrol van een cluster, zonder aparte installatie van SQLite.
- De mogelijkheid om snel een gerepliceerde SQL-opslag te krijgen.
- Klaar voor gebruik in productieprojecten.
- Beschikbaarheid van een HTTP(S) API die het mogelijk maakt om gegevens in bulk bij te werken en de leidende knoop van het cluster te identificeren. Er is ook een commandoregelinterface en clientbibliotheken voor verschillende programmeertalen beschikbaar.
- Aanwezigheid van een service voor het bepalen van andere knooppunten, waardoor dynamisch clusters kunnen worden gemaakt.
- Ondersteuning voor het versleutelen van gegevensuitwisseling tussen knooppunten.
- Mogelijkheid om het niveau van actualiteits- en consistentiecontrole van gegevens tijdens het lezen in te stellen.
- Optionele mogelijkheid om knooppunten in alleen-lezen modus aan te sluiten, die niet deelnemen aan het bepalen van de consensus en worden gebruikt om de schaalbaarheid van het cluster voor leesoperaties te vergroten.
- Ondersteuning voor een eigen transactievorm op basis van het groeperen van commando's in één aanvraag (transacties op basis van BEGIN, COMMIT, ROLLBACK, SAVEPOINT en RELEASE worden niet ondersteund).
- Ondersteuning voor het maken van hot backups.
In de nieuwe release:
- Ondersteuning voor automatisch clusteren van rqlite is toegevoegd met behulp van een nieuwe service voor knoopdetectie, die kan draaien op gedistribueerde opslag zoals Consul en etcd. Deze service stelt rqlite-knopen in staat elkaar automatisch te vinden — de beheerder hoeft slechts enkele knopen op verschillende servers, en een gemeenschappelijk adres voor het Consul- of etcd-cluster op te geven (bijvoorbeeld "example.com:8500"), en de knopen worden automatisch samengevoegd tot een cluster. De leidende knoop werkt periodiek het adres in de opslag van Consul of etcd bij, zodat later de leider kan worden gewijzigd zonder dat de andere knopen opnieuw ingesteld hoeven te worden, en ook nieuwe knopen kunnen worden toegevoegd, zelfs na een leiderschapswijziging. Ondersteuning voor de oude knoopdetectieservice (Discovery mode), die op basis van AWS Lambda werkte, is stopgezet.
- In de CLI-interface is het nu toegestaan om meerdere hosts op te geven — als de eerste knoop niet beschikbaar is, wordt er verbinding gemaakt met de volgende hosts.
- De code voor het parseren van de commandoregelargumenten in rqlited is herschreven.
- Het gebruik van het verouderde protobuf-pakket is stopgezet.
- De BoltDB-opslag, die werd gebruikt in de implementatie van het Raft-protocol, is vervangen door bbolt, een fork van het etcd-project.
Bron: opennet.ru
