Rqlite 6.0, një sistem menaxhimi të të dhënave të shpërndara, është publikuar, i cili përdor SQLite si motor ruajtjeje dhe mundëson funksionimin e një klasteri të ruajtesh të sinkronizuara me njëra-tjetrën. Rqlite veçohet për thjeshtësinë e instalimit, shpërndarjes dhe mbështetjes së një ruajtjeje të shpërndarë të qëndrueshme, e cila është e ngjashme me etcd dhe Consul, por përdor një model relacional të punës me të dhëna në vend të formatit çelës/vlerë. Kodi i projektit është shkruar në gjuhën Go dhe shpërndahet nën licencën MIT.
Për të mbështetur të gjithë nodet në një gjendje të sinkronizuar, përdoret algoritmi i arritjes së konsensusit Raft. Rqlite përdor bibliotekën origjinale SQLite dhe driver-in e zakonshëm go-sqlite3, mbi të cilat funksionon një shtresë që përpunon kërkesat e klientëve, kryen replikimin në nodet e tjera dhe ndjek arritjen e konsensusit mbi zgjedhjen e nodit lider.
Ndryshimet nĂ« DB mund tĂ« bĂ«hen vetĂ«m nga nodi qĂ« Ă«shtĂ« zgjedhur si lider, por lidhjet me operacionet e shkrimit mund tĂ« drejtohen gjithashtu edhe nĂ« nodet e tjera tĂ« klasterit, tĂ« cilat do tĂ« kthejnĂ« adresĂ«n e liderit pĂ«r tĂ« ripĂ«rsĂ«ritur kĂ«rkesĂ«n (nĂ« versionin e ardhshĂ«m premtohet qĂ« tĂ« shtohet kalimi automatik i kĂ«rkesave tek lideri). Fokusimi kryesor Ă«shtĂ« nĂ« qĂ«ndrueshmĂ«ri, prandaj sistemi i menaxhimit tĂ« tĂ« dhĂ«nave Ă«shtĂ« nĂ« skalim vetĂ«m pĂ«r operacionet e leximit, ndĂ«rsa operacionet e shkrimit janĂ« pika e dobĂ«t. ĂshtĂ« e mundur tĂ« fillosh njĂ« klaster rqlite nga njĂ« nod i vetĂ«m dhe kjo zgjidhje mund tĂ« pĂ«rdoret pĂ«r tĂ« organizuar aksesin nĂ« SQLite pĂ«rmes HTTP pa ofruar qĂ«ndrueshmĂ«ri.
Të dhënat SQLite në çdo nod ruhen jo në skedar, por në memorie. Në nivelin e shtresës me implementimin e protokollit Raft, mbahet një registër i të gjithë komandueseve SQLite, të cilat çojnë në ndryshimin e DB. Ky registër përdoret në replikim (replikim në nivelin e riprodhimit të kërkesave në nodet e tjera), fillimin e një nodi të ri ose rikuperimin pas humbjes së lidhjes. Për të reduktuar madhësinë e regjistrit, aplikohet paketimi automatik, i cili nisi pas një numri të caktuar ndryshimesh dhe rezulton në ruajtjen në disk të një snapshot-i, në lidhje me të cilin fillon të mbahet një regjistër i ri (gjendja e DB në memory është identike me snapshot-in + regjistrin e grumbulluar të ndryshimeve).
Veçoritë e rqlite:
- Thjeshtësia e vendosjes së klasterit, pa nevojën për një instalim të veçantë të SQLite.
- Mundësia për të marrë shpejt një ruajtje SQL të replikuar.
- Gati për t'u përdorur në projekte punuese (Production-grade).
- Disponibiliteti i API HTTP(S), i cili lejon përditësimin e të dhënave në modë grumbullore dhe përcaktimin e nyjës udhëheqëse të klasterit. Gjithashtu ofrohet një ndërfaqe e linjës së komandave dhe mundësia e përdorimit të bibliotekave të ndryshme klienti të krijuara për SQLite.
- Prania e një shërbimi për përcaktimin e nyjave të tjera, duke lejuar krijimin dinamik të klastereve.
- Mbështetje për enkriptimin e shkëmbimit të të dhënave ndërmjet nyjave.
- Mundësia për të konfiguruar nivelin e verifikimit të vlefshmërisë dhe koherencës së të dhënave gjatë leximet.
- Mundësi opsionale për të lidhur nyjat në mënyrë vetëm për lexim, që nuk marrin pjesë në përcaktimin e konsensusit dhe përdoren për të rritur shkallëzimin e klasterit për operacione lexim.
- Mbështetje për një formë të vetme transaksionesh bazuar në bashkimin e komandave në një kërkesë (transaksionet bazuar në BEGIN, COMMIT, ROLLBACK, SAVEPOINT dhe RELEASE nuk mbështeten).
- Mbështetje për krijimin e kopjeve rezervë të nxehta.
Në versionin e ri janë bërë ndryshime të rëndësishme arkitektonike, të cilat synojnë të rrisin besueshmërinë e klasterit përmes përmirësimit të procesit të drejtimit të kërkesave për leximin dhe shkrimin në nyjat e duhur të klasterit. Nyjat rqlite tani mund të shumëfishojnë midis tyre disa lidhje logjike, duke përdorur lidhje TCP që janë vendosur midis nyjave nga protokolli Raft. Nëse një kërkesë kërkon autorizimin e nyjës udhëheqëse, por është dërguar në një nyjë ndihmëse, nyja ndihmëse mund të përcaktojë adresën e liderit dhe t'ia transmetojë klientit, pa kryer llogaritjen e konsensusit sipas protokollit Raft.
Ky ndryshim gjithashtu lejoni qĂ« tĂ« eliminohet komponenti i veçantĂ« pĂ«r sinkronizimin e tĂ« dhĂ«nave tĂ« metadatat dhe tĂ« pĂ«rjashtohet trajtimi i veçantĂ« i gjendjes Raft dhe metadatat. Nyjat ndihmĂ«se tani drejtojnĂ« kĂ«rkesat vetĂ«m kur Ă«shtĂ« e nevojshme, kur nevojitet tĂ« dihet adresa e nyjĂ«s udhĂ«heqĂ«se. NĂ« API Ă«shtĂ« ofruar mundĂ«sia pĂ«r tĂ« marrĂ« informacion mbi gjendjen e nyjave tĂ« tjera nĂ« klaster. NĂ« ndĂ«rfaqen e linjĂ«s sĂ« komandave Ă«shtĂ« shtuar komanda â.sysdumpâ.
Burimi: opennet.ru
