Rqlite 6.0 jaotatud andmebaasi vĂ€ljaanne, mis kasutab SQLite't salvestusmootorina ja vĂ”imaldab luua sĂŒnkroniseeritud salvestite klastreid. Rqlite'i eripĂ€radena toome vĂ€lja lihtsa paigaldamise, juurutamise ja haldamise jaotatud veakindla salvesti jaoks, mis sarnaneb etcd ja Consuliga, kuid kasutab andmete haldamiseks relatsioonilist mudelit, mitte vĂ”tme/vÀÀrtuse formaati. Projekti kood on kirjutatud Go keeles ning seda levitatakse MIT-i litsentsi alusel.
Klasside sĂŒnkroniseeritud oleku sĂ€ilitamiseks kasutatakse Rafti konsensuse saavutamise algoritmi. Rqlite kasutab originaalset SQLite'i teeki ja standardset go-sqlite3 draiverit, mille kohal töötab kiht, mis kĂ€sitleb kliendipĂ€ringute töötlemist, teeb replikatsiooni teistele sĂ”lmedele ja jĂ€lgib konsensuse saavutamist juhtiva sĂ”lme valimisel.
Andmebaasi muudatusi saab teha ainult sĂ”lm, mis on valitud juhtivaks, kuid kirjutamisoperatsioonidega seotud ĂŒhendused saavad minna ka teiste klastris olevate sĂ”lmede juurde, mis tagastavad juhtiva aadressi pĂ€ringu kordamiseks (jĂ€rgmises versioonis lubatakse automaatne juhtivasse pöördumise suunamine). Peamine rĂ”hk on veakindlusel, mistĂ”ttu andmebaas on skaleeritav ainult lugemisoperatsioonide osas, samas kui kirjutamisoperatsioonid on kitsaskohaks. Rqlite'i klastrit on vĂ”imalik kĂ€ivitada ka ĂŒhelt sĂ”lmelt, ning selline lahendus vĂ”ib olla kasutatav SQLite'i juurdepÀÀsuks ĂŒle HTTP ilma veakindluseta.
SQLite'i andmed igas sĂ”lmes ei salvestata faili, vaid mĂ€llu. Rafti protokolli rakendamise tasemel peetakse kĂ”iki SQLite'i kĂ€ske, mis pĂ”hjustavad andmebaasi muutusi. Seda logi kasutatakse replikatsiooniks (pĂ€ringute replikatsioon muudele sĂ”lmedele), uue sĂ”lme kĂ€ivitamiseks vĂ”i ĂŒhenduse katkestamise taastamiseks. Logi suuruse vĂ€hendamiseks rakendatakse automaatset pakkimist, mis kĂ€ivitub pĂ€rast mÀÀratud muutuste arvu ja viib diskile salvestumise kinni, mille suhtes hakkab toimuma uus logi (andmebaasi seisund mĂ€llus on identne salvestuse + akumuleerunud logiga).
Rqlite'i eripÀrad:
- Klastri juurutamine on lihtne, ilma eraldi SQLite installimise vajaduseta.
- VÔimalus kiiresti saada replikatsiooniga SQL-lao.
- Valmis kasutamiseks tööprojektides (Production-grade).
- HTTP(S) API olemasolu, mis vÔimaldab andmete massiivset vÀrskendamist ja klastri juhtiva sÔlme mÀÀramist. Samuti on saadaval kÀsurea liides ja erinevate SQLite'ile loodud klienditeekide kasutamise vÔimalus.
- 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 versioonis on tehtud olulisi arhitektuurilisi muudatusi, mis aitavad suurendada klastrite töökindlust, parandades lugemis- ja kirjutamisprotsesside suunamist Ă”igetesse sĂ”lmedesse. Rqlite sĂ”lmed saavad nĂŒĂŒd UDP protokolli kaudu luua mitu loogilist ĂŒhendust TCP ĂŒhenduste kaudu. Kui pĂ€ring vajab juhtiva sĂ”lme Ă”igusi, kuid saadetakse sekundaarsele sĂ”lmele, saab sekundaarne sĂ”lm mÀÀrata juhi aadressi ja edastada selle kliendile ilma Rafti protokolli konsensuse arvutamist Ă”nnestumata.
Muudatus vĂ”imaldas vĂ€hendada eraldi komponenti metaandmete sĂŒnkroonimiseks ja eemaldada eraldi töötlemise Rafti oleku ja metaandmete jaoks. Sekundaarseid sĂ”lmi suunatakse nĂŒĂŒd pĂ€ringud juhtiva sĂ”lme suunas ainult vajaduse korral, kui on vaja teada juhtiva sĂ”lme aadressi. API-s on saadaval vĂ”imalus saada teavet teiste sĂ”lmede oleku kohta klastris. KĂ€surealiidesesse on lisatud kĂ€sk â.sysdumpâ.
Allikas: opennet.ru
