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

Utgivningen av den distribuerade DBMS rqlite 7.0 ägde rum, som använder SQLite som en lagringsmotor och låter dig organisera arbetet i ett kluster från lagringar som är synkroniserade med varandra. 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 go-sqlite3-drivrutinen, ovanpå vilket 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 reproduktion av förfrågningar på andra noder), när du startar en ny nod eller för att återställa från en förlust av anslutning. För att minska storleken på loggen används automatisk packning, som startar efter ett specificerat antal ändringar och leder till fixering av en ögonblicksbild, i förhållande till vilken en ny logg börjar underhållas (tillståndet för databasen 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 för användning i produktionsprojekt (produktionsgrad).
  • Närvaron av ett HTTP(S) API som låter dig uppdatera data i batchläge och bestämma klustrets ledande nod. Ett kommandoradsgränssnitt och klientbibliotek för olika programmeringsspråk tillhandahålls också.
  • 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.

I den nya utgåvan:

  • Lade till stöd för automatisk rqlite-klustring med hjälp av en ny noddetekteringstjänst som kan fungera på basis av Consul och etcd distribuerad lagring. Tjänsten gör det möjligt för rqlite-noder att automatiskt hitta varandra - administratören behöver bara starta flera noder på olika servrar, ange den gemensamma Consul- eller etcd-klusteradressen (till exempel "example.com:8500"), och noderna kommer automatiskt att vara kombineras till ett kluster. Den ledande noden uppdaterar med jämna mellanrum information om sin adress i Consul- eller etcd-lagringen, vilket gör att du i efterhand kan byta ledare utan att behöva konfigurera om andra noder, samt lägga till nya noder även efter att du har bytt ledare. Den äldre tjänsten Discovery Mode som körs på AWS Lambda har avbrutits.
  • CLI-gränssnittet gör det möjligt att specificera flera värdar samtidigt - om den första noden inte är tillgänglig kommer nästa värd att kontaktas.
  • Koden för att analysera rqlited kommandoradsargument har omarbetats.
  • Det utfasade protobuf-paketet har upphört.
  • BoltDB-lagringen som används i implementeringen av Raft-protokollet har ersatts av bbolt, en gaffel från etcd-projektet.

Källa: opennet.ru

Lägg en kommentar