paxos算法部分总结

来源:互联网 发布:2017暑运大数据报告 编辑:程序博客网 时间:2024/06/06 02:13

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分布式一致性原理与实践--倪超著 一书