Fast Paxos
http://blog.csdn.net/chen77716/article/details/7297122
自从Lamport在1998年发表Paxos算法后,对Paxos的各种改进工作就从未停止,其中动作最大的莫过于2005年发表的Fast Paxos。无论何种改进,其重点依然是在消息延迟与性能、吞吐量之间作出各种权衡。为了容易地从概念上区分二者,称前者Classic Paxos,改进后的后者为Fast Paxos。
1. Fast Paxos概览
Lamport在40多页的论文中不仅提出了Fast Paxos算法,并且还从工程实践的角度重新描述了Paxos,使其更贴近应用场景。从一般的Client/Server来考虑,Client其实承担了Proposer和Learner的作用,而Server则扮演Acceptor的角色,因此下面重新描述了Paxos算法中的几个角色:
- Client/Proposer/Learner:负责提案并执行提案
- Coordinator:Proposer协调者,可为多个,Client通过Coordinator进行提案
- Leader:在众多的Coordinator中指定一个作为Leader
- Acceptor:负责对Proposal进行投票表决
2. Make Paxos Faster
- Phase1a:Leader提交proposal到Acceptor
- Phase2b:Acceptor回应已经参与投票的最大Proposer编号和选择的Value
- Phase2a:Leader收集Acceptor的返回值
Phase2a.1:如果Acceptor无返回值,则自由决定一个
Phase2a.2: 如果有返回值,则选择Proposer编号最大的一个 - Phase2b:Acceptor把表决结果发送到Learner
很明显,在Phase2a.1中,如果Leader可以自由决定一个Value,则可以让Proposer提交这个Value,自己则退出通信过程。只要之后的过程运行正常,Leader始终不参与通信,一直有Proposer直接提交Value到Acceptor,从而把Classic Paxos的三阶段通信减少为两阶段,这便是Fast Paxos的由来。因此,我们更加形式化下Fast Paxos的几个阶段:
- Phase1a:与之前相同
- Phase1b:与之前相同
- Phase2a:Leader收集Acceptor的返回值
Phase2a.1:如果Acceptor无返回值,则发送一个Any消息给Acceptor,之后Acceptor便等待Proposer提交Value
Phase2a.2:如果有返回值,则根据规则选取一个 - Phase2b:Acceptor把表决结果发送到Learner(包括Leader)
- 若Leader可以自由决定一个Value,则发送一条Any消息,Acceptor便等待Proposer提交Value
- 若Acceptor有返回值,则Acceptor需选择某个Value
3 一些定义
- Quorum
在Classic Paxos中一直通过多数派(Majority)来保证算法的正确性,对多数派再进一步抽象化,称为“Quorum”,要求任意两个Quorum之间有交集(从而间接表达了majority的含义) - Round
在Classic Paxos中,Proposer每次提案都用一个全序的编号表示,如果执行顺利,该编号的Proposal在经历Phase1,Phase2后最终会执行成功。
在Fast Paxos称这个带编号的Proposal的执行过程为“Round” - i-Quorum
在Classic Paxos执行过程中,一般不会明确区分每次Round执行的Quorum,虽然也可以为每个Round指定一个Quorum。在Fast Paxos中会通过i-Quorum明确指定Round i需要的Quorum - Classic Round
执行Classic Paxos的Round称为Classic Round - Fast Round
如果Leader发送了Any消息,则认为后续通信是一个Fast Round;若Leader未发送Any消息,还是跟之前一样通信,则后续行为仍然是Classic Round。
根据Lamport描述,Classic Round和Fast Round可通过Round Number进行加以区分。
4 Any消息


5 冲突
O4(v):下面定义在Round k中v或w被选择的条件:
如果v在Round k中被选择,那么存在一个k-Quorum R,使得对任意的Acceptor a∈Q∩R,都对v作出投票。
这个问题也可表述为:R中的所有Acceptor都对v作出投票,并且Q∩R≠φ,因为如果Q∩R=φ,则Round i将无法得知投票结果
- 每个Acceptor在同一Fast Round中仅投票一个Value
- Q∩Rv∩Rw≠φ
6 确定Quorum
- 任意两个Classic Quorum有交集
- 任意一个Classic Quorum与任意两个Fast Quorum有交集
- N>2F
- N>2E+F
- |Qc| = |Qf| ≥ N − ⌈N/3⌉ + 1 ≥ ⌊2N/3⌋ + 1
- |Qc| ≥N-⌈N/2⌉+1 = ⌈N/2⌉+1
|Qf|≥N-⌈N/4⌉≥⌈3N/4⌉
证明请参考:一致性算法中的节点下限
7 冲突Recovery
- 报告Acceptor a参与投票的最大Round和对应的Value
- 承诺不会对小于i+1的Round作出投票
7.1 基于协调者的Recovery
7.2 基于非协调的Recovery
8 Fast Paxos Progress
- Phase1a:与之前相同
- Phase1b:与之前相同
- Phase2a:Leader收集Acceptor的返回值
Phase2a.1:如果Acceptor无返回值,则发送一个Any消息给Acceptor,之后Acceptor便等待Proposer提交Value
Phase2a.2:如果有返回值
2.1 如果仅存在一个Value,则作为结果提交
2.2 如果存在多个Value,则根据O4(v)选取符合条件的一个
2.3 如果存在多个结果并且没有符合O4(v)的Value,则自由决定一个 - Phase2b:Acceptor把表决结果发送到Learner(包括Leader)
9. 总结
10 参考资料
- Fast Paxos(Lamport 2005)
- Multicoordinated Paxos
- On the Coordinator’s Rule for Fast Paxos
- Classic Paxos vs. Fast Paxos
- http://en.wikipedia.org/wiki/Paxos_(computer_science)
Fast Paxos的更多相关文章
- Fast Paxos 和 Paxos的区别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt373 自从Lamport在1998年发表Paxos算法后,对Paxos的各种 ...
- ZooKeeper是以Fast Paxos算法为基础的
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxo ...
- 理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos
理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos Cheap Paxos Message flow: Cheap Multi-Paxos Fast Paxos ...
- zookeeper (二) paxos & fast paxos & FastLeaderElection
参考文章: http://blog.csdn.net/xhh198781/article/details/10949697 paxos->fast paxos->FastLeaderEle ...
- 分布式理论之一:Paxos算法的通俗理解
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...
- 分布式系统理论进阶 - Paxos变种和优化
引言 <分布式系统理论进阶 - Paxos>中我们了解了Basic Paxos.Multi Paxos的基本原理,但如果想把Paxos应用于工程实践,了解基本原理还不够. 有很多基于Pax ...
- Paxos算法与Zookeeper分析
1 Paxos算法 1.1 基本定义 算法中的参与者主要分为三个角色,同时每个参与者又可兼领多个角色: ⑴proposer 提出提案,提案信息包括提案编号和提议的value; ⑵acceptor 收到 ...
- zookeeper学习系列:四、Paxos算法和zookeeper的关系
一.问题起源 淘宝搜索的博客 http://www.searchtb.com/2011/01/zookeeper-research.html 提到Paxos是zookeeper的灵魂 有一篇文章标题 ...
- Paxos变种和优化
分布式系统理论进阶 - Paxos变种和优化 引言 <分布式系统理论进阶 - Paxos>中我们了解了Basic Paxos.Multi Paxos的基本原理,但如果想把Paxos应用于工 ...
随机推荐
- Unity UGUI基础之Text
Text作为UGUI最基础的控件以及最常用的控件,它在项目中的应用绝对可以算是最多的,任何一个UI界面可以说都离不开它,它的基本属性如下: 一.rect transform组件: rect trans ...
- 网站开发进阶(三十四)编码中的setCharacterEncoding 理解
编码中的setCharacterEncoding 理解 1.pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码. 2.contentType ...
- 使用批处理文件(*.bat)同时打多个cmd窗口
使用批处理文件(*.bat)同时打多个cmd窗口 最近在研究zookeeper,在本地建了几个目录,发现频繁的去各个目录启动zkServer.cmd十分繁琐,于是乎google,才有了下文: 使用批处 ...
- 扩展GDAL,支持CNSDTF格式(一)
扩展GDAL,支持CNSDTF格式(一) 一. 简介 本文主要根据<中华人民共和国国家标准GB/T17798-2007--地理空间数据交换格式(Geospatialdata tra ...
- 9.5、Libgdx加速度计
(官网:www.libgdx.cn) 加速度计可以让设备通过三个坐标轴检测加速度.通过加速度可以检测设备的方向. 加速度的单位是米每秒的平方.如果一个坐标轴指向地心,加速度大概是-10米每秒的平方.如 ...
- 分布式进阶(十六)Zookeeper入门基础
Zookeeper入门基础 前言 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置为EPHEMERAL,那么当 ...
- 【一天一道LeetCode】#38. Count and Say
一天一道LeetCode系列 (一)题目 The count-and-say sequence is the sequence of integers beginning as follows: 1, ...
- 【一天一道LeetCode】#31. Next Permutation
一天一道LeetCode系列 (一)题目 Implement next permutation, which rearranges numbers into the lexicographically ...
- Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统
Android For JNI(四)--C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统 好几天每写JNI了,现在任务也越来越重了,工作的强度有点高,还有好几个系列的博客要等着更新,几本 ...
- Android表格布局(Table Layout)
Android表格布局(Table Layout) 先来看布局管理器之间继承关系图: 图1 可知TableLayout继承了LinearLayout,所以表格布局本质上依然是线性管理器. 表格布局采用 ...