A Go library implementing the Raft consensus protocol for managing replicated state machines in distributed systems.
raft is a Go library that implements the Raft consensus protocol, providing a way to manage a replicated log and build replicated state machines. It solves the problem of achieving consensus in distributed systems, enabling Consistent, Partition Tolerant (CP) architectures with controlled fault tolerance.
Go developers building distributed systems that require consensus, such as databases, key-value stores, or coordination services where fault tolerance and consistency are critical.
Developers choose raft for its production-ready, well-tested implementation of the Raft algorithm, its integration with the Go ecosystem, and its ability to handle dynamic cluster membership and automatic log compaction, simplifying the development of reliable distributed applications.
Golang implementation of the Raft consensus protocol
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Implements the complete Raft consensus algorithm as described in the original paper, ensuring reliable and understandable consensus for building distributed systems.
Allows adding or removing servers from the cluster while maintaining availability, as long as a quorum is present, which is essential for scalable operations.
Provides snapshotting to capture FSM state and compact the replicated log, preventing unbounded disk usage and minimizing replay time during recovery.
Used in HashiCorp products like Consul, indicating it's well-tested and suitable for real-world, mission-critical distributed applications.
Requires developers to implement their own Finite State Machine from scratch, adding significant development overhead and potential for bugs in state management.
Key components like LogStore and StableStore rely on external repositories (e.g., raft-mdb or raft-boltdb), complicating setup, versioning, and maintenance.
The deprecation of armon/go-metrics and migration to hashicorp/go-metrics requires build tag changes and updates, adding operational hassle and potential for errors.