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

OSCHINA-MIRROR/mirrors-raft

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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

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

Команда 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 )

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

Введение

Реализация консенсуса Raft на языке C. Развернуть Свернуть
LGPL-3.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