本文主要是介绍paxos算法部分总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、paxos是什么
是一种基于消息传递且具有高度容错特性的一致性算法。
2、算法陈述
1、提案选定
1、参与者提出一个编号为Mn的提案,然后向acceptor的某个超过半数的子集成员发出prepare请求。如果一个acceptor批准过的提案编号都小于Mn,那么acceptor会将自己批准的编号最大的提案反馈给参与者,同时该acceptor承诺不会批准任何编号小于Mn的提案。
2、如果参与者收到了半数以上的acceptor发送的针对其编号为Mn的提案响应,那么他就会发送一个针对[Mn,Vn]的accept给acceptor,其中Vn是参与者收到的提案响应中的提案编号最大的的值。如果acceptor未反馈提案响应,那么Vn可以使任意值。如果acceptor未批准编号大于Mn的prepare作出相应那么就通过这个提案。
白话文说明下,
参与者提交了一个编号为3的prepare到超过一半acceptor的组成集合中。如果一个acceptor批准过的提案编号都小于3,比如说批准了1,2.那么acceptor就将提案编号为2的提案反馈给参与者,同时该acceptor不再批准小于3的提案。
但参与者收到半数以上的acceptor发送的针对他提交的编号为3的提案的返回响应后。参与者可能收到编号为1 编号为2的提案。然后参与者就把编号为2的提案的值作为Vn 发出一个[3,Vn],到acceptor集合,也就是说参与者赞同提案编号为2的提案。
如果参与者收到的反馈不包含任何提案,那么他自己可以提出自己的提案的值。如果参与者提交的编号为3的prepare编号3小于acceptor中批准的最大编号,那么acceptor会忽略该请求。参与者重新提出新提案
提案获取
方案一、acceptor与learner多对多 ---复杂
方案二、选取主learner,然后主learner同步其他learner -----单点 脑裂
方案三、选取主learner集合,然后同步其他learner---介于两者之间
3、算法流程死循环
两个参与者同时依次提交prepare、accept 请求,那么acceptor就会依次反馈上一个的提案,拒绝新提案,形成死循环。可以使用选举主参与者提出提案,保持算法活性。
参考了从paxos到zookeeper分布式一致性原理与实践--倪超著 一书
这篇关于paxos算法部分总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!