Выпуск rqlite 6.0, размеркаванай адмоваўстойлівай СКБД на аснове SQLite

Прадстаўлены рэліз размеркаванай СКБД rqlite 6.0, якая выкарыстоўвае SQLite у якасці рухавічка захоўвання і дазваляе арганізаваць працу кластара з сінхранізаваных паміж сабой сховішчаў. З асаблівасцяў rqlite адзначаецца прастата ўсталёўкі, разгортванні і суправаджэння размеркаванага адмоваўстойлівага сховішча, чымсьці падобнага на etcd і Consul, але які выкарыстоўвае рэляцыйную мадэль працы з дадзенымі замест фармату ключ/значэнні. Код праекту напісаны на мове Go і распаўсюджваецца пад ліцэнзіяй MIT.

Для падтрымання ўсіх вузлоў у сінхранізаваным стане выкарыстоўваецца алгарытм дасягнення кансэнсусу Raft. Rqlite выкарыстоўвае арыгінальную бібліятэку SQLite і і штатны драйвер go-sqlite3, па-над якімі запускаецца праслойка апрацоўваючая запыты кліентаў, якая выконвае рэплікацыю на іншыя вузлы і якая адсочвае дасягненне кансэнсусу па выбары які лідыруе вузла.

Змены ў БД могуць уносіцца толькі вузлом, які абраны ў якасці лідзіруючага, але злучэнні з аперацыямі запісу могуць накіроўвацца і да іншых вузлоў кластара, якія вернуць адрас лідэра для паўтарэння запыту (у наступнай версіі абяцаюць дадаць аўтаматычны пракід звароту да лідэра). Галоўны ўпор робіцца на адмоваўстойлівасць, таму СКБД маштабуецца толькі па аперацыях чытання, а аперацыі запісы з'яўляюцца вузкім месцам. Магчыма запусціць кластар rqlite з аднаго вузла і такое рашэнне можа выкарыстоўвацца для арганізацыі доступу да SQLite па-над HTTP без падавання адмоваўстойлівасці.

Дадзеныя SQLite на кожным вузле захоўваюцца не ў файле, а ў памяці. На ўзроўні пласта з рэалізацыяй пратаколу Raft вядзецца лог усіх каманд SQLite, якія прыводзяць да змены БД. Дадзены лог выкарыстоўваецца пры рэплікацыі (рэплікацыя на ўзроўні прайгравання запытаў на іншых вузлах), запуску новага вузла ці аднаўленні пасля страты складнасці. Для скарачэння памеру лога ўжываецца аўтаматычнае пакаванне, якая запускаецца пасля зададзенай колькасці змен і прыводзіць да фіксацыі на дыску снапшота, адносна якога пачынае весціся новы лог (стан БД у памяці ідэнтычна снапшоту + назапашанаму логу змен).

Асаблівасці rqlite:

  • Прастата разгортвання кластара, без неабходнасці асобнай усталёўкі SQLite.
  • Магчымасць хутка атрымаць рэплікаванае SQL-сховішча.
  • Гатоўнасць для выкарыстання ў працоўных праектах (Production-grade).
  • Наяўнасць HTTP(S) API, які дазваляе абнаўляць дадзеныя ў пакетным рэжыме і вызначаць які лідыруе вузел кластара. Таксама падаецца інтэрфейс каманднага радка і магчымасць выкарыстання розных кліенцкіх бібліятэк, створаных для SQLite.
  • Наяўнасць сэрвісу для вызначэння іншых вузлоў, які дазваляе ствараць кластары дынамічна.
  • Падтрымка шыфравання абмену дадзеных паміж вузламі.
  • Магчымасць настройкі ўзроўню праверкі актуальнасці і ўзгодненасці даных пры чытанні.
  • Апцыянальная магчымасць падлучэння вузлоў у рэжыме толькі для чытання, якія не прымаюць удзел у вызначэнні кансэнсусу і выкарыстоўваюцца для павелічэння маштабаванасці кластара па аперацыях чытання.
  • Падтрымка ўласнай формы транзакцый на базе аб'яднання каманд у адным запыце (транзакцыі на базе BEGIN, COMMIT, ROLLBACK, SAVEPOINT і RELEASE не падтрымліваюцца).
  • Падтрымка стварэння гарачых рэзервовых дзід.

У новым выпуску ўнесены значныя архітэктурныя змены, накіраваныя на павышэнне надзейнасці кластара за кошт паляпшэння працэсу накіравання запытаў на чытанні і запіс да карэктных вузлоў кластара. Вузлы rqlite зараз могуць мультыплексаваць паміж сабой некалькі лагічных злучэнняў, выкарыстаючы TCP-злучэнні, усталяваныя паміж вузламі пратаколам Raft. Калі запыт патрабуе паўнамоцтваў які лідыруе вузла, але адпраўлены другаснаму вузлу, другасны вузел можа вызначыць адрас лідэра і перадаць яго кліенту, без выканання разліку кансенсусу па пратаколе Raft.

Змена таксама дазволіла пазбавіцца ад асобнага кампанента для сінхранізацыі метададзеных і выключыць асобную апрацоўку стану Raft і метададзеных. Другасныя вузлы зараз накіроўваюць запыты да вузла-лідэра толькі па неабходнасці, калі трэба пазнаць адрас які лідыруе вузла. У API прадстаўлена магчымасць атрымання інфармацыі аб стане іншых вузлоў у кластары. У інтэрфейс каманднага радка дададзена каманда ".sysdump".

Крыніца: opennet.ru

Дадаць каментар