feat(README): reorganize assuming someone knows raft
People who find this repo probably already know a bit about raft. So, lets tell them about the current state of the project, the features that are implemented and the example projects first.pull/820/head
parent
c8de7dbb6e
commit
dbed707bdb
41
README.md
41
README.md
|
@ -9,8 +9,35 @@ This is an Go implementation of the Raft distributed consensus protocol.
|
|||
Raft is a protocol by which a cluster of nodes can maintain a replicated state machine.
|
||||
The state machine is kept in sync through the use of a replicated log.
|
||||
|
||||
For more details on Raft, you can read [In Search of an Understandable Consensus Algorithm](https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf) by Diego Ongaro and John Ousterhout.
|
||||
For more details on Raft, you can read [In Search of an Understandable Consensus Algorithm][raft-paper] by Diego Ongaro and John Ousterhout.
|
||||
|
||||
## Project Status
|
||||
|
||||
This library is feature complete but should be considered experimental until it has seen more usage.
|
||||
If you have any questions on implementing go-raft in your project please file an issue.
|
||||
There is an [active community][community] of developers who can help.
|
||||
go-raft is under the MIT license.
|
||||
|
||||
[community]: https://github.com/benbjohnson/go-raft/contributors
|
||||
|
||||
### Features
|
||||
|
||||
- Leader election
|
||||
- Log replication
|
||||
- Configuration changes
|
||||
- Log compaction
|
||||
- Unit tests
|
||||
- Fast Protobuf Log Encoding
|
||||
- HTTP transport
|
||||
|
||||
### Projects
|
||||
|
||||
These projects are use go-raft:
|
||||
|
||||
- [coreos/etcd](https://github.com/coreos/etcd) - A highly-available key value store for shared configuration and service discovery
|
||||
- [benbjohnson/raftd](https://github.com/benbjohnson/raftd) - A reference implementation for using the go-raft library for distributed consensus.
|
||||
|
||||
If you have a project that you're using go-raft in, please add it to this README so others can see implementation examples.
|
||||
|
||||
## The Raft Protocol
|
||||
|
||||
|
@ -56,15 +83,9 @@ By ensuring that this log is replicated identically between all the nodes in the
|
|||
Replicating the log under normal conditions is done by sending an `AppendEntries` RPC from the leader to each of the other servers in the cluster (called Peers).
|
||||
Each peer will append the entries from the leader through a 2-phase commit process which ensure that a majority of servers in the cluster have entries written to log.
|
||||
|
||||
## Project Status
|
||||
## History
|
||||
|
||||
The go-raft library is feature complete but in alpha.
|
||||
There is a reference implementation called [raftd](https://github.com/benbjohnson/raftd) that demonstrates how to use the library
|
||||
Ben Johnson started this library for use in his behavioral analytics database called [Sky](https://github.com/skydb/sky).
|
||||
He put it under the MIT license in the hopes that it would be useful for other projects too.
|
||||
|
||||
The library will be considered experimental until it has significant production usage.
|
||||
I'm writing the library for the purpose of including distributed processing in my behavioral analytics database called [Sky](https://github.com/skydb/sky).
|
||||
However, I hope other projects can benefit from having a distributed consensus protocol so the go-raft library is available under MIT license.
|
||||
|
||||
If you have a project that you're using go-raft in, please add it to this README and send a pull request so others can see implementation examples.
|
||||
If you have any questions on implementing go-raft in your project, feel free to contact me on [GitHub](https://github.com/benbjohnson), [Twitter](https://twitter.com/benbjohnson) or by e-mail at [ben@skylandlabs.com](mailto:ben@skylandlabs.com).
|
||||
[raft-paper]: https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf
|
||||
|
|
Loading…
Reference in New Issue