Об этом проекте
hashicorp/raft — это библиотека на Go, реализующая алгоритм консенсуса Raft, предоставляющая основу для построения реплицируемых конечных автоматов в распределённых системах. Библиотека управляет реплицируемым журналом и интегрируется с абстракцией конечного автомата (FSM) для поддержания согласованного состояния на нескольких узлах.
Ключевые возможности включают:
- **Выбор лидера**: Узлы переходят между состояниями подписчика, кандидата и лидера. Подписчики самостоятельно повышают себя до кандидатов, если в течение периода тайм-аута не получено записей, затем запрашивают голоса у пиров. Кандидат, получивший кворум голосов, становится лидером.
- **Репликация журнала**: Лидер добавляет новые записи журнала (непрозрачные двоичные блоки) в долговременное хранилище и реплицирует их на кворум подписчиков. После фиксации записи применяются к FSM.
- **Автоматическое создание снимков**: Чтобы предотвратить неограниченный рост журнала, Raft автоматически создаёт снимок текущего состояния FSM и уплотняет журнал, удаляя уже применённые записи.
- **Динамическое управление пирами**: Библиотека поддерживает добавление и удаление узлов из кластера при наличии кворума.
- **Бэкенды хранилища**: Основной бэкенд MDBStore находится в отдельном репозитории (raft-mdb), а чистый Go-бэкенд на основе BoltDB доступен (raft-boltdb). Оба могут использоваться как реализации LogStore и StableStore.
- **Выдача метрик**: Поддерживает метрики через armon/go-metrics (по умолчанию) или hashicorp/go-metrics (через build tag), с путём миграции от устаревшей библиотеки armon.
Библиотека требует Go 1.16+ и лицензирована под MPL 2.0. Она основана на статье о Raft «In Search of an Understandable Consensus Algorithm» и сопоставима по производительности с Paxos, при этом задержка фиксации журнала ограничена дисковым вводом-выводом и сетевыми обходами до половины кластера.
Рекомендуемые размеры кластера — 3 или 5 узлов, которые допускают соответственно 1 или 2 отказа узлов, максимизируя доступность. Библиотека используется продуктами HashiCorp, такими как Consul и Nomad, для распределённой координации.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.