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. jQuery触发a标签点击事件-为什么不跳转

    今天开发发现 使用jQuery触发a标签的点击事件,当前的样式发生了变化,可是没有跳转,为什么? 百度后找到的解决方案: <a onclick="hanle()" href= ...

  2. oracle优化

    sql语句 优化方式: 1select 语句中避免用"*" oracle在解析时,会将“*”依次转换成所有的列名(数据字典完成)耗时 2尽量多用commit语句 及时提交,释放资源 ...

  3. User interface

    Styles and Themes value/style <style name="CodeFont" parent="@android:style/TextAp ...

  4. linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作

    一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...

  5. Mysql5.6主从热备配置

    数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R ...

  6. Codeigniter 3.0 相关文档 part two

    分页 首先,配置 $this->load->library('pagination'); $config = array(); // $this->config->load(' ...

  7. MVC5 视图 不显示 Styles.Render Scripts.Render 问题解决

    第一步:安装 WebGrease 使用 nuget 安装 WebGrease 安装依赖 第二步:修改配置文件 <configSections> <!-- For more infor ...

  8. Java-马士兵动态代理模式

    Java-马士兵动态代理模式 模拟jdk的动态代理的实现原理, 这些东西没有必要写出来,写项目的时候一般用不上,主要是为了面试和理解原理: java动态代理有什么作用 作用非常大,在很多底层框架中都会 ...

  9. iscroll 加载不全解决方案

    例如上图中,get_kaijiang 中如果执行一段ajax跨域传输的话 function get_kaijiang(){ ajax------- $('#div').append(html); -- ...

  10. dynamodb golang query one Item

    golang  dynamodb  query  oneItem  and unmarshal  to object // +build example package main import ( / ...