对Raft与Paxos的关系的理解

这段时间学习了下分布式的一些理论知识,这篇文章主要是说下我对Raft和Paxos的关系的理解(两个算法的学习笔记可以参见前面的一些博文)。

在小秦看来,Raft其实近似是Paxos的一个简化版本。在Mutil-Paxos中,如果存在总统,那么这个总统就对应了Raft中的leader。在Paxos上加上一些限制,可以近似的得到Raft。比如:

1.Raft的commit要求大多数服务器得到日志内容
在Paxos中,如果是Mutil-Paxos,在总统选举出来的情况下,以后的每次选举(及传输日志内容)需要大多数服务器同意即可。因此这点上是一样的。Paxos每一次instance的投票就类似于Raft的AppendEntry,只有收到大多数服务器的确认消息后才算是成功的。

2.Raft中要求“如果term和index一样,那么之前的日志内容一样”
Paxos中,并不强制要求每个服务器上的日志都连续(有空洞的话,空洞后的日志不会的附加到日志链中,直到其变成了leader或者空洞的日志也被获取到了)。因为Paxos中每个成功选举出的日志只要大多数服务器拥有即可。如果加上限定条件,每个服务器只有自己拥有该次选举的前一个日志的时候才投赞成票,那么就和Raft一样了

3.如果leader挂了,Raft强制要求拥有所有commit日志的才能被选举为leader
在Paxos中,如果leader挂了,如果通过PaxosLease算法选举leader的话,选举的时候不一定要求一定要拥有所有日志的才能当选leader,当leader选举出来后,其可以通过其他主机获取到所有的commit的日志。但是这里如果加上限制的话,在2的前提条件下,是可以选举出leader的。

4.Raft的安全性是依靠leader保证的,leader拥有所有的commit的日志
在Paxos中,依靠其数学证明的B1、B2、B3可以保证数据一致性。可以看到在Raft中,leader如果认为是总统的话,B1、B2、B3也是保证的。

从这些点看来,Paxos在实现过程中的一些难点加上限制使其变得容易理解和实现,或许就是Raft算法产生的源头。但是Raft通过term(逻辑时间)来实现日志index的唯一,这个Paxos是没有的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*