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

Адбыўся рэліз размеркаванай СКБД rqlite 7.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, які дазваляе абнаўляць дадзеныя ў пакетным рэжыме і вызначаць які лідыруе вузел кластара. Таксама прадастаўляецца інтэрфейс каманднага радка і кліенцкія бібліятэкі для розных моў праграмавання.
  • Наяўнасць сэрвісу для вызначэння іншых вузлоў, які дазваляе ствараць кластары дынамічна.
  • Падтрымка шыфравання абмену дадзеных паміж вузламі.
  • Магчымасць настройкі ўзроўню праверкі актуальнасці і ўзгодненасці даных пры чытанні.
  • Апцыянальная магчымасць падлучэння вузлоў у рэжыме толькі для чытання, якія не прымаюць удзел у вызначэнні кансэнсусу і выкарыстоўваюцца для павелічэння маштабаванасці кластара па аперацыях чытання.
  • Падтрымка ўласнай формы транзакцый на базе аб'яднання каманд у адным запыце (транзакцыі на базе BEGIN, COMMIT, ROLLBACK, SAVEPOINT і RELEASE не падтрымліваюцца).
  • Падтрымка стварэння гарачых рэзервовых дзід.

У новым выпуску:

  • Дададзена падтрымка аўтаматычнага кластэрынгу rqlite з выкарыстаннем новага сэрвісу вызначэння вузлоў, які можа працаваць на базе размеркаваных сховішчаў Consul і etcd. Сэрвіс дазваляе вузлам rqlite аўтаматычна знаходзіць адзін аднаго - адміністратару дастаткова запусціць некалькі вузлоў на розных серверах, паказаўшы агульны адрас кластара Consul або etcd (напрыклад, «example.com:8500»), і вузлы аўтаматычна будуць аб'яднаны ў кластар. Лідзіруючы вузел перыядычна абнаўляе ў сховішча Consul ці etcd інфармацыю аб сваім адрасе, што дазваляе ў наступным змяніць лідэра без неабходнасці пераналадкі астатніх вузлоў, а таксама дадаваць новыя вузлы нават пасля змены лідэра. Падтрымка старога сэрвісу вызначэння вузлоў (Discovery mode), які працуе на базе AWS Lambda, спынена.
  • У CLI інтэрфейсе дазволена ўказанне адразу некалькіх хастоў – калі першы вузел апынецца недаступны, будзе ажыццёўлена зварот да наступных хастаў.
  • Перапрацаваны код для разбору аргументаў каманднага радка rqlited.
  • Спынена выкарыстанне састарэлага пакета protobuf.
  • Сховішча BoltDB, якое ўжываецца ў рэалізацыі пратаколу Raft, заменена на bbolt, форк ад праекту etcd.

Крыніца: opennet.ru

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