第三篇说成员变化,有了对选举和日志复制的认识,这个模块就很轻松简单了。
成员变化就两种情况,增加删除更换节点,和转移领导人。
第三篇说成员变化,有了对选举和日志复制的认识,这个模块就很轻松简单了。
成员变化就两种情况,增加删除更换节点,和转移领导人。
日志复制是所有分布式共识算法最重要也是最复杂的部分,需要考虑各种各样安全性,比如机器挂了持久化没做、网络分区导致term&logindex不一致、成员变化带来两个任期相同的leader、异步网络出现日志乱序等等。
很多个细节,我边看源码边照着论文理解,一个异常判断反复推敲它的作用,想象发生的场景。这是源码级熟悉raft的好处,多多少少能身临其境,获取更多的实战校验。
后面至少还有两篇,成员变化和日志压缩。
花了点时间做张较为直观的简化流程图,红色箭头是日志复制的过程。还是挺复杂的,包括不限于Node、LogManager、Replicator、BallotBox、StateMachine之间的调用,其实还有快照,以后再讲。
本文会分为三部分讲,写请求日志落盘、日志复制、commit执行StateMachine。
最近潜心cap理论和raft算法,选用了蚂蚁金服的sofa-jraft,深入研究具体的实现。该框架参考自百度的BRAFT,可以说是非常优秀的分布式通用框架,很值得学习。
Raft算法的理论就不再多说了,感性认识的话可以看这个动画,非常好懂。
示例在github的jraft-example
|
|
分布式系统关键单体就是节点Node,它包括raft分布式算法中需要的所有行为,不限于选举、投票、日志、复制、接收rpc请求等,梦开始的地方。