【转】PaxosLease算法--2PC看Paxos选主
原文请参考【[置顶] Paxos master选举--PaxosLease算法】
众所周知,为了避免Paxos算法的活锁问题,必须选举唯一的proposor。偏偏在Paxos原论文中,作者L. Lamport不屑于讨论这个问题,因为选举过程中,即使出现多个master共存,也不影响Paxos算法正确性。另一方面,由著名的Fischer-Lynch-Paterson结论可知,不采取超时机制,任何算法都不能保证在有限时间内选举成功。不过这个结论在这里对我们影响不大,我们只要设计一个实际系统中好使的一个算法就行,而且我们希望保证选举过程的”安全性“,任意时刻不允许多个master共存,理由见这里。
为了满足”安全性“,容易想到lease机制,一个lease,就是一个带expire-time的锁。锁的持有者必须在expire-time之前进行续约(延后expire-time),否则time一到锁就自动释放。这样锁的持有者宕机后不会导致资源长时间被锁住,其次,锁的持有者若由于网络原因续约失败,就必须在expire-time到来之前停止对锁住资源的操作,这样其它主机在expire-time到来后获得锁,就不会和原先的锁持有者同时操作锁住的资源,造成数据被破坏。
回到这里的问题,多台机选举一个master,每一台都可能宕机,这个lease肯定不能只存在一台机上,每台机都是对等的,那所有的机器都得存一份lease,容易设计出如下简单的算法:
- 参与选举的机器先启动定时器,超时时间T,然后广播一个获取lease请求,附带上自己机器id。
- 每台机器接收到lease请求后,检查自己的lease状态,若为空或者等于请求机器的id,把lease状态设为此id机器占有,然后也启动定时器,超时时间T(超时时间一到就把lease置空),回复OK。否则回复lease被占用。
- 如果参与选举机器接收到多数派机器回复OK,那么在超时时间T结束,可以确信自己独占lease,这段时间内别的机器无法获取lease。
上述算法的正确性是显而易见的,但是很容易陷入死锁。假设多个候选者同时广播lease请求,分别抢占了一部分机器的lease,但又都达不到多数派的要求,那么就谁也无法获得lease,只能等待每台机器lease超期再次尝试。注意到第二次尝试必须等到lease超期后才能再开始,这是很严重的block状态,所以这里把它称为”死锁“。
如何避免上述的死锁问题?容易想到,在发出占有lease的指令之前,可以先探查一下当前所有机器上lease的状况,如果探查结果超出半数的lease都是空的,那么再广播占有lease的指令,否则的话就过一段时间再探查,因为在这种情况下再去占有剩下的lease,不但获得不了多数派lease,反而会加剧死锁。
这样一来,我们就很容易设计出一个两阶段提交的算法了:
- prepare request:广播探查lease指令
- prepare response:回复lease状态
- propose request: 检查收到的Respond回复,若多数派回复为空,发出Capture lease指令,当然,要附带上本机ID。然后启动定时器,超时时间T
- propose response:接收Capture Lease,Overwrite原lease状态,回复OK
- Check & Ack: 若收到多数派的OK回复,那么在超时时间T结束之前,就可以确信自己得到lease了

【转】PaxosLease算法--2PC看Paxos选主的更多相关文章
- 分布式一致性算法 2PC 3PC Paxos
分布式一致性算法的目的是为了解决分布式系统 一致性算法可以通过共享内存(需要锁)或者消息传递实现,本文讨论后者实现的一致性算法,不仅仅是分布式系统中,凡是多个过程需要达成某种一致的场合都可以使用. 本 ...
- 10. 选主算法、多版本兼容性及滚动升级 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 选主算法 2. 多版本兼容性 3. MGR 5.7滚动升级至8.0 4. 小结 参考资料.文档 免责声明 文章 ...
- 聊聊Zookeeper应用场景、架构设计、选主机制
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- 底层算法系列:Paxos算法
关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Pax ...
- zookeeper curator选主(Leader)
在分布式系统设计中,选主是一个常见的场景.选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务. 选主算法要满足的几个特征: 1)各个节点均衡的获得成为主节点的权利,一旦主节点被 ...
- 2PC/3PC/Paxos
在分布式系统中,一个事务可能涉及到集群中的多个节点.单个节点很容易知道自己执行的事务成功还是失败,但因为网络不可靠难以了解其它节点的执行状态(可能事务执行成功但网络访问超时). 若部分节点事务执行失败 ...
- 从2PC到Paxos
在分布式系统中,一个事务可能涉及到集群中的多个节点.单个节点很容易知道自己执行的事务成功还是失败,但因为网络不可靠难以了解其它节点的执行状态(可能事务执行成功但网络访问超时). 若部分节点事务执行失败 ...
- Zookeeper笔记之使用zk实现集群选主
一.需求 在主从结构的集群中,我们假设硬件机器是很脆弱的,随时可能会宕机,当master挂掉之后需要从slave中选出一个节点作为新的master,使用zookeeper可以很简单的实现集群选主功能. ...
- 源码分析 RocketMQ DLedger 多副本之 Leader 选主
目录 1.DLedger关于选主的核心类图 1.1 DLedgerConfig 1.2 MemberState 1.3 raft协议相关 1.4 DLedgerRpcService 1.5 DLedg ...
随机推荐
- Android学习笔记之ConnectivityManager+NetWorkInfo
PS:眼看就要开学了,该收收心了. 学习内容: 1.ConnecivityManager 2.NetWorkInfo ConnectivityManger:网络连接管理者,用于管理Android设 ...
- C#动态属性(.NET Framework4.5支持)
获取方法: /* 使用方法: 1. 在web.config 的<configSections> 节点中添加 <section name="customConfigs&quo ...
- Scrum 项目4.0--软件工程
1.准备看板. 2.任务认领,并把认领人标注在看板上的任务标签上. 林宇粲:处理数据的存储:目前先进行数据库表的分析和创建. 蔡舜:对复利计算,单利计算,代码进行编写. 王昕明:编写一些用户登录,操作 ...
- vs.net_2003 下载 虽然是老古董了,但还是很有用的。
系统要求 支持的操作系统: Windows 2000; Windows NT; Windows Server 2003; Windows XP 以下VS2003的下载链接: http://bcsoft ...
- macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了! 不用理会苹果官网的警告,苹果官网警告你只能用bootcamp安装且不能多分区,把人吓得不轻.其实不用过多担心, ...
- Python入门笔记(11):集合
一.目录 1.集合概述 2.关于集合的操作符.关系符号 3.集合的一系列操作(添加.更新.访问.删除) 4.关于集合的内建函数.内建方法 5.小结 二.集合概述 集合(set):把不同的元素组成一起形 ...
- 多准则决策模型-TOPSIS方法
多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...
- ahjesus用forever管理nodejs服务
全局安装forever npm install -g forever 查看帮助 forever -h 查看安装位置 whereis forever 编写自己的sh文件 forever -p web文件 ...
- ORACLE 中ROWNUM用法总结!
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- wpf 窗口程序下将datagrid导出为excel
今天用了几个小时也没有找到将datagrid导出为excel的方法,搜索msdn发现,老外也木有解决这个问题,因此把代码贴出来,和大家分享一下,提高工作效率.简要说一哈,本程序使用反射,因此代码量看起 ...