Izdanje rqlite 6.0, distribuiranog DBMS-a otpornog na greške baziran na SQLite-u

Predstavljeno je izdanje distribuiranog DBMS-a rqlite 6.0, koji koristi SQLite kao mehanizam za skladištenje i omogućava vam da organizujete rad klastera sinhronizovanih skladišta. Jedna od karakteristika rqlite-a je jednostavnost instalacije, implementacije i održavanja distribuiranog skladišta otpornog na greške, donekle sličnog etcd i Consulu, ali koristeći relacijski model podataka umjesto formata ključ/vrijednost. Kod projekta je napisan u Go i distribuiran pod MIT licencom.

Za održavanje svih čvorova u sinkroniziranom stanju, koristi se Raft konsenzus algoritam. Rqlite koristi originalnu SQLite biblioteku i standardni go-sqlite3 drajver, na vrhu kojeg se pokreće sloj koji obrađuje zahtjeve klijenata, vrši replikaciju na druge čvorove i prati postizanje konsenzusa o izboru vodećeg čvora.

Promjene u bazi podataka može izvršiti samo čvor koji je odabran kao vodeći, ali se veze sa operacijama pisanja mogu poslati i drugim čvorovima u klasteru, koji će vratiti adresu voditelja za ponavljanje zahtjeva (u sljedećoj verziji oni obećanje dodavanja automatskog prosljeđivanja zahtjeva lideru). Glavni naglasak je na toleranciji grešaka, tako da se DBMS skalira samo sa operacijama čitanja, a operacije pisanja su usko grlo. Moguće je pokrenuti rqlite klaster iz jednog čvora i ovo rješenje se može koristiti za pružanje pristupa SQLite-u preko HTTP-a bez pružanja tolerancije grešaka.

SQLite podaci na svakom čvoru nisu pohranjeni u datoteci, već u memoriji. Na nivou sloja sa implementacijom Raft protokola vodi se dnevnik svih SQLite naredbi koje dovode do promjena u bazi podataka. Ovaj dnevnik se koristi tokom replikacije (replikacije na nivou zahtjeva za reprodukciju na drugim čvorovima), pokretanja novog čvora ili oporavka od gubitka veze. Da bi se smanjila veličina dnevnika, koristi se automatsko pakiranje koje počinje nakon određenog broja promjena i dovodi do fiksiranja snimka na disku, u odnosu na koji se počinje čuvati novi dnevnik (stanje baze podataka u memoriji je identičan snimku + akumulirani dnevnik promjena).

Karakteristike rqlite-a:

  • Jednostavan za postavljanje klastera, bez potrebe za zasebnom instalacijom SQLite-a.
  • Mogućnost brzog dobijanja repliciranog SQL prostora za skladištenje.
  • Spremno za upotrebu u radnim projektima (proizvodnja).
  • Prisustvo HTTP(S) API-ja koji vam omogućava da ažurirate podatke u batch modu i odredite vodeći čvor klastera. Također pruža sučelje komandne linije i mogućnost korištenja različitih klijentskih biblioteka izgrađenih za SQLite.
  • Dostupnost usluge za identifikaciju drugih čvorova, koja vam omogućava dinamičko kreiranje klastera.
  • Podrška za šifriranje razmjene podataka između čvorova.
  • Mogućnost konfigurisanja nivoa provjere relevantnosti i konzistentnosti podataka prilikom čitanja.
  • Opciona mogućnost povezivanja čvorova u režimu samo za čitanje, koji ne učestvuju u određivanju konsenzusa i koriste se za povećanje skalabilnosti klastera za operacije čitanja.
  • Podrška za vaš vlastiti oblik transakcija baziran na kombinovanju naredbi u jednom zahtjevu (transakcije zasnovane na BEGIN, COMMIT, ROLLBACK, SAVEPOINT i RELEASE nisu podržane).
  • Podrška za kreiranje vrućih sigurnosnih kopija.

Novo izdanje uvodi značajne arhitektonske promjene usmjerene na povećanje pouzdanosti klastera poboljšanjem procesa rutiranja zahtjeva za čitanje i pisanje na ispravne čvorove klastera. rqlite čvorovi sada mogu multipleksirati više logičkih veza među sobom koristeći TCP veze uspostavljene između čvorova pomoću Raft protokola. Ako zahtjev zahtijeva ovlaštenje vođe, ali se šalje sekundarnom čvoru, sekundarni čvor može odrediti adresu voditelja i proslijediti je klijentu bez izvođenja proračuna Raft konsenzusa.

Promena je takođe eliminisala potrebu za zasebnom komponentom sinhronizacije metapodataka i eliminisala odvojeno rukovanje Raft stanjem i metapodacima. Sekundarni čvorovi sada šalju zahtjeve vodećem čvoru samo kada je to potrebno, kada treba da saznaju adresu vodećeg čvora. API pruža mogućnost dobivanja informacija o stanju drugih čvorova u klasteru. Komanda ".sysdump" je dodana interfejsu komandne linije.

izvor: opennet.ru

Dodajte komentar