Издаден е 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster