paxos是去中心化协议,较难理解。
 
proposer, accepter是其中的主要角色。前者发起投票,后者批准投票。
核心思想是,一旦超过半数的accepter同意某个投票,整个流程结束,批准的那个结果则是最终结果。
 
learner是另一个角色,从各accepter获取到最终的值。实际中,这些角色可能是同一个节点。
 
不同的proposer去争抢一半以上的accepter,直观上会遇到的问题就是死锁。为了解决这个问题,paxos引入轮次的概念来避免死锁。
引入轮次后,需要确保的隐含条件就是:如果其中一轮已经选举出了一个结果,则后续所有轮次不能再推翻此结果,而必须接受此结果
 
 
 
paxos过程与两阶段提交类似,也分两个阶段。
第一阶段是proposer告诉acceptor,准备提交第n轮,需要保证不接受小于n轮的其他proposer的提案。
第二阶段,则是根据第一阶段acceptor的返回结果,通知acceptor提交某个值。
 
流程如下:
 
 
轮次n:
可见,轮次是个全局的概念,如何保证轮次在整个过程中不同节点轮次不重叠。
只需要定一个保证递增性与唯一性的规则。如: 时间戳 + 提出提案的次数 + 机器 IP/机器ID
 
活锁:
虽然paxos以轮次概念的引入解决了死锁,但因为存在着prepare、accept两阶段,有可能出现活锁问题:
如proposer A以prepare 1发起一轮paxos过程,所有acceptor返回null,A准备发送accept(1, Va);
此时proposer B以prepare 2发起又一轮paxos,所有acceptor依然返回null,B准备发送accept(2, Vb);
这时,proposer A以prepare 3继续发起新一轮prepare。。。,循环往复。
这就是活锁。
活锁可使用随机改变轮次n的增长幅度来解决。

分布式入门之5:paxos的更多相关文章

  1. 分布式共识算法 (二) Paxos算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Le ...

  2. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

  3. 五:分布式事务一致性协议paxos的应用场景

    1.应用场景 (1)分布式中的一致性 Paxos算法主要是解决一致性问题,关于“一致性”,在不同的场景有不同的解释: NoSQL领域:一致性更强调“能读到新写入的”,就是读写一致性数据库领域:一致性强 ...

  4. 分布式一致性的基石---Paxos算法(1)

    分布式一致性的基石---Paxos算法(1) Paxos算法是由微软的工程师Lamport提出,Lamport依靠Paxos算法获得图灵奖: Paxos算法旨在解决相互信任的分布式系统中,多个节点能快 ...

  5. SRE学习笔记:分布式共识系统、Paxos协议

    最近阅读了<SRE Google运维解密>的第23章,有一些感触,记录一下. 日常工作中,我们经常需要一些服务分布式的运行.跨区域如跨城.跨洲部署运行分布式系统往往是容易的,但是如何保证各 ...

  6. 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法

    搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...

  7. erlang分布式入门(一)-ping pong

    erlang分布式入门(一)-ping pong 测试环境和http://willvvv.iteye.com/blog/1523918 一样,192.168.0.182(centos-182)和192 ...

  8. 分布式理论之一:Paxos算法的通俗理解

    维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...

  9. 【分布式】Zookeeper与Paxos

    一.前言 在学习了Paxos在Chubby中的应用后,接下来学习Paxos在开源软件Zookeeper中的应用. 二.Zookeeper Zookeeper是一个开源的分布式协调服务,其设计目标是将那 ...

随机推荐

  1. winform 进程,线程

    进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); 点击按钮打开一个程 ...

  2. Deepin -Android Studio-Genymotion 之旅

    Deepin -Android Studio-Genymotion 之旅 暑假无聊中在deepin系统下配置好了android的开发环境,并使用了比较好的一款模拟器–Genymotion;下面是我配置 ...

  3. MySQL Replication需要注意的问题

    MySQL Replication 大家都非常熟悉了,我也不会写怎么搭建以及复制的原理,网上相关文章非常多,大家可以自己去搜寻.我在这里就是想总结一下mysql主从复制需要注意的地方.有人说主从复制很 ...

  4. myString操作符重载

    写在前面的话: 重载是C++的重要内容,在自定义一个类的时候,需要对类中的方法进行重载,才能方便的实现相应的功能,比如一些运算符,构造,析构函数,一些功能函数等等,而C++语言自带的这些东西只使用于基 ...

  5. Myeclipse使用DB Browser连接数据库错误:OPTION SQL_SELECT_LIMIT=DEFAULT

    虽然使用Myeclipse,经过test driver可以使用, 但是不能够查询mysql数据库各个表的数据.  百度了下, 原来是驱动mysql的插件版本很低,重新下了个, 可以了. 下面是链接. ...

  6. Oracle EBS - AOL

    AOL: (Path: /u43/dev6/interface/aol) 1. Goto system administrator response 2. View -> Request (Sa ...

  7. 安卓中級教程(8):pathbutton中的animation.java研究(1)

    src/geniuz/myPathbutton/myAnimations.java package geniuz.myPathbutton; import java.util.ArrayList; i ...

  8. Java-开源工具类

    一.集合 org.springframework.util.CollectionUtils: 二.字符串 com.google.common.base.Strings: org.apache.comm ...

  9. IntelliJ IDEA中如何显示和关闭----工具栏,目录栏,(转)

    工具栏:就是上面有个好多的快捷按钮的那个栏,比如撤销,上传,下载设置,扳手按钮,等等. 目录栏,就是刚刚装的时候,这个会显示,但是不知道怎么关闭,但是这个又没什么用. 如图: 就是对应的几个按钮,自己 ...

  10. 函数式中的 currying

    currying 是函数式语言中经常遇到的一个概念,翻译成 柯里化,不是库里化. currying 指的是将接收多个参数的函数变换成接收一个单一参数,并且返回接收余下的参数而且返回结果的新函数的技术. ...