Lëshimi i rqlite 6.0, një DBMS e shpërndarë, tolerante ndaj gabimeve bazuar në SQLite

Është paraqitur lëshimi i DBMS rqlite 6.0 i shpërndarë, i cili përdor SQLite si një motor ruajtjeje dhe ju lejon të organizoni punën e një grupi magazinash të sinkronizuara. Një nga veçoritë e rqlite është lehtësia e instalimit, vendosjes dhe mirëmbajtjes së një ruajtjeje të shpërndarë tolerante ndaj gabimeve, disi e ngjashme me etcd dhe Consul, por duke përdorur një model të dhënash relacionale në vend të një formati çelës/vlerë. Kodi i projektit është shkruar në Go dhe shpërndahet nën licencën MIT.

Për të mbajtur të gjitha nyjet në një gjendje të sinkronizuar, përdoret algoritmi i konsensusit Raft. Rqlite përdor bibliotekën origjinale SQLite dhe drejtuesin standard go-sqlite3, në krye të të cilit hapet një shtresë që përpunon kërkesat e klientit, kryen replikimin në nyje të tjera dhe monitoron arritjen e konsensusit për zgjedhjen e një nyje drejtuese.

Ndryshimet në bazën e të dhënave mund të bëhen vetëm nga nyja që përzgjidhet si lider, por lidhjet me operacionet e shkrimit mund të dërgohen edhe në nyje të tjera në grup, të cilat do të kthejnë adresën e liderit për të përsëritur kërkesën (në versionin tjetër ata premtimi për të shtuar përcjelljen automatike të kërkesave te lideri). Theksi kryesor është në tolerancën e gabimeve, kështu që DBMS shkallëzohet vetëm me operacionet e leximit dhe operacionet e shkrimit janë pengesa. Është e mundur të ekzekutohet një grup rqlite nga një nyje e vetme dhe kjo zgjidhje mund të përdoret për të siguruar akses në SQLite përmes HTTP pa ofruar tolerancë ndaj gabimeve.

Të dhënat SQLite në secilën nyje nuk ruhen në një skedar, por në memorie. Në nivelin e shtresës me zbatimin e protokollit Raft, mbahet një regjistër i të gjitha komandave SQLite që çojnë në ndryshime në bazën e të dhënave. Ky regjistër përdoret gjatë riprodhimit (përsëritje në nivelin e riprodhimit të kërkesave në nyje të tjera), fillimit të një nyje të re ose rikuperimit nga humbja e lidhjes. Për të zvogëluar madhësinë e regjistrit, përdoret paketimi automatik, i cili fillon pas një numri të caktuar ndryshimesh dhe çon në fiksimin e një fotografie në disk, në lidhje me të cilën fillon të mbahet një regjistër i ri (gjendja e bazës së të dhënave në memorie është identike me fotografinë e çastit + regjistrin e akumuluar të ndryshimeve).

Karakteristikat e rqlite:

  • Lehtë për të vendosur një grup, pa pasur nevojë për një instalim të veçantë të SQLite.
  • Aftësia për të marrë me shpejtësi ruajtjen e përsëritur SQL.
  • Gati për përdorim në projekte pune (prodhimi-grade).
  • Prania e një API HTTP(S) që ju lejon të përditësoni të dhënat në modalitetin e grupit dhe të përcaktoni nyjen kryesore të grupit. Ai gjithashtu siguron një ndërfaqe të linjës së komandës dhe aftësinë për të përdorur biblioteka të ndryshme klientësh të ndërtuara për SQLite.
  • Disponueshmëria e një shërbimi për identifikimin e nyjeve të tjera, duke ju lejuar të krijoni grupe në mënyrë dinamike.
  • Mbështetje për kodimin e shkëmbimit të të dhënave midis nyjeve.
  • Aftësia për të konfiguruar nivelin e kontrollit të rëndësisë dhe konsistencës së të dhënave gjatë leximit.
  • Aftësia opsionale për të lidhur nyjet në modalitetin vetëm për lexim, të cilat nuk marrin pjesë në përcaktimin e konsensusit dhe përdoren për të rritur shkallëzimin e grupit për operacionet e leximit.
  • Mbështetje për formën tuaj të transaksioneve bazuar në kombinimin e komandave në një kërkesë (transaksionet e bazuara në BEGIN, COMMIT, ROLLBACK, SAVEPOINT dhe RELEASE nuk mbështeten).
  • Mbështetje për krijimin e kopjeve rezervë të nxehtë.

Publikimi i ri prezanton ndryshime të rëndësishme arkitekturore që synojnë rritjen e besueshmërisë së grupit duke përmirësuar procesin e drejtimit të kërkesave për leximin dhe shkrimin në nyjet e duhura të grupimit. Nyjet rqlite tani mund të multipleksojnë lidhje të shumta logjike ndërmjet tyre duke përdorur lidhjet TCP të krijuara midis nyjeve nga protokolli Raft. Nëse një kërkesë kërkon autoritet drejtues, por dërgohet në një nyje dytësore, nyja dytësore mund të përcaktojë adresën e liderit dhe t'ia kalojë atë klientit pa kryer llogaritjet e konsensusit të Raft.

Ndryshimi eliminoi gjithashtu nevojën për një komponent të veçantë të sinkronizimit të meta të dhënave dhe eliminoi trajtimin e veçantë të gjendjes Raft dhe meta të dhënave. Nyjet dytësore tani dërgojnë kërkesa tek nyja udhëheqëse vetëm kur është e nevojshme, kur duhet të zbulojnë adresën e nyjes së liderit. API ofron mundësinë për të marrë informacion në lidhje me gjendjen e nyjeve të tjera në grup. Komanda ".sysdump" është shtuar në ndërfaqen e linjës së komandës.

Burimi: opennet.ru

Shto një koment