Rqlite 6.0 izplatīšana, pret defektiem izturīga DBVS, kuras pamatā ir SQLite

Tiek prezentēts izplatītās DBMS rqlite 6.0 izlaidums, kas izmanto SQLite kā krātuves dzinēju un ļauj organizēt sinhronizētu krātuvju klastera darbu. 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 standarta 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 izraisa izmaiņas 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 atkopjoties pēc savienojuma zuduma. Lai samazinātu žurnāla izmēru, tiek izmantota automātiska iesaiņošana, kas sākas pēc noteikta skaita izmaiņu un noved pie momentuzņēmuma fiksēšanas diskā, saistībā ar kuru sāk glabāt jaunu žurnālu (datu bāzes stāvoklis atmiņā 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 lietošanai darba 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. Tas nodrošina arī komandrindas saskarni un iespēju izmantot dažādas klientu bibliotēkas, kas izveidotas SQLite.
  • 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ā ir ieviestas būtiskas arhitektūras izmaiņas, kuru mērķis ir palielināt klasteru uzticamību, uzlabojot lasīšanas un rakstīšanas pieprasījumu maršrutēšanas procesu pareizajos klastera mezglos. rqlite mezgli tagad var multipleksēt vairākus loģiskus savienojumus savā starpā, izmantojot TCP savienojumus, kas starp mezgliem izveidoti ar Raft protokolu. Ja pieprasījumam ir nepieciešama līdera pilnvara, bet tas tiek nosūtīts uz sekundāro mezglu, sekundārais mezgls var noteikt līdera adresi un nodot to klientam, neveicot Raft konsensa aprēķinus.

Izmaiņas arī novērsa nepieciešamību pēc atsevišķa metadatu sinhronizācijas komponenta un likvidēja atsevišķu plosta stāvokļa un metadatu apstrādi. Sekundārie mezgli tagad nosūta pieprasījumus vadošajam mezglam tikai nepieciešamības gadījumā, kad tiem ir jānoskaidro vadošā mezgla adrese. API nodrošina iespēju iegūt informāciju par citu klastera mezglu stāvokli. Komandrindas saskarnei ir pievienota komanda ".sysdump".

Avots: opennet.ru

Pievieno komentāru