Notika izplatÄ«tÄs DBMS rqlite 7.0 izlaiÅ”ana, kas izmanto SQLite kÄ krÄtuves dzinÄju un ļauj organizÄt klastera darbu no savÄ starpÄ sinhronizÄtÄm krÄtuvÄm. Viena no rqlite funkcijÄm ir dalÄ«tas, kļūdu izturÄ«gas krÄtuves uzstÄdÄ«Å”anas, izvietoÅ”anas un uzturÄÅ”anas vienkÄrŔība, kas ir nedaudz lÄ«dzÄ«ga etcd un Consul, taÄu atslÄgas/vÄrtÄ«bas formÄta vietÄ tiek izmantots relÄciju datu modelis. Projekta kods ir rakstÄ«ts Go un izplatÄ«ts saskaÅÄ ar MIT licenci.
Lai saglabÄtu visus mezglus sinhronizÄtÄ stÄvoklÄ«, tiek izmantots Raft konsensa algoritms. Rqlite izmanto oriÄ£inÄlo SQLite bibliotÄku un go-sqlite3 draiveri, virs kura tiek palaists slÄnis, kas apstrÄdÄ klientu pieprasÄ«jumus, veic replikÄciju citos mezglos un uzrauga, vai tiek panÄkta vienprÄtÄ«ba par vadoÅ”Ä mezgla izvÄli.
IzmaiÅas datu bÄzÄ var veikt tikai mezgls, kas ir izvÄlÄts kÄ lÄ«deris, bet savienojumus ar rakstÄ«Å”anas operÄcijÄm var nosÅ«tÄ«t arÄ« uz citiem klastera mezgliem, kas atgriezÄ«s lÄ«dera adresi, lai atkÄrtotu pieprasÄ«jumu (nÄkamajÄ versijÄ tie solÄ«jums pievienot automÄtisku pieprasÄ«jumu pÄrsÅ«tÄ«Å”anu vadÄ«tÄjam). Galvenais uzsvars tiek likts uz kļūdu toleranci, tÄpÄc DBVS mÄrogojas tikai ar lasÄ«Å”anas operÄcijÄm, un rakstÄ«Å”anas darbÄ«bas ir saÅ”aurinÄjums. Ir iespÄjams palaist rqlite klasteru no viena mezgla, un Å”o risinÄjumu var izmantot, lai nodroÅ”inÄtu piekļuvi SQLite, izmantojot HTTP, nenodroÅ”inot kļūdu toleranci.
SQLite dati katrÄ mezglÄ netiek glabÄti failÄ, bet gan atmiÅÄ. SlÄÅa lÄ«menÄ« ar Raft protokola ievieÅ”anu tiek saglabÄts visu SQLite komandu žurnÄls, kas noved pie izmaiÅÄm datu bÄzÄ. Å is žurnÄls tiek izmantots replikÄcijas laikÄ (replicÄÅ”ana pieprasÄ«jumu reproducÄÅ”anas lÄ«menÄ« citos mezglos), startÄjot jaunu mezglu vai lai atgÅ«tu savienojumu pÄc savienojuma zuduma. Lai samazinÄtu žurnÄla lielumu, tiek izmantota automÄtiskÄ pakoÅ”ana, kas sÄkas pÄc noteikta skaita izmaiÅu un noved pie momentuzÅÄmuma fiksÄcijas, saistÄ«bÄ ar kuru sÄk uzturÄt jaunu žurnÄlu (atmiÅÄ esoÅ”Äs datu bÄzes stÄvoklis ir identisks momentuzÅÄmumam + uzkrÄtajam izmaiÅu žurnÄlam).
Rqlite funkcijas:
- VienkÄrÅ”a klastera izvietoÅ”ana, bez nepiecieÅ”amÄ«bas pÄc atseviŔķas SQLite instalÄÅ”anas.
- SpÄja Ätri iegÅ«t replicÄtu SQL krÄtuvi.
- Gatavs izmantoÅ”anai ražoÅ”anas projektos (ražoÅ”anas pakÄpe).
- HTTP(S) API klÄtbÅ«tne, kas ļauj atjauninÄt datus pakeÅ”u režīmÄ un noteikt klastera vadoÅ”o mezglu. Tiek nodroÅ”inÄts arÄ« komandrindas interfeiss un klientu bibliotÄkas dažÄdÄm programmÄÅ”anas valodÄm.
- Pakalpojuma pieejamÄ«ba citu mezglu identificÄÅ”anai, ļaujot dinamiski izveidot klasterus.
- Atbalsts datu apmaiÅas Å”ifrÄÅ”anai starp mezgliem.
- SpÄja konfigurÄt datu atbilstÄ«bas un konsekvences pÄrbaudes lÄ«meni lasÄ«Å”anas laikÄ.
- IzvÄles iespÄja savienot mezglus tikai lasÄ«Å”anas režīmÄ, kas nepiedalÄs vienprÄtÄ«bas noteikÅ”anÄ un tiek izmantoti, lai palielinÄtu klastera mÄrogojamÄ«bu lasÄ«Å”anas operÄcijÄm.
- Atbalsts jÅ«su paÅ”u darÄ«jumu veidiem, pamatojoties uz komandu apvienoÅ”anu vienÄ pieprasÄ«jumÄ (darÄ«jumi, kuru pamatÄ ir BEGIN, COMMIT, ROLLBACK, SAVEPOINT un RELEASE, netiek atbalstÄ«ti).
- Atbalsts karstu dublÄjumu izveidei.
JaunajÄ laidienÄ:
- Pievienots atbalsts automÄtiskai rqlite klasterizÄcijai, izmantojot jaunu mezglu noteikÅ”anas pakalpojumu, kas var darboties, pamatojoties uz Consul un etcd izplatÄ«to krÄtuvi. Pakalpojums ļauj rqlite mezgliem automÄtiski atrast vienam otru ā administratoram atliek tikai palaist vairÄkus mezglus dažÄdos serveros, norÄdot kopÄjo Consul vai etcd klastera adresi (piemÄram, āexample.com:8500ā), un mezgli tiks automÄtiski apvienoti klasterÄ«. VadoÅ”ais mezgls periodiski atjaunina informÄciju par savu adresi Consul vai etcd krÄtuvÄ, kas ļauj pÄc tam mainÄ«t vadÄ«tÄju bez nepiecieÅ”amÄ«bas pÄrkonfigurÄt citus mezglus, kÄ arÄ« pievienot jaunus mezglus pat pÄc lÄ«dera maiÅas. Mantotais Discovery režīma pakalpojums, kas darbojas ar AWS Lambda, ir pÄrtraukts.
- CLI interfeiss ļauj norÄdÄ«t vairÄkus hostus vienlaikus ā ja pirmais mezgls nav pieejams, tiks sazinÄties ar nÄkamajiem resursdatoriem.
- Kods rqlited komandrindas argumentu parsÄÅ”anai ir pÄrstrÄdÄts.
- NovecojuÅ”Äs protobuf pakotnes darbÄ«ba ir pÄrtraukta.
- Raft protokola ievieÅ”anÄ izmantotÄ BoltDB krÄtuve ir aizstÄta ar bbolt, fork no etcd projekta.
Avots: opennet.ru