rqlite 6.0-ի թողարկում՝ բաշխված, սխալ հանդուրժող DBMS՝ հիմնված SQLite-ի վրա

Ներկայացված է բաշխված DBMS rqlite 6.0-ի թողարկումը, որն օգտագործում է SQLite-ը որպես պահեստավորման շարժիչ և թույլ է տալիս կազմակերպել համաժամացված պահեստների կլաստերի աշխատանքը։ Rqlite-ի առանձնահատկություններից մեկը բաշխված անսարքությունների հանդուրժող պահեստի տեղադրման, տեղակայման և պահպանման հեշտությունն է, որը փոքր-ինչ նման է etcd-ին և Consul-ին, բայց օգտագործելով հարաբերական տվյալների մոդել՝ առանցքային/արժեքի ձևաչափի փոխարեն: Ծրագրի կոդը գրված է Go-ում և տարածվում MIT լիցենզիայի ներքո:

Բոլոր հանգույցները համաժամանակացված վիճակում պահելու համար օգտագործվում է Raft կոնսենսուսի ալգորիթմը: Rqlite-ն օգտագործում է բնօրինակ SQLite գրադարանը և ստանդարտ go-sqlite3 դրայվերը, որի վերևում գործարկվում է շերտ, որը մշակում է հաճախորդի հարցումները, կատարում է վերարտադրություն այլ հանգույցների վրա և վերահսկում է առաջատար հանգույցի ընտրության վերաբերյալ կոնսենսուսի ձեռքբերումը:

Տվյալների բազայում փոփոխություններ կարող են կատարվել միայն որպես առաջատար ընտրված հանգույցի կողմից, սակայն գրելու գործողությունների հետ կապերը կարող են ուղարկվել նաև կլաստերի այլ հանգույցներին, որոնք կվերադարձնեն առաջնորդի հասցեն՝ հարցումը կրկնելու համար (հաջորդ տարբերակում նրանք խոստանում են ավելացնել հարցումների ավտոմատ փոխանցում առաջնորդին): Հիմնական շեշտը դրված է սխալների հանդուրժողականության վրա, ուստի DBMS-ը սանդղակվում է միայն կարդալու գործողություններով, իսկ գրելու գործառնությունները խցանման խնդիրն են: Հնարավոր է գործարկել rqlite կլաստերը մեկ հանգույցից, և այս լուծումը կարող է օգտագործվել HTTP-ի միջոցով SQLite մուտք ապահովելու համար՝ առանց սխալների հանդուրժողականություն ապահովելու:

Յուրաքանչյուր հանգույցի SQLite տվյալները պահվում են ոչ թե ֆայլում, այլ հիշողության մեջ: Raft արձանագրության ներդրման հետ շերտի մակարդակում պահվում է SQLite-ի բոլոր հրամանների գրանցամատյանը, որոնք հանգեցնում են տվյալների բազայում փոփոխությունների: Այս գրանցամատյանը օգտագործվում է կրկնօրինակման ժամանակ (վերարտադրում այլ հանգույցների հարցումների վերարտադրման մակարդակով), նոր հանգույց սկսելու կամ կապի կորստից հետո վերականգնելու ժամանակ։ Գրանցամատյանի չափը նվազեցնելու համար օգտագործվում է ավտոմատ փաթեթավորում, որը սկսվում է որոշակի թվով փոփոխություններից հետո և հանգեցնում է սկավառակի վրա ֆիքսված նկարի, որի առնչությամբ սկսվում է նոր գրանցամատյան (հիշողության տվյալների բազայի վիճակը) նույնական է ակնթարթին + կուտակված փոփոխությունների գրանցամատյանը):

Rqlite-ի առանձնահատկությունները.

  • Հեշտ է տեղակայել կլաստեր, առանց SQLite-ի առանձին տեղադրման անհրաժեշտության:
  • Կրկնվող SQL պահեստավորում արագ ձեռք բերելու ունակություն:
  • Պատրաստ է աշխատանքային նախագծերում օգտագործելու համար (արտադրական աստիճան):
  • HTTP(S) API-ի առկայությունը, որը թույլ է տալիս թարմացնել տվյալները խմբաքանակի ռեժիմում և որոշել կլաստերի առաջատար հանգույցը: Այն նաև ապահովում է հրամանի տողի ինտերֆեյս և SQLite-ի համար ստեղծված տարբեր հաճախորդի գրադարաններ օգտագործելու հնարավորություն:
  • Այլ հանգույցների նույնականացման ծառայության առկայությունը, որը թույլ է տալիս դինամիկ կերպով ստեղծել կլաստերներ:
  • Աջակցություն հանգույցների միջև տվյալների փոխանակման կոդավորման համար:
  • Ընթերցանության ժամանակ տվյալների համապատասխանության և համապատասխանության ստուգման մակարդակը կարգավորելու ունակություն:
  • Միայն կարդալու ռեժիմով հանգույցները միացնելու կամընտիր հնարավորություն, որոնք չեն մասնակցում կոնսենսուսի որոշմանը և օգտագործվում են կլաստերի լայնածավալությունը կարդալու գործողությունների համար մեծացնելու համար:
  • Աջակցություն գործարքների ձեր սեփական ձևին, որը հիմնված է մեկ հարցումով հրամանների համակցման վրա (BEGIN, COMMIT, ROLLBACK, SAVEPOINT և RELEASE-ի վրա հիմնված գործարքները չեն աջակցվում):
  • Աջակցություն տաք կրկնօրինակներ ստեղծելու համար:

Նոր թողարկումը ներկայացնում է զգալի ճարտարապետական ​​փոփոխություններ, որոնք ուղղված են կլաստերի հուսալիության բարձրացմանը՝ բարելավելով կարդալու և գրելու հարցումները ճիշտ կլաստերային հանգույցներին ուղղորդելու գործընթացը: rqlite հանգույցներն այժմ կարող են մուլտիպլեքսավորել բազմաթիվ տրամաբանական կապեր միմյանց միջև՝ օգտագործելով Raft արձանագրությամբ հանգույցների միջև հաստատված TCP կապերը: Եթե ​​հարցումը պահանջում է առաջնորդի լիազորություն, բայց ուղարկվում է երկրորդական հանգույց, երկրորդական հանգույցը կարող է որոշել առաջնորդի հասցեն և այն փոխանցել հաճախորդին՝ առանց Raft-ի համաձայնության հաշվարկներ կատարելու:

Փոփոխությունը նաև վերացրեց մետատվյալների համաժամացման առանձին բաղադրիչի անհրաժեշտությունը և վերացրեց Raft վիճակի և մետատվյալների առանձին մշակումը: Երկրորդական հանգույցներն այժմ հարցումներ են ուղարկում առաջատար հանգույցին միայն անհրաժեշտության դեպքում, երբ նրանք պետք է պարզեն առաջատար հանգույցի հասցեն: API-ն հնարավորություն է տալիս տեղեկատվություն ստանալ կլաստերի այլ հանգույցների վիճակի մասին: «.sysdump» հրամանն ավելացվել է հրամանի տողի ինտերֆեյսին:

Source: opennet.ru

Добавить комментарий