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