Vabariiklik jaotatud andmebaasi rqlite 7.0 väljalaskmine on toimunud. See kasutab andmete salvestamiseks SQLite'i ja võimaldab luua sümmeetriliselt sünkroniseeritud klastreid. rqlite eripära on lihtne paigaldus, rakendamine ja jaotatud talitlushäirete taluvate salvestuste haldamine, olles sarnane etcd ja Consul'iga, kuid kasutades andmete jaoks relatsioonilist mudelit, mitte võtme/väärtuse formaati. Projekti kood on kirjutatud Go keeles ja see levitatakse MIT litsentsi alusel.
Kõigi sõlmede sünkroniseerituse tagamiseks kasutatakse Raft konsensusalgoritmi. Rqlite kasutab originaalset SQLite'i teeki ja go-sqlite3 draiverit, millele rakendatakse kiht, mis töötleb kliendi päringuid, viib läbi replikatsiooni teistele sõlmedele ja jälgib konsensuse saavutamist liidri valimisel.
Andmebaasi muudatusi tohib teha ainult sõlm, mis on valitud liidriks, kuid kirjutamisoperatsioonide jaoks võivad ühendused olla suunatud ka muudesse klastris olevatesse sõlmedesse, mis tagastavad liidri aadressi päringu kordamiseks (järgmises versioonis lubatakse automaatne kutsumine liidrile). Peamine fookus on talitlushäirete taluvusel, mistõttu andmebaas on skaleeritav ainult lugemisoperatsioonide osas, samas kui kirjutamisoperatsioonid on kitsaskohaks. Rqlite klastrit on võimalik käivitada ka ühest sõlmest ja seda lahendust saab kasutada SQLite'ile HTTP kaudu juurdepääsu tagamiseks ilma talitlushäirete taluvuseta.
SQLite andmed iga sõlme suhtes hoitakse mitte failis, vaid mälus. Raft protokolli rakendamise kihis hoitakse ajalugu kõigist SQLite'i käskudest, mis muudavad andmebaasi. Seda ajalugu kasutatakse replikatsiooni käigus (replikatsioon päringute esitamiste tasandil teistel sõlmedel), uue sõlme käivitamisel või ühenduse kaotamise korral taastamiseks. Ajaloo suuruse vähendamiseks kasutatakse automaatset pakkimist, mis käivitub pärast määratud muudatuste arvu ja viib uue ajaloosalvestuse kinnitamisele, mille suhtes algab uue ajaloosalvestuse pidamine (mälus olev andmebaasi olek on identne kinnitusega + akumuleeritud muudatuste ajalooga).
Rqlite'i eripärad:
- Klastri juurutamine on lihtne, ilma eraldi SQLite installimise vajaduseta.
- Võimalus kiiresti saada replikatsiooniga SQL-lao.
- Valmis kasutamiseks töös projektides (production-grade).
- HTTP(S) API olemasolu, mis võimaldab andmeid paketirežiimis uuendada ja määrata klastrite peanode. Samuti pakutakse käsurea liidest ja klienditeeke erinevates programmeerimiskeeltes.
- Teenuse olemasolu teiste sõlmede määramiseks, mis võimaldab luua klastreid dünaamiliselt.
- Toetatakse andmete vahetamise krüpteerimist sõlmede vahel.
- Võimalus kohandada andmete lugemise kehtivuse ja järjepidevuse kontrolli taset.
- Valikulise võimalusena saab liita sõlmi ainult lugemisrežiimis, mis ei osale konsensuse määramisel ja mida kasutatakse klastrite lugemisoperatsioonide skaleeritavuse suurendamiseks.
- Toetatakse oma tehinguvormi, mis põhineb käskude kogumisel ühes päringus (BEGIN, COMMIT, ROLLBACK, SAVEPOINT ja RELEASE tehingud ei ole toetatud).
- Toetatakse kuumade varukoopiate tegemist.
Uues väljaandes:
- Automaatse klasterdamise rqlite tugi on lisatud, kasutades uut sõlmede määramise teenust, mis võib toimida hajutatud ladustamise põhjal, nagu Consul ja etcd. Teenus võimaldab rqlite sõlmedel automaatselt üksteist leida — administraator peab lihtsalt käivitama mitu sõlme erinevatesse serverites, määrates jagatud aadressi klastrile Consulile või etcd-le (näiteks „example.com:8500”), ja sõlmed ühendatakse automaatselt klastriks. Peasõlm värskendab regulaarselt Consuli või etcdi andmesalvestuses oma aadressi, mis võimaldab hiljem muuta liidrit ilma, et oleks vajalik ülejäänud sõlmede seadistamine, samuti saab uusi sõlmi lisada isegi pärast liidri vahetamist. Vanast sõlmede määramise teenusest (Discovery mode), mis põhines AWS Lambdal, on loobutud.
- CLI liideses on lubatud määrata mitu hosti — kui esimene sõlm osutub kättesaamatuks, pöördutakse järgmiste hostide poole.
- Käsurea argumentide analüüsi kood on ümber kirjutatud rqlited jaoks.
- Vanast protobuf pakettide kasutamisest on loobutud.
- Raft-protokolli rakenduses kasutatav BoltDB andmesalvestus on asendatud bboltiga, projekti etcd forking.
Allikas: opennet.ru
