Dqlite расширяет SQLite на кластеры


Распределенная база данных, которая расширяет SQlite на кластеры машин, недавно была обновлена до ветви 1.0.

Dqlite («распределенный SQLite») распространяет SQLite на кластер машин с автоматическим переключением при отказе и высокой доступностью. Он использует C-Raft, оптимизированную реализацию Raft на C, для достижения высокопроизводительного транзакционного консенсуса и отказоустойчивости, сохраняя при этом эффективность SQlite и крошечные размеры. SQLite — это наиболее широко используемая в мире реализация встроенного SQL.

Dqlite имеет асинхронную однопоточную реализацию с использованием libuv в качестве цикла событий, а разработчики реализовали собственный протокол проводной связи, оптимизированный для примитивов и типов данных SQLite.

Самым высокопрофессиональным пользователем Dqlite является диспетчер системных контейнеров LXD (LinuX Daemon), который использует dqlite для обеспечения высокой доступности при работе в кластерном режиме.

C-Raft — это настроенная вручную реализация алгоритма консенсуса Raft на языке C. Алгоритмы консенсуса обеспечивают сохранение данных в случае потери одной или нескольких машин в кластере, пока выживет большинство.

Первоначально Dqlite был реализован в Go, но был переписан на C, поскольку разработчики Canonical столкнулись с проблемами производительности из-за того, как Go взаимодействует с C: Go рассматривает вызов функции в C, который длится более 20 микросекунд, как системный вызов блокировки. Таким образом, горутина, выполняющая этот вызов C, помещается в очередь ожидания, и ее возобновление вызовет переключение контекста, что снизит производительность.

Разработчики говорят, что Dqlite предлагает полностью асинхронный сетевой и дисковый ввод-вывод, а также постоянное хранилище на диске для журналов транзакций. Он был протестирован на предмет использования памяти и эффективности сети и предлагает быстрое восстановление для восстановления системы. Он работает на архитектурах ARM, X86, POWER и IBM Z, но на данный момент не поддерживает ни Windows, ни MacOS. Есть стабильный клиент Golang и документированный проводной протокол для других языков.


Добавить комментарий