Awesome
Graft
A RAFT Election implementation in Go. More information on RAFT can be found in this research paper and this video.
Overview
RAFT is a consensus based algorithm that produces consistent state through replicated logs and leader elections.
Example usage of the election algorithm is to produce guaranteed leaders for N-wise scalability and elimination of SPOF (Single Point of Failure) within a system.
Example Usage
ci := graft.ClusterInfo{Name: "health_manager", Size: 3}
rpc, err := graft.NewNatsRpc(&nats.DefaultOptions)
errChan := make(chan error)
stateChangeChan := make(chan StateChange)
handler := graft.NewChanHandler(stateChangeChan, errChan)
node, err := graft.New(ci, handler, rpc, "/tmp/graft.log");
// ...
if node.State() == graft.LEADER {
// Process as a LEADER
}
select {
case sc := <- stateChangeChan:
// Process a state change
case err := <- errChan:
// Process an error, log etc.
}
License
Unless otherwise noted, the NATS source files are distributed under the Apache Version 2.0 license found in the LICENSE file.