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

Došlo je do izdanja distribuiranog DBMS-a rqlite 7.0, koji koristi SQLite kao mehanizam za pohranu i omogućuje organiziranje rada klastera iz međusobno sinkroniziranih skladišta. 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 go-sqlite3 driver, povrh kojih se pokreće sloj koji obrađuje klijentske zahtjeve, izvodi 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 pogreš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 se zapisnik koristi tijekom replikacije (replikacija na razini zahtjeva za reprodukciju na drugim čvorovima), prilikom pokretanja novog čvora ili za oporavak od gubitka povezivanja. Za smanjenje veličine dnevnika koristi se automatsko pakiranje koje počinje nakon određenog broja promjena i dovodi do fiksiranja snimke, u odnosu na koji se počinje održavati novi dnevnik (stanje baze podataka u memoriji je identično 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 proizvodnim projektima (production-grade).
  • 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 je dostupno sučelje naredbenog retka i klijentske biblioteke za različite programske jezike.
  • 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.

U novom izdanju:

  • Dodana podrška za automatsko rqlite klasteriranje pomoću nove usluge otkrivanja čvorova koja može raditi na temelju Consul i etcd distribuirane pohrane. Usluga omogućuje rqlite čvorovima da automatski pronađu jedni druge - administrator samo treba pokrenuti nekoliko čvorova na različitim poslužiteljima, navodeći zajedničku adresu klastera Consul ili etcd (na primjer, “example.com:8500”), i čvorovi će se automatski spojeni u klaster. Vodeći čvor povremeno ažurira podatke o svojoj adresi u Consul ili etcd pohrani, što vam omogućuje naknadnu promjenu voditelja bez potrebe za rekonfiguracijom drugih čvorova, kao i dodavanje novih čvorova čak i nakon promjene voditelja. Naslijeđena usluga načina otkrivanja koja radi na AWS Lambda je ukinuta.
  • CLI sučelje omogućuje određivanje nekoliko hostova odjednom - ako je prvi čvor nedostupan, kontaktirat će se sljedeći hostovi.
  • Kod za raščlanjivanje rqlited argumenata naredbenog retka je prerađen.
  • Zastarjeli paket protobuf je ukinut.
  • BoltDB pohrana koja se koristi u implementaciji Raft protokola zamijenjena je bboltom, forkom iz etcd projekta.

Izvor: opennet.ru

Dodajte komentar