raft算法跟paxos,zab(zookeeper atomic broadcast)算法类似,设计一个一致性算法,在一个分布式系统中实现一个分布式的、高可用的、一致性的存储系统。
raft的特点是设计简单,易于程序员的理解和实现,并不是那么抽象。
raft算法的核心思想和关键技术点:
- 保证系统中只有一个leader,每次leader选举都是必须具有最新的termID(或者epoch),并拿到一个多数派的选票。
- 每次发布一个新数据,leader必须在一个多数派都commit之后才会将这条记录记录为commit状态;
- follower只会从leader来同步已经提交的数据;
- 如果某个新进入的或者长期宕机的follower起来之后,会跟leader的当前commit log开始比对,发现缺失或者不一致的就一致向前回溯,直到找到一个一直点开始向后同步
- 这就要求潜在的leader上只记录commit的log。也就是说在选举过程中,如果一个candidate的log,没有前面epoch 已经commit的log,在向其他节点申请选票时会被拒绝,这个candidate是无法赢得选举的。
与paxos的相比,raft设计的更为简单,容易被软件工程师所理解,更容易编码实现。