Издаване на 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 хранилище.
  • Готов за използване в работни проекти (производствен клас).
  • Наличието на HTTP(S) API, който ви позволява да актуализирате данни в пакетен режим и да определите водещия възел на клъстера. Той също така предоставя интерфейс на командния ред и възможност за използване на различни клиентски библиотеки, създадени за SQLite.
  • Наличие на услуга за идентифициране на други възли, което ви позволява да създавате клъстери динамично.
  • Поддръжка за криптиране на обмен на данни между възли.
  • Възможност за конфигуриране на нивото на проверка на уместността и последователността на данните при четене.
  • Опционална възможност за свързване на възли в режим само за четене, които не участват в определянето на консенсуса и се използват за увеличаване на мащабируемостта на клъстера за операции за четене.
  • Поддръжка за вашата собствена форма на транзакции, базирана на комбиниране на команди в една заявка (не се поддържат транзакции, базирани на BEGIN, COMMIT, ROLLBACK, SAVEPOINT и RELEASE).
  • Поддръжка за създаване на горещи архиви.

Новата версия въвежда значителни архитектурни промени, насочени към увеличаване на надеждността на клъстера чрез подобряване на процеса на маршрутизиране на заявки за четене и запис към правилните възли на клъстера. rqlite възлите вече могат да мултиплексират множество логически връзки помежду си, като използват TCP връзки, установени между възлите от протокола Raft. Ако дадена заявка изисква лидерски права, но е изпратена до вторичен възел, вторичният възел може да определи адреса на лидера и да го предаде на клиента, без да извършва консенсусни изчисления на Raft.

Промяната също елиминира необходимостта от отделен компонент за синхронизиране на метаданни и елиминира отделната обработка на състоянието и метаданните на Raft. Вторичните възли вече изпращат заявки до водещия възел само когато е необходимо, когато трябва да открият адреса на водещия възел. API предоставя възможност за получаване на информация за състоянието на други възли в клъстера. Командата ".sysdump" е добавена към интерфейса на командния ред.

Източник: opennet.ru

Добавяне на нов коментар