一致性算法 paxos,raft,zab

一致性算法 paxos,raft,zab_第1张图片
一致性算法 paxos,raft,zab_第2张图片
并发情况下,执行顺序不一致时,一边增加5,一边重置为0,导致数据不同步
一致性算法 paxos,raft,zab_第3张图片

一致性算法 paxos,raft,zab_第4张图片
一致性算法 paxos,raft,zab_第5张图片

一.basic paxos流程

一致性算法 paxos,raft,zab_第6张图片
文字的表述可以看
https://blog.csdn.net/zsheep/article/details/116846609?ops_request_misc=&request_id=&biz_id=102&utm_term=paxos%E4%B8%A4%E9%98%B6%E6%AE%B5&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-116846609.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

  1. 无故障的basic Paxos
    还是按照上面的4步进行
    一致性算法 paxos,raft,zab_第7张图片

2 . Acceptor失败时的basic Paxos

在下图中,多数派中的一个Acceptor发生故障,Va,Vb成功,Vc失败,多数派大小为2。在这种情况下,Basic Paxos协议仍然成功。

一致性算法 paxos,raft,zab_第8张图片
3. Proposer失败时的basic Paxos

Proposer在提出提案之后但在达成协议之前失败。具体来说,传递到Acceptor的时候失败了,这个时候需要选出新的Proposer(提案人),那么 Basic Paxos协议仍然成功

第三步失败,Proposer需要重新提N+1
一致性算法 paxos,raft,zab_第9张图片
4. 当多个提议者发生冲突时的basic Paxos
最复杂的情况是多个Proposer都进行提案,导致Paxos的活锁问题。

一致性算法 paxos,raft,zab_第10张图片

在第一阶段第二步Promise,
Prepare阶段,提议员张三准备讨论提案1,大部分议员开始谈论1,议员返回成功
Prepare阶段,这个时候提议员李四发现还没有确认一个方案,说开始谈论提案2,议员中的大多数发现编号2大于之前1的 ,就把2作为最大的编号。议员返回成功
Accept阶段 ,张三向议员发送提案1的请求,因为议员只会接受大于2的请求,就拒绝了张三的提案1,返回失败,如果这个时候李四的提案2还没有落地,张三又一次从Prepare阶段开始提案,编号变成了3,李四的方案编号2小于张三的提案3,就作废了,也不能落地
李四把编号变成了4,又在Prepare阶段进行提案,把刚刚张三的提案3也作废了
相互增加编号无限循环
。。。。。。。。。。
。。。。。。。。。。

一致性算法 paxos,raft,zab_第11张图片

解决方法活锁问题

针对活锁问题解决起来非常简单: 只需要在每个Proposer再去提案的时候随机加上一个等待时间即可。在发生冲突的时候,会等几秒。这几秒时,提案就完成了,下个提案就不冲突了。




二. Multi-Paxos流程图

basic Paxos是存在一定得问题,首先就是流程复杂,实现及其困难, 其次效率低(达成一致性需要2轮 RPC调用)
Multi现在只需要一个Proposer来提案。就相当于一个leader节点。所有请求都leader来处理
1.刚开始还是按照4步来走
2.之后的提案,因为只有leader在提案,都是顺序进行,只需要2步,减少了RPC调用
一致性算法 paxos,raft,zab_第12张图片

Multi-Paxos角色重叠流程图

Multi-Paxos在实施的时候会将Proposer,Acceptor和Learner的角色合并统称为"服务器"。因此, 最后只有"客户端"和"服务器"。

由服务器内部来保证leader和提案的顺序
一致性算法 paxos,raft,zab_第13张图片

为什么paxos是两段提交

参考 https://zhuanlan.zhihu.com/p/35473901
一致性算法 paxos,raft,zab_第14张图片

paxos介绍参考
https://zhuanlan.zhihu.com/p/389236713
paxos推导:
https://blog.csdn.net/qq_36610426/article/details/117173433
https://zhuanlan.zhihu.com/p/35473901



Raft

演示动画
http://thesecretlivesofdata.com/raft/

一致性算法 paxos,raft,zab_第15张图片

参考:

https://blog.csdn.net/weixin_41922289/article/details/107880919?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1.pc_relevant_default&utm_relevant_index=2

leader 选举

一致性算法 paxos,raft,zab_第16张图片

一致性算法 paxos,raft,zab_第17张图片

https://raft.github.io/
可以使用动画来先演示
s5是leader,只有s5,s1存活,其他都挂了,发送请求,数据是不会提交的。至少需要一个节点复活才能提交

一致性算法 paxos,raft,zab_第18张图片

ZAB

一致性算法 paxos,raft,zab_第19张图片
一致性算法 paxos,raft,zab_第20张图片
参考:

https://blog.csdn.net/weixin_41922289/article/details/107880919?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1.pc_relevant_default&utm_relevant_index=2

https://www.jianshu.com/p/c93906a9a860

你可能感兴趣的:(paxos,zab,raft算法)