Компания Canonical опубликовала значительный выпуск проекта Dqlite 1.0 (Distributed SQLite), развивающего совместимый с SQLite встраиваемый SQL-движок, поддерживающий репликацию данных, автоматическое восстановление после сбоев и обеспечение отказоустойчивости через разнесение обработчиков на несколько узлов. СУБД реализована в форме прикрепляемой к приложениям Си-библиотеки и распространяется под лицензией Apache 2.0 (оригинальный SQLite поставляется как общественное достояние). Доступны биндинги для языка Go.

Библиотека является надстройкой над существующей кодовой базой SQLite, которая добавляет поддержку сетевого протокола для связывания между собой нескольких экземпляров приложения, запущенных на разных хостах. Собранное с Dqlite приложение может функционировать как самодостаточный отказоустойчивый кластер, не зависящий от внешних СУБД. На практике Dqlite используется компанией Canonical в системе управления контейнерами LXD. Среди областей применения библиотеки также упоминается создание отказоустойчивых устройств интернета-вещей и обработчиков в системах
Edge-вычислений.

Для обеспечения непротиворечивости при репликации данных применяется метод достижения консенсуса на базе алгоритма Raft, который используется в таких проектах, как etcd, RethinkDB, CockroachDB и OpenDaylight. В Dqlite применяется собственная асинхронная реализация C-raft, написанная на языке Си. Для мультиплексирования обработки соединений и организации запуска сопрограмм используются готовые библиотеки libuv и libco.

По сравнению с похожим проектом rqlite, Dqlite обеспечивает полную поддержку транзакций, может связываться с любыми проектами на языке Си, позволяет использовать функцию time() и применяет репликацию на основе кадров вместо репликации на основе трансляции SQL-выражений.

Особенности Dqlite:

  • Выполнение всех дисковых и сетевых операций в асинхронном режиме;
  • Наличие тестового набора для подтверждения корректности данных;
  • Низкое потребление памяти и эффективный обмен данными по сети;
  • Постоянное хранение на диске БД и лога транзакций (c возможностью кэширования в памяти);
  • Быстрое восстановление после сбоев;
  • Стабильный CLI-клиент на языке Go, который можно использовать для инициализации БД, настройки репликации и подключения/отключения узлов;
  • Поддержка архитектур ARM, X86, POWER и IBM Z;
  • Реализация алгоритма Raft оптимизирована для минимизации задержек при фиксации транзакций.