Kutolewa kwa rqlite 6.0, DBMS iliyosambazwa, inayostahimili makosa kulingana na SQLite

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

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

Изменения в БД могут вносится только узлом, который выбран в качестве лидирующего, но соединения с операциями записи могут направляться и к другим узлам кластера, которые вернут адрес лидера для повторения запроса (в следующей версии обещают добавить автоматический проброс обращения к лидеру). Главный упор делается на отказоустойчивость, поэтому СУБД масштабируется только по операциям чтения, а операции записи являются узким местом. Возможно запустить кластер rqlite из одного узла и такое решение может использоваться для организации доступа к SQLite поверх HTTP без предоставления отказоустойчивости.

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

Vipengele vya rqlite:

  • Rahisi kupeleka nguzo, bila hitaji la usakinishaji tofauti wa SQLite.
  • Uwezo wa kupata haraka uhifadhi wa SQL uliorudiwa.
  • Готовность для использования в рабочих проектах (Production-grade).
  • Наличие HTTP(S) API, позволяющего обновлять данные в пакетном режиме и определять лидирующий узел кластера. Также предоставляется интерфейс командной строки и возможность использования различных клиентских библиотек, созданных для SQLite.
  • Upatikanaji wa huduma ya kutambua nodi zingine, hukuruhusu kuunda vikundi kwa nguvu.
  • Usaidizi wa kusimba ubadilishanaji wa data kati ya nodi.
  • Uwezo wa kusanidi kiwango cha kuangalia umuhimu na uthabiti wa data wakati wa kusoma.
  • Uwezo wa hiari wa kuunganisha nodi katika hali ya kusoma tu, ambayo haishiriki katika kuamua makubaliano na hutumiwa kuongeza kasi ya kikundi kwa shughuli za kusoma.
  • Usaidizi wa aina yako mwenyewe ya miamala kulingana na kuchanganya amri katika ombi moja (shughuli kulingana na BEGIN, COMMIT, ROLLBACK, SAVEPOINT na RELEASE hazitumiki).
  • Msaada wa kuunda chelezo moto.

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

Изменение также позволило избавиться от отдельного компонента для синхронизации метаданных и исключить отдельную обработку состояния Raft и метаданных. Вторичные узлы теперь направляют запросы к узлу-лидеру только по необходимости, когда нужно узнать адрес лидирующего узла. В API предоставлена возможность получения информации о состоянии других узлов в кластере. В интерфейс командной строки добавлена команда «.sysdump».

Chanzo: opennet.ru

Kuongeza maoni