Release av rqlite 6.0, ett distribuerat, feltolerant DBMS baserat på SQLite

Releasen av den distribuerade DBMS rqlite 6.0 presenteras, som använder SQLite som en lagringsmotor och låter dig organisera arbetet i ett kluster av synkroniserade lagringar. En av funktionerna hos rqlite är enkel installation, driftsättning och underhåll av en distribuerad feltolerant lagring, något liknande etcd och Consul, men med en relationsdatamodell istället för ett nyckel-/värdeformat. Projektkoden är skriven i Go och distribueras under MIT-licensen.

För att hålla alla noder i ett synkroniserat tillstånd används Raft-konsensusalgoritmen. Rqlite använder det ursprungliga SQLite-biblioteket och standarddrivrutinen go-sqlite3, ovanpå vilken ett lager lanseras som behandlar klientförfrågningar, utför replikering till andra noder och övervakar uppnåendet av konsensus om valet av en ledande nod.

Ändringar i databasen kan endast göras av den nod som är vald som ledare, men kopplingar med skrivoperationer kan också skickas till andra noder i klustret, som kommer att returnera ledarens adress för att upprepa begäran (i nästa version de lovar att lägga till automatisk vidarebefordran av förfrågningar till ledaren). Huvudvikten ligger på feltolerans, så DBMS skalas endast med läsoperationer, och skrivoperationer är flaskhalsen. Det är möjligt att köra ett rqlite-kluster från en enda nod och denna lösning kan användas för att ge åtkomst till SQLite över HTTP utan att ge feltolerans.

SQLite-datan på varje nod lagras inte i en fil, utan i minnet. På lagernivå med implementeringen av Raft-protokollet förs en logg över alla SQLite-kommandon som leder till ändringar i databasen. Den här loggen används under replikering (replikering på nivån för att reproducera förfrågningar på andra noder), starta en ny nod eller återhämta sig från en förlust av anslutning. För att minska storleken på loggen används automatisk paketering, som startar efter ett specificerat antal ändringar och leder till att en ögonblicksbild fixeras på disken, i förhållande till vilken en ny logg börjar sparas (databasens tillstånd i minnet är identisk med ögonblicksbilden + den ackumulerade ändringsloggen).

Funktioner hos rqlite:

  • Lätt att distribuera ett kluster, utan behov av en separat installation av SQLite.
  • Möjlighet att snabbt få replikerad SQL-lagring.
  • Färdig att använda i arbetsprojekt (produktionsgrad).
  • Närvaron av ett HTTP(S) API som låter dig uppdatera data i batchläge och bestämma klustrets ledande nod. Det ger också ett kommandoradsgränssnitt och möjligheten att använda olika klientbibliotek byggda för SQLite.
  • Tillgänglighet för en tjänst för att identifiera andra noder, så att du kan skapa kluster dynamiskt.
  • Stöd för kryptering av datautbyte mellan noder.
  • Möjlighet att konfigurera nivån för att kontrollera relevansen och konsistensen av data vid läsning.
  • Valfri möjlighet att ansluta noder i skrivskyddat läge, som inte deltar i att fastställa konsensus och används för att öka skalbarheten av klustret för läsoperationer.
  • Stöd för din egen form av transaktioner baserat på att kombinera kommandon i en begäran (transaktioner baserade på BEGIN, COMMIT, ROLLBACK, SAVEPOINT och RELEASE stöds inte).
  • Stöd för att skapa heta säkerhetskopior.

Den nya versionen introducerar betydande arkitektoniska förändringar som syftar till att öka klustrets tillförlitlighet genom att förbättra processen för att dirigera läs- och skrivförfrågningar till rätt klusternod. rqlite-noder kan nu multiplexera flera logiska anslutningar sinsemellan med hjälp av TCP-anslutningar som upprättats mellan noder med Raft-protokollet. Om en begäran kräver ledarebehörighet men skickas till en sekundär nod, kan den sekundära noden bestämma ledarens adress och skicka den vidare till klienten utan att utföra flottkonsensusberäkningar.

Ändringen eliminerade också behovet av en separat metadatasynkroniseringskomponent och eliminerade separat hantering av Raft-tillstånd och metadata. Sekundära noder skickar nu förfrågningar till ledarnoden endast när det är nödvändigt, när de behöver ta reda på adressen till ledarnoden. API ger möjlighet att få information om tillståndet för andra noder i klustret. Kommandot ".sysdump" har lagts till i kommandoradsgränssnittet.

Källa: opennet.ru

Lägg en kommentar