Az rqlite 6.0 kiadása, egy elosztott, hibatűrő SQLite alapú DBMS

Bemutatják az elosztott DBMS rqlite 6.0 kiadását, amely az SQLite-ot tárolómotorként használja, és lehetővé teszi a szinkronizált tárolók fürtjének munkájának megszervezését. Az rqlite egyik jellemzője az elosztott hibatűrő tárolók egyszerű telepítése, üzembe helyezése és karbantartása, amely némileg hasonlít az etcd-hez és a Consulhoz, de kulcs/érték formátum helyett relációs adatmodellt használ. A projekt kódja Go nyelven íródott, és az MIT licenc alatt kerül terjesztésre.

Az összes csomópont szinkronizált állapotban tartásához a Raft konszenzus algoritmust használjuk. Az Rqlite az eredeti SQLite könyvtárat és a szabványos go-sqlite3 illesztőprogramot használja, amely tetején egy réteg indul el, amely feldolgozza az ügyfél kéréseit, replikációt hajt végre más csomópontokra, és figyeli a konszenzus elérését a vezető csomópont kiválasztásában.

Az adatbázis módosítását csak a vezetőként kiválasztott csomópont végezheti el, de írási műveletekkel rendelkező kapcsolatokat is elküldhetünk a fürt többi csomópontjához, amelyek visszaadják a vezető címét a kérés megismétléséhez (a következő verzióban ígéretet tesz a kérések automatikus továbbítására a vezetőnek). A fő hangsúly a hibatűrésen van, így a DBMS csak olvasási műveletekkel skálázódik, és az írási műveletek jelentik a szűk keresztmetszetet. Lehetőség van egy rqlite-fürt futtatására egyetlen csomópontból, és ez a megoldás használható az SQLite elérésére HTTP-n keresztül anélkül, hogy hibatűrést biztosítana.

Az egyes csomópontokon lévő SQLite adatok nem fájlban, hanem a memóriában tárolódnak. A Raft protokoll megvalósításával a rétegszinten minden SQLite parancsról naplót vezetnek, amely az adatbázis változásához vezet. Ezt a naplót a rendszer a replikáció során használja (más csomópontokon a kérések reprodukálásának szintjén), új csomópont indításakor vagy a kapcsolat elvesztése utáni helyreállításkor. A napló méretének csökkentése érdekében automatikus csomagolást használnak, amely meghatározott számú módosítás után indul, és egy pillanatfelvétel rögzítéséhez vezet a lemezen, amelyhez kapcsolódóan új naplót kezdenek vezetni (az adatbázis állapota a memóriában megegyezik a pillanatfelvétellel + a felhalmozott változásnaplóval).

Az rqlite jellemzői:

  • Könnyen telepíthető egy fürt, külön SQLite-telepítés nélkül.
  • Replikált SQL tárhely gyors beszerzése.
  • Felhasználásra kész munkaprojektekben (termelési szintű).
  • Egy HTTP(S) API jelenléte, amely lehetővé teszi az adatok kötegelt módban történő frissítését és a fürt vezető csomópontjának meghatározását. Ezenkívül parancssori felületet is biztosít, és lehetőséget ad az SQLite-hoz épített különféle klienskönyvtárak használatára.
  • Más csomópontok azonosítására szolgáló szolgáltatás elérhetősége, amely lehetővé teszi a fürtök dinamikus létrehozását.
  • A csomópontok közötti adatcsere titkosításának támogatása.
  • Lehetőség az adatok relevanciájának és konzisztenciájának ellenőrzési szintjének konfigurálására olvasás közben.
  • Opcionális lehetőség olyan csomópontok csak olvasható módban történő összekapcsolására, amelyek nem vesznek részt a konszenzus meghatározásában, és a fürt skálázhatóságának növelésére szolgálnak az olvasási műveletekhez.
  • A saját tranzakciós formájának támogatása a parancsok egy kérésben történő kombinálása alapján (a BEGIN, COMMIT, ROLLBACK, SAVEPOINT és RELEASE alapú tranzakciók nem támogatottak).
  • Támogatás forró biztonsági mentések készítéséhez.

Az új kiadás jelentős felépítési változtatásokat vezet be, amelyek célja a fürt megbízhatóságának növelése az olvasási és írási kérelmek megfelelő fürtcsomópontokhoz való irányítási folyamatának javításával. Az rqlite csomópontok mostantól több logikai kapcsolatot is multiplexelhetnek egymás között a csomópontok között a Raft protokoll által létrehozott TCP-kapcsolatok használatával. Ha egy kérés vezetői jogosultságot igényel, de azt egy másodlagos csomópontnak küldik, a másodlagos csomópont meghatározhatja a vezető címét, és továbbadhatja azt az ügyfélnek anélkül, hogy Raft konszenzusszámításokat végezne.

A változás azt is megszüntette, hogy külön metaadat-szinkronizálási komponensre van szükség, és megszűnt a Raft állapot és a metaadatok külön kezelése. A másodlagos csomópontok már csak szükség esetén küldenek kéréseket a vezető csomópontnak, amikor meg kell találniuk a vezető csomópont címét. Az API lehetővé teszi, hogy információkat szerezzen a fürt többi csomópontjának állapotáról. A ".sysdump" parancs hozzáadásra került a parancssori felülethez.

Forrás: opennet.ru

Hozzászólás