Izdanje rqlite 6.0, distribuiranog DBMS-a otpornog na pogreške temeljenog na SQLiteu

Predstavljeno je izdanje distribuiranog DBMS-a rqlite 6.0, koji koristi SQLite kao mehanizam za pohranu i omogućuje organiziranje rada klastera sinkroniziranih pohrana. Jedna od značajki rqlitea je jednostavnost instalacije, implementacije i održavanja distribuirane pohrane otporne na greške, donekle slične etcd i Consulu, ali koristeći relacijski model podataka umjesto formata ključ/vrijednost. Kôd projekta napisan je u Go-u i distribuira se pod licencom MIT-a.

Za održavanje svih čvorova u sinkroniziranom stanju koristi se Raftov algoritam konsenzusa. Rqlite koristi originalnu SQLite biblioteku i standardni go-sqlite3 driver, povrh kojih se pokreće sloj koji obrađuje klijentske zahtjeve, 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 s operacijama pisanja mogu slati 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 voditelju). Glavni naglasak je na toleranciji grešaka, tako da se DBMS skalira samo s operacijama čitanja, a operacije pisanja su usko grlo. Moguće je pokrenuti rqlite klaster iz jednog čvora i ovo se rješenje može koristiti za pružanje pristupa SQLiteu preko HTTP-a bez pružanja tolerancije na greške.

SQLite podaci na svakom čvoru nisu pohranjeni u datoteku, već u memoriju. Na razini sloja uz implementaciju Raft protokola vodi se log svih SQLite naredbi koje dovode do promjena u bazi podataka. Ovaj zapisnik se koristi tijekom replikacije (replikacija na razini reprodukcije zahtjeva na drugim čvorovima), pokretanja novog čvora ili oporavka od gubitka veze. Za smanjenje veličine dnevnika koristi se automatsko pakiranje koje počinje nakon određenog broja promjena i dovodi do fiksiranja snimke na disku, u odnosu na koji se počinje voditi novi dnevnik (stanje baze podataka u memoriji identičan je snimci + akumulirani dnevnik promjena).

Značajke rqlite-a:

  • Jednostavan za implementaciju klastera, bez potrebe za zasebnom SQLite instalacijom.
  • Sposobnost brzog dobivanja replicirane SQL memorije.
  • Spremno za korištenje u radnim projektima (proizvodni stupanj).
  • Prisutnost HTTP(S) API-ja koji vam omogućuje ažuriranje podataka u skupnom načinu rada i određivanje vodećeg čvora klastera. Također pruža sučelje naredbenog retka i mogućnost korištenja različitih klijentskih biblioteka izgrađenih za SQLite.
  • Dostupnost usluge za identifikaciju drugih čvorova, što vam omogućuje dinamičko stvaranje klastera.
  • Podrška za šifriranje razmjene podataka između čvorova.
  • Mogućnost konfiguracije razine provjere relevantnosti i dosljednosti podataka prilikom čitanja.
  • Opcijska mogućnost povezivanja čvorova u načinu rada samo za čitanje, koji ne sudjeluju u određivanju konsenzusa i koriste se za povećanje skalabilnosti klastera za operacije čitanja.
  • Podrška za vlastiti oblik transakcija na temelju kombiniranja naredbi u jednom zahtjevu (transakcije temeljene na BEGIN, COMMIT, ROLLBACK, SAVEPOINT i RELEASE nisu podržane).
  • Podrška za stvaranje vrućih sigurnosnih kopija.

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

Promjena je također eliminirala potrebu za zasebnom komponentom sinkronizacije metapodataka i eliminirala zasebno rukovanje Raft stanjem i metapodacima. Sekundarni čvorovi sada šalju zahtjeve vodećem čvoru samo kada je potrebno, kada trebaju saznati adresu vodećeg čvora. API pruža mogućnost dobivanja informacija o stanju drugih čvorova u klasteru. Naredba ".sysdump" dodana je u sučelje naredbenog retka.

Izvor: opennet.ru

Dodajte komentar