Udgivelse af rqlite 6.0, en distribueret fejltolerant DBMS baseret på SQLite

Udgivelsen af ​​det distribuerede DBMS rqlite 6.0 præsenteres, som bruger SQLite som en storage-motor og giver dig mulighed for at organisere arbejdet i en klynge af synkroniserede lager. En af funktionerne ved rqlite er den lette installation, udrulning og vedligeholdelse af et distribueret fejltolerant lager, der ligner etcd og Consul, men bruger en relationel datamodel i stedet for et nøgle/værdi-format. Projektkoden er skrevet i Go og distribueret under MIT-licensen.

For at holde alle noder i en synkroniseret tilstand, bruges Raft-konsensusalgoritmen. Rqlite bruger det originale SQLite-bibliotek og standard go-sqlite3-driveren, hvorpå der lanceres et lag, der behandler klientanmodninger, udfører replikering til andre noder og overvåger opnåelsen af ​​konsensus om valget af en førende node.

Ændringer i databasen kan kun foretages af den node, der er valgt som leder, men forbindelser med skriveoperationer kan også sendes til andre noder i klyngen, som vil returnere lederens adresse for at gentage anmodningen (i næste version de lover at tilføje automatisk videresendelse af anmodninger til lederen). Hovedvægten er på fejltolerance, så DBMS skalerer kun med læseoperationer, og skriveoperationer er flaskehalsen. Det er muligt at køre en rqlite-klynge fra en enkelt node, og denne løsning kan bruges til at give adgang til SQLite over HTTP uden at give fejltolerance.

SQLite-dataene på hver node er ikke lagret i en fil, men i hukommelsen. På lagniveau med implementeringen af ​​Raft-protokollen føres en log over alle SQLite-kommandoer, der fører til ændringer i databasen. Denne log bruges under replikering (replikering på niveau med reproduktion af anmodninger på andre noder), start af en ny node eller genopretning efter tab af forbindelse. For at reducere størrelsen af ​​loggen anvendes automatisk pakning, som starter efter et specificeret antal ændringer og fører til, at et snapshot bliver fikset på disken, i forhold til hvilket en ny log begynder at blive ført (databasens tilstand i hukommelsen er identisk med øjebliksbilledet + den akkumulerede ændringslog).

Funktioner af rqlite:

  • Let at implementere en klynge uden behov for en separat SQLite-installation.
  • Evne til hurtigt at opnå replikeret SQL-lagring.
  • Klar til brug i arbejdsprojekter (produktionsgrad).
  • Tilstedeværelsen af ​​en HTTP(S) API, der giver dig mulighed for at opdatere data i batch-tilstand og bestemme den førende node i klyngen. Det giver også en kommandolinjegrænseflade og muligheden for at bruge forskellige klientbiblioteker bygget til SQLite.
  • Tilgængeligheden af ​​en service til at identificere andre noder, så du kan oprette klynger dynamisk.
  • Understøttelse af kryptering af dataudveksling mellem noder.
  • Evne til at konfigurere niveauet for kontrol af relevansen og konsistensen af ​​data ved læsning.
  • Valgfri mulighed for at forbinde noder i skrivebeskyttet tilstand, som ikke deltager i at bestemme konsensus og bruges til at øge skalerbarheden af ​​klyngen til læseoperationer.
  • Understøttelse af din egen form for transaktioner baseret på at kombinere kommandoer i én anmodning (transaktioner baseret på BEGIN, COMMIT, ROLLBACK, SAVEPOINT og RELEASE understøttes ikke).
  • Support til oprettelse af hot backups.

Den nye udgivelse introducerer betydelige arkitektoniske ændringer, der sigter mod at øge klyngens pålidelighed ved at forbedre processen med at dirigere læse- og skriveanmodninger til de korrekte klynge noder. rqlite noder kan nu multiplekse flere logiske forbindelser indbyrdes ved hjælp af TCP-forbindelser etableret mellem noder af Raft-protokollen. Hvis en anmodning kræver lederautoritet, men sendes til en sekundær node, kan den sekundære node bestemme lederens adresse og videregive den til klienten uden at udføre Raft-konsensusberegninger.

Ændringen eliminerede også behovet for en separat metadata-synkroniseringskomponent og eliminerede separat håndtering af Raft-tilstand og metadata. Sekundære noder sender nu kun anmodninger til lederknudepunktet, når det er nødvendigt, når de skal finde ud af adressen på lederknudepunktet. API'en giver mulighed for at indhente information om tilstanden af ​​andre knudepunkter i klyngen. Kommandoen ".sysdump" er blevet tilføjet til kommandolinjegrænsefladen.

Kilde: opennet.ru

Tilføj en kommentar