paxos理论,raft工程:
增加committed状态,集成成员管理,multiple paxos的实现
效果:Raft 等价于 (multi-)Paxos;
效率:Raft 与 Paxos 一样高效;
结构:Raft 将 leader 选举、日志复制和安全性等关键元素分离,强一致性以减少必须考虑状态的数量;
安全性:Raft 包括变更集群成员机制,用重叠大多数(overlapping majorities)来保证安全性。
连续性:
raft用日志连续性简化Paxos,选举termID最大做leader,保证当选后,不需对本地旧日志重新投票,请follower直接抓。
multi-paxos即成多数派,仍用新proposalID走一遍prepare-accept过程,明确标记的多数派的entry不重新投票,未确认是否形成多数派entry,要求新任leader用新proposalID重新投票。
multi-paxos日志相互独立,1号日志未确认,2号日志确认形成多数派备份。
https://mp.weixin.qq.com/s/RkMeYyUck1WQPjNiGvahKQ
https://www.zhihu.com/question/36648084
---------------------下面未完成,太干货了5555555555555555,要严肃性学习------------------
二、比较
Raft易理解,日志连续性简化:
(1)Leader在。向Follower同步日志
(2)Leader挂掉,Leader选举算法选新
1、paxos理论一致性,应用工程mulit-paxos
Zookeeper的ZAB,Viewstamped Replication(VR),raft,multi-paxos,都称为Leader-based一致性协议。
2、multi-paxos leader对经典paxos优化,选择一个proposer为leader降低多proposer冲突,多leader安全的。经典的paxos两个阶段,询问值,询问结果提出值。
VR,ZAB,Raft强调合法leader的唯一性协议,从leader角度描述协议流程,论证确性。实际和Paxos一样原理来保证协议的安全性.
3、都是一旦entries(raft叫日志,paxos叫提案)得多数赞成,就定下来,不丢不改,最终都赞它。用数字标识leader合法性,multi-paxos中叫proposer-id,Raft叫term。最大合法。raft选举阶段,老leader可还活,只一个leader,term不一样。
4、raft协议选举出Leader有全部可被提交日志(可从leader流向follower在协议中)
multi-paxos需额外流程从其它节点获取补全。需要注意的是日志可以被提交和日志已经被提交是两个概念,区别像前方有块石头和我知我前方有块石头。
5、日志可以被提交,保证不丢失,multi-paxos天然保证了这一点,这也是为什么新leader对于尚未被确认已经提交的日志需要重新执行经典paxos的阶段一,来补全可能缺失的已经被提交的日志,强制新Leader提交term的no-op 日志确保。
6、(1)Raft协议强调日志的连续性:不同节点上term相同日志,必然相同,之前日志也相同。leader想follower同步日志时,比对日志快;日志commit(提交)也连续。被提交,代表之前所有都已被提交,可被提交,之前日志都可被提交。知道节点日志,只需要获取它最后日志的序号和term。
例子:A,B,C三台机器,C是Leader,term是3,A告诉C它们最后一个日志的序列号都是4,term都是3,那么C就知道A肯定有序列号为1,2,3,4的日志,而且和C中的序列号为1,2,3,4的日志一样,这是raft协议日志的连续性所强调的,好了那么Leader知道日志1,2,3,4已经被多数派(A,C)拥有了,可以提交了。多数派存节点有全部已提交日志。选最后一条日志term最大且序号最大作为leader,
但是B没有,而B当选leader。两种可能(1)A最后日志term小于B;(2)A最后日志的term等于B,A的日志少于B。
(2)multi-paxos则允许日志有空洞:新leader产生后,可能缺失可被提交日志,重新确认未提交日志是否可被commit,向多数派询问完成(很大的优化空间,并到leader选举阶段,所有日志确认和学习合并一轮消息中,减少消息数目)。
无论是Raft还是multi-paxos,新leader对于未提交的日志,要重新提交,不能随意覆写,因为两者都无法判定这些未提交的日志是否已经被之前的leader提交了。
区别在于日志是否连续造成的