Byl představen výstup distribuované DBMS rqlite 6.0, která využívá SQLite jako úložný engine a umožňuje organizaci práce clustera synchronizovaných mezi sebou úložišť. Mezi zvláštnostmi rqlite se vyznačuje jednoduchost instalace, nasazení a údržby distribučně odolného úložiště, které je něčím podobné jako etcd a Consul, ale používající relační model práce s daty místo formátu klíč/hodnota. Kód projektu je napsán v jazyce Go a je šířen pod licencí MIT.
Pro udržení všech uzlů ve synchronizovaném stavu se používá algoritmus dosahování konsensu Raft. Rqlite využívá originální knihovnu SQLite a standardní ovladač go-sqlite3, nad kterými běží vrstva zpracovávající požadavky klientů, provádějící replikaci na další uzly a sledující dosažení konsensu při výběru vedoucího uzlu.
Změny v DB může provádět pouze uzel, který byl vybrán jako vedoucí, ale spojení s operacemi zápisu mohou být nasměrována i na další uzly clustera, které vrátí adresu vedoucího pro opakování požadavku (v další verzi slibují přidat automatické přesměrování na vedoucího). Hlavní důraz je kladen na odolnost proti chybám, proto se DBMS škáluje pouze na základě operací čtení, zatímco operace zápisu představují úzké místo. Je možné spustit cluster rqlite z jednoho uzlu a toto řešení může být použito pro organizaci přístupu k SQLite přes HTTP bez zajištění odolnosti proti chybám.
Data SQLite na každém uzlu nejsou uchovávána v souboru, ale v paměti. Na úrovni vrstvy s implementací protokolu Raft se vede log všech příkazů SQLite, které vedou ke změně DB. Tento log se používá při replikaci (replikace na úrovni reprodukování požadavků na dalších uzlech), spuštění nového uzlu nebo obnovení po ztrátě konektivity. Pro snížení velikosti logu se používá automatické balení, které se spustí po stanoveném počtu změn a vede k uložení snímku na disku, vůči kterému začíná být veden nový log (stav DB v paměti je identický se snímkem + kumulativním logem změn).
Vlastnosti rqlite:
- Snadnost nasazení kaskády, bez potřeby samostatné instalace SQLite.
- Možnost rychle získat replikované SQL úložiště.
- Připravenost pro použití v pracovních projektech (Production-grade).
- Disponibilita HTTP(S) API, která umožňuje aktualizaci údajů hromadně a určení vedoucího uzlu clusteru. Je také k dispozici příkazový řádek a možnosti využití různých klientských knihoven vytvořených pro SQLite.
- Existence služby pro určování dalších uzlů, která umožňuje dynamicky vytvářet clustery.
- Podpora šifrování výměny dat mezi uzly.
- Možnost nastavení úrovně kontroly aktuálnosti a konzistence dat při čtení.
- Volitelná možnost připojení uzlů v režimu pouze pro čtení, které se nepodílí na určování konsensu a používají se pro zvýšení škálovatelnosti clusteru u operací čtení.
- Podpora vlastní formy transakcí založené na sloučení příkazů do jednoho dotazu (transakce založené na BEGIN, COMMIT, ROLLBACK, SAVEPOINT a RELEASE nejsou podporovány).
- Podpora vytváření horkých záloh.
V novém vydání byly provedeny významné architektonické změny zaměřené na zvýšení spolehlivosti clusteru tím, že se zlepšil proces směrování požadavků na čtení a zápis na správné uzly clusteru. Uzly rqlite nyní mohou multiplexovat více logických spojení mezi sebou prostřednictvím TCP spojení, která byla ustanovena mezi uzly pomocí protokolu Raft. Pokud požadavek vyžaduje oprávnění vedoucího uzlu, ale je zaslán sekundárnímu uzlu, může sekundární uzel určit adresu vedoucího uzlu a předat ji klientovi, aniž by vykonal konsensuální výpočet podle protokolu Raft.
Tato změna také umožnila odstranění samostatné komponenty pro synchronizaci metadat a vyloučila oddělené zpracování stavu Raft a metadat. Sekundární uzly nyní směrují požadavky na uzel-vedoucí pouze v případě potřeby, když je potřeba zjistit adresu vedoucího uzlu. API nyní nabízí možnost získání informací o stavu dalších uzlů v clusteru. Do příkazového řádku byla přidána nová příkaz " .sysdump ".
Zdroj: opennet.ru
