Paxos和Raft 的异同

Paxos 和 Raft的异同

Paxos(主要是 Multi-Paxos) 其实和 Raft 非常相似,他们的共同点包括:

  • 从所有节点中选出一个领导者,它接受所有的写操作,并将日志发送给跟随者;
  • 多数派复制了日志后,该日志提交,所有成员最终将该日志中的命令应用于他们的状态机;
  • 如果领导者失败了,多数派会选出一个新的领导者;
  • 两者都满足状态机安全性和领导完整性。状态机安全性指,如果一个节点上的状态机应用了某个索引上的日志,那么其他节点永远不会在同一个索引应用一个不同的日志。领导完整性指,如果一个命令 c 在任期 t 和索引 i 处被领导者提交,那么任期大于 t 的任何领导者在索引 i 处存储同样的命令 c。

Raft 相对于 Paxos 有以下三个优点:表现形式(Presentation)、简单性(Simplicity)和高效的领导者选举算法。

  • 首先是表现形式,Raft 的表现形式是更为友好的。
  • 第二点是简单性。第一,Raft 按顺序提交日志,而 Paxos 允许日志不按顺序提交,但需要一个额外的协议来填补可能因此而出现的日志空洞。第二,Raft 中的所有日志的副本都有相同的索引、任期和命令,而 Paxos 中这些任期可能有所不同。
  • 第三点是 Raft 具备了一个高效的领导者选举算法。Paxos 论文中给出的选举算法是通过比较服务器 id 的大小,几个节点同时竞选时,服务器 id 较大的节点胜出。问题是,这样选出的领导者如果缺少一些日志,它不能立即执行写操作,必须首先从别的节点那里复制一些日志。Raft 日志总能选出拥有多数派日志的节点,从而不需要追赶日志,虽然有时候选举会因为瓜分选票而重试,但总体来说是一个更有效率的选举算法。
  • 对于 Paxos 算法,如果一个服务器非常落后,甚至落后了几天的日志,但却在某个时候选为了领导者,这将导致一定时间的阻塞。可在 Raft 算法中,永远不会选出日志落后的节点。

猜你喜欢

转载自blog.csdn.net/weixin_46645965/article/details/135401435