Raft
Raft概述
Raft一致性算法用于保证在分布式的条件下,所有的节点可以执行相同的命令序列,并达到一致的状态。这类的问题可以归结为“Replicated state machines”问题。
Raft一致性算法的保证
Raft特点
相比于Paxos,Raft最大的特点就是可理解性。相信读过Paxos论文的人应该对此深有体会。
Raft把一致性问题,分解成三个比较独立的子问题,并给出每个子问题的解决方法:
选举:描述Raft是如何选择一个leader的,这个部分很受容易理解了。
日志复制:描述Raft的leader是如何把日志复制到集群的各个节点上的。
安全性:描述Raft是如何保证“State Machine Safety Property”。
参考
官方资源(包括了论文、各个语言的实现、一些学习视频)
Paxos
概述
Paxos 协议是一个解决分布式系统中,多个节点之间就某个值(提案)达成一致(决议)的通信协议。它能够处理在少数派离线的情况下,剩余的多数派节点仍然能够达成一致
paxos两阶段提交
总体说来,paxos就是通过两个阶段确定一个决议:
Phase1:确定谁的编号最高,只有编号最高者才有权利提交proposal;
Phase2:编号最高者提交proposal,如果没有其他节点提出更高编号的proposal,则该提案会被顺利通过;否则,整个过程就会重来。
你编号高,我比你更高,反复如此,算法永远无法结束,这叫活锁。FLP Impossibility已经证明,在异步通信中不存在任何一致性算法,活锁便是Paxos无法解决的硬伤。
Phase1,Phase2非常像2PC中的两个阶段,因此paxos本质上是多个2PC交替执行!
另外,即使你明白了,在实现时会知道有多难,工程实现与理论差距很大!