1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-raft

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 02:14 22e3e63

Данный проект больше не поддерживается.

Английский|简体中文

Команда dqlite больше не поддерживает нашу реализацию raft в качестве независимого проекта. Вместо этого исходный код raft был включён в canonical/dqlite как частная деталь реализации. v0.18.1 — это последний выпуск libraft от dqlite. Мы приносим извинения за любые неудобства, вызванные этим изменением.

Если вы зависите от dqlite, но не от raft напрямую, см. canonical/dqlite, чтобы получить актуальные инструкции по использованию конфигурации сборки dqlite с включенным raft. Если вы ранее зависели от libraft от dqlite, вам следует перейти на поддерживаемый форк cowsql/raft.

В репозитории dqlite открыта дискуссионная ветка для любых вопросов об этом изменении.

Остальная часть этого README представляет только исторический интерес.


Полностью асинхронная реализация протокола консенсуса Raft на языке C.

Библиотека имеет модульную структуру: её основная часть реализует только основную логику алгоритма Raft, полностью независимым от платформы способом. Кроме того, подключаемый интерфейс определяет реализацию ввода-вывода для сетевого взаимодействия (отправка и получение RPC-сообщений) и сохранения данных на диске (сохранение записей журнала и снимков).

При сборке библиотеки с использованием параметров по умолчанию предоставляется стандартная реализация интерфейса ввода-вывода. Она основана на libuv и должна подходить для подавляющего большинства случаев использования. Единственное ограничение заключается в том, что в настоящее время она требует Linux, поскольку использует API Linux AIO для дискового ввода-вывода. Приветствуются патчи для добавления поддержки других платформ.

См. raft.h для полной документации.

Лицензия

Эта библиотека raft на C выпущена под слегка изменённой версией LGPLv3, которая включает исключение авторских прав, позволяющее пользователям статически связывать код библиотеки в своём проекте и выпускать окончательную работу на своих условиях. См. полный текст лицензии.

Особенности

Данная реализация включает все основные функции, описанные в диссертации Raft:

  • Выборы лидера.
  • Репликация журнала.
  • Уплотнение журнала.
  • Изменения членства.

Также она включает несколько дополнительных улучшений:

  • Оптимистическое конвейерное выполнение для уменьшения задержки репликации журнала.
  • Параллельная запись на диск лидера.
  • Автоматический уход в отставку при потере кворума лидером.
  • Расширение передачи лидерства.
  • Протокол предварительного голосования.

Установка

Если вы работаете в системе на основе Debian, вы можете получить последнюю версию разработки из dev PPA dqlite:

sudo add-apt-repository ppa:dqlite/dev
sudo apt-get update
sudo apt-get install libraft-dev

Сборка

Для сборки libraft из исходного кода вам потребуется:

  • Достаточно свежая версия libuv (v1.18.0 или новее).
  • По желанию, но рекомендуется, достаточно свежая версия liblz4 (v1.7.1 или новее).
sudo apt-get install libuv1-dev liblz4-dev libtool pkg-config build-essential
autoreconf -i
./configure --enable-example
make

Пример

Лучший способ понять, как использовать библиотеку, — это, вероятно, прочитать код примера сервера, включённого в исходный код.

Вы также можете увидеть пример сервера в действии, выполнив:

./example/cluster

который создаёт небольшой кластер из 3 серверов, запускает образец рабочей нагрузки и случайным образом останавливает и перезапускает сервер время от времени.

Краткое руководство

Рекомендуется прочитать raft.h для получения подробной информации о документации, но вот краткое высокоуровневое руководство о том, что вам нужно сделать (обработка ошибок опущена для краткости).

Создайте экземпляр стандартной реализации интерфейса raft_io (или реализуйте свою собственную, если та, что поставляется с библиотекой, вас не устраивает).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-raft.git
git@api.gitlife.ru:oschina-mirror/mirrors-raft.git
oschina-mirror
mirrors-raft
mirrors-raft
master