Rqlite 6.0, SQLite'il põhinev hajutatud tõrketaluv DBMS, väljalase

Esitatakse hajutatud DBMS rqlite 6.0 väljalaset, mis kasutab SQLite'i salvestusmootorina ja võimaldab korraldada sünkroonitud salvestuste klastri tööd. Üks rqlite'i omadusi on hajutatud tõrketaluva salvestusruumi installimise, juurutamise ja hooldamise lihtsus, mis on mõnevõrra sarnane etcd ja Consuliga, kuid kasutab võtme/väärtuse vormingu asemel relatsiooniandmemudelit. Projekti kood on kirjutatud Go-s ja seda levitatakse MIT-i litsentsi all.

Kõigi sõlmede sünkroniseeritud olekus hoidmiseks kasutatakse Raft konsensusalgoritmi. Rqlite kasutab originaalset SQLite teeki ja standardset go-sqlite3 draiverit, mille peale käivitatakse kiht, mis töötleb kliendi päringuid, teostab replikatsiooni teistesse sõlmedesse ja jälgib juhtsõlme valiku osas konsensuse saavutamist.

Andmebaasi muudatusi saab teha ainult juhiks valitud sõlm, kuid kirjutamisoperatsioonidega ühendused saab saata ka teistele klastri sõlmedele, mis päringu kordamiseks tagastavad juhi aadressi (järgmises versioonis lubadus lisada taotluste automaatne edastamine juhile). Põhirõhk on tõrketaluvusel, nii et DBMS-i skaleerimine toimub ainult lugemisoperatsioonidega ja kitsaskohaks on kirjutamistoimingud. Rqlite'i klastrit on võimalik käivitada ühest sõlmest ja seda lahendust saab kasutada SQLite'ile juurdepääsu pakkumiseks HTTP kaudu ilma tõrketaluvust tagamata.

Iga sõlme SQLite'i andmeid ei salvestata faili, vaid mällu. Raft-protokolli juurutamise kihi tasemel peetakse kõigi SQLite'i käskude logi, mis viivad andmebaasi muudatusteni. Seda logi kasutatakse replikatsiooni ajal (replikatsioon teiste sõlmede taotluste taasesitamise tasemel), uue sõlme käivitamisel või ühenduse katkemisest taastumisel. Logi suuruse vähendamiseks kasutatakse automaatset pakkimist, mis käivitub pärast teatud arvu muudatusi ja viib kettale hetktõmmise fikseerimiseni, millega seoses hakatakse pidama uut logi (andmebaasi olek mälus on identne hetktõmmise + kogutud muudatuste logiga).

Rqlite'i omadused:

  • Klastrit on lihtne juurutada, ilma et oleks vaja eraldi SQLite'i installimist.
  • Võimalus kiiresti hankida paljundatud SQL-i salvestusruumi.
  • Valmis kasutamiseks tööprojektides (tootmistasemel).
  • HTTP(S) API olemasolu, mis võimaldab värskendada andmeid pakettrežiimis ja määrata klastri juhtiva sõlme. Samuti pakub see käsurea liidest ja võimalust kasutada erinevaid SQLite'i jaoks loodud klienditeeke.
  • Teiste sõlmede tuvastamise teenuse kättesaadavus, mis võimaldab teil dünaamiliselt klastreid luua.
  • Sõlmedevahelise andmevahetuse krüptimise tugi.
  • Võimalus seadistada lugemisel andmete asjakohasuse ja järjepidevuse kontrollimise taset.
  • Valikuline võimalus ühendada kirjutuskaitstud režiimis sõlmed, mis ei osale konsensuse määramisel ja mida kasutatakse klastri skaleeritavuse suurendamiseks lugemistoimingute jaoks.
  • Teie enda tehinguvormide tugi, mis põhineb käskude kombineerimisel ühes päringus (tehinguid BEGIN, COMMIT, ROLLBACK, SAVEPOINT ja RELEASE alusel ei toetata).
  • Kuumade varukoopiate loomise tugi.

Uus versioon sisaldab olulisi arhitektuurilisi muudatusi, mille eesmärk on suurendada klastri töökindlust, parandades lugemis- ja kirjutamistaotluste marsruutimist õigetesse klastri sõlmedesse. rqlite sõlmed saavad nüüd omavahel multipleksida mitu loogilist ühendust, kasutades Raft-protokolli sõlmede vahel loodud TCP-ühendusi. Kui päring nõuab juhi volitusi, kuid see saadetakse sekundaarsele sõlmele, saab sekundaarne sõlm määrata juhi aadressi ja edastada selle kliendile ilma Raft konsensusarvutusi tegemata.

Muudatus kaotas ka vajaduse eraldi metaandmete sünkroonimise komponendi järele ning kaotas parve oleku ja metaandmete eraldi käsitlemise. Sekundaarsed sõlmed saadavad nüüd juhtsõlmele päringuid ainult vajaduse korral, kui neil on vaja välja selgitada juhtsõlme aadress. API võimaldab hankida teavet klastri teiste sõlmede oleku kohta. Käsk ".sysdump" on lisatud käsurea liidesesse.

Allikas: opennet.ru

Lisa kommentaar