Лёгкая отказоустойчивая распределённая реляционная база данных на SQLite с репликацией между узлами через консенсус Raft.
hashicorp/raft
Библиотека на Go для реализации консенсуса Raft, управления реплицируемыми журналами и реплицируемыми конечными автоматами.
- Звёзды
- 9,161
- Форки
- 1,105
- Открытые issues
- 73
- Последний коммит
- 20 дней назад
Что это?
raft — библиотека на Go, реализующая алгоритм консенсуса Raft. Она управляет реплицируемым журналом и позволяет подключить собственный конечный автомат (FSM), чтобы несколько узлов применяли одну и ту же последовательность команд и поддерживали идентичное состояние. Библиотека предназначена для создания распределённых систем с согласованностью и устойчивостью к разделению сети (CP), обладающих определённой отказоустойчивостью.
Библиотека отвечает за выбор лидера, репликацию журнала, отслеживание фиксации записей и автоматическое создание снимков с компактизацией журнала для ограничения использования диска. Обычно кластеры запускают на 3 или 5 серверах, что позволяет выдержать отказ одного или двух узлов соответственно. Состав кластера можно менять динамически, пока доступен кворум. Также поддерживаются серверы без права голоса и подключаемый поставщик адресов на транспортном уровне.
Бэкенды для хранения журнала и стабильного хранилища разделены: в качестве варианта на чистом Go упоминается основанный на Bbolt raft-boltdb, а бэкенд на базе MDB находится в отдельном репозитории. Метрики можно передавать через armon/go-metrics или hashicorp/go-metrics; выбор задаётся build tag.
Ключевые возможности
- 01Выбор лидера и репликация журнала по протоколу Raft
- 02Подключаемый интерфейс конечного автомата для логики приложения
- 03Автоматическое создание снимков и компактизация журнала
- 04Динамическое изменение состава кластера и серверы без права голоса
- 05Подключаемые бэкенды для хранения журнала и стабильного хранилища
Сценарии использования
- Создание реплицируемого key-value-хранилища или другого сервиса со строгой согласованностью
- Поддержание согласованности метаданных в небольшом кластере серверов
- Добавление высокой доступности с выбором лидера в Go-сервис
Быстрый старт
- 1
Убедитесь, что установлен Go версии 1.16 или выше
go version - 2
Прочитайте документацию Godoc для библиотеки
Что важно знать
- Это библиотека Go, а не автономный сервер, поэтому вам нужно самостоятельно создать FSM и транспортный уровень.
- Рекомендуемые бэкенды для постоянного хранения журналов (raft-mdb) находятся в отдельных репозиториях, а для raft-mdb требуется cgo.
В подборках
Темы
Частые вопросы
- Что такое raft?
- Библиотека на Go для реализации консенсуса Raft, управления реплицируемыми журналами и реплицируемыми конечными автоматами. raft — библиотека на Go, реализующая алгоритм консенсуса Raft. Она управляет реплицируемым журналом и позволяет подключить собственный конечный автомат (FSM), чтобы несколько узлов применяли одну и ту же последовательность команд и поддерживали идентичное состояние. Библиотека предназначена для создания распределённых систем с согласованностью и устойчивостью к разделению сети (CP), обладающих определённой отказоустойчивостью.
- raft можно использовать бесплатно? Какая у него лицензия?
- raft распространяется с открытым исходным кодом под лицензией MPL-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- raft всё ещё поддерживается?
- Активно поддерживается. Последний коммит в raft — 18 окт. 2026 г..
- Для чего можно использовать raft?
- Создание реплицируемого key-value-хранилища или другого сервиса со строгой согласованностью Поддержание согласованности метаданных в небольшом кластере серверов Добавление высокой доступности с выбором лидера в Go-сервис
- Как установить raft?
- Убедитесь, что установлен Go версии 1.16 или выше: go version Прочитайте документацию Godoc для библиотеки
- Где скачать raft?
- Исходный код и инструкции по установке — на GitHub: https://github.com/hashicorp/raft
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Apache ZooKeeper — распределённый сервис координации с иерархическим хранилищем «ключ-значение» для конфигурации, именования и синхронизации в распределённых системах.
Распределённое надёжное key-value хранилище для критически важных данных распределённых систем на основе консенсуса Raft с gRPC API.
Лёгкая библиотека отказоустойчивости для Java с декораторами Circuit Breaker, Rate Limiter, Retry, Bulkhead и Time Limiter для функционального кода.
Реализация паттерна Circuit Breaker для Python: прерывает вызовы к сбоящим зависимостям, защищая остальную систему.
Корпоративный permissioned-фреймворк распределённого реестра на Go для создания блокчейн-решений и приложений с подключаемыми компонентами.