Bola vydaná distribuovaná DBMS rqlite 7.0, ktorá používa SQLite ako úložný engine a umožňuje usporiadať prácu klastrovaných synchronizovaných úložísk. Medzi vlastnosti rqlite patrí jednoduchosť inštalácie, nasadenia a údržby distribuovaného odolného úložiska, niečo podobné etсd a Consul, ale s využitím relačného modelu práce s údaji namiesto formátu kľúč/hodnota. Kód projektu je napísaný v jazyku Go a je distribuovaný pod licenciou MIT.
Na udržanie všetkých uzlov v synchronizovanom stave sa používa algoritmus dosahovania konsenzu Raft. Rqlite využíva originálnu knižnicu SQLite a ovládač go-sqlite3, na ktorých sa spúšťa medzivrstvička, ktorá spracováva požiadavky klientov, vykonáva replikáciu na iné uzly a sleduje dosiahnutie konsenzu pri voľbe vedúceho uzla.
Zmeny v databáze môžu vykonávať iba uzol, ktorý bol zvolený ako vedúci, ale spojenia s operačným zapisovaním môžu byť tiež zamerané na iné uzly klasteru, ktoré vrátia adresu vedúceho na opakovanie požiadavky (v ďalšej verzii sľubujú pridať automatické presmerovanie na vedúceho). Hlavný dôraz sa kladie na odolnosť voči chybám, preto sa DBMS škaluje iba pre operácie čítania, zatiaľ čo operácie zapisovania sú úzkym miestom. Je možné spustiť klaster rqlite z jedného uzla a toto riešenie môže byť použité na organizovanie prístupu k SQLite cez HTTP bez poskytovania odolnosti voči chybám.
Údaje SQLite na každom uzle sú uchovávané nie v súbore, ale v pamäti. Na úrovni vrstvy s implementáciou protokolu Raft sa vedie denník všetkých príkazov SQLite, ktoré vedú k zmene databázy. Tento denník sa používa pri replikácii (replikácia na úrovni reprodukcie požiadaviek na iných uzloch), pri spúšťaní nového uzla alebo na obnovenie po strate konektivity. Na zníženie veľkosti denníka sa vykonáva automatické balenie, ktoré sa spúšťa po zadanom počte zmien a vedie k vytvoreniu snímky, z ktorej sa začne viesť nový denník (stav databázy v pamäti je identický ako snímka + nahromadený denník zmien).
Vlastnosti rqlite:
- Jednoduchosť nasadenia klasteru, bez potreby samostatnej inštalácie SQLite.
- Možnosť rýchlo získať replikované SQL úložisko.
- Pripravenosť na použitie v pracovných projektoch (production-grade).
- Priestor pre HTTP(S) API, ktorý umožňuje aktualizovať dáta v dávkach a určiť vedúci uzol klastru. Taktiež je k dispozícii rozhranie príkazového riadku a klientské knižnice pre rôzne programovacie jazyky.
- Existencia služby na zisťovanie iných uzlov, ktorá umožňuje dynamicky vytvárať klastre.
- Podpora šifrovania prenosu dát medzi uzlami.
- Možnosť nastaviť úroveň overovania aktuálnosti a konzistentnosti dát pri čítaní.
- Voliteľná možnosť pripojenia uzlov v režime iba na čítanie, ktoré sa nezúčastňujú na určení konsenzu a sú využívané na zvyšovanie škálovateľnosti klastru pri operáciách čítania.
- Podpora vlastných transakčných foriem založených na zlúčení príkazov v jednom dopyte (transakcie založené na BEGIN, COMMIT, ROLLBACK, SAVEPOINT a RELEASE nie sú podporované).
- Podpora vytvárania horúcich záloh.
V novom vydaní:
- Pridaná podpora automatického klastrovania rqlite pomocou novej služby zisťovania uzlov, ktorá môže fungovať na základe distribuovaných úložísk Consul a etcd. Služba umožňuje uzlom rqlite automaticky sa nájsť – administrátor musí spustiť niekoľko uzlov na rôznych serveroch, uvádzajúc spoločnú adresu klastru Consul alebo etcd (napríklad „example.com:8500“), a uzly sa automaticky zlúčia do klastru. Vedúci uzol pravidelne aktualizuje v úložisku Consul alebo etcd informácie o svojej adrese, čo umožňuje neskôr zmeniť lídra bez potreby prekonfigurovania ostatných uzlov a takisto pridávať nové uzly aj po zmene lídra. Podpora staršej služby zisťovania uzlov (Discovery mode), fungujúcej na báze AWS Lambda, bola ukončená.
- V CLI rozhraní je povolené zadať viacero hostiteľov – ak prvý uzol nie je dostupný, oslovia sa nasledujúce hostiteľské uzly.
- Prepracovaný kód na analýzu argumentov príkazového riadku rqlited.
- Ukončené používanie zastaraného balíka protobuf.
- Úložisko BoltDB, ktoré sa používa v implementácii protokolu Raft, bolo nahradené bbolt, forkom od projektu etcd.
Zdroj: opennet.ru
