分布式一致性的基石---Paxos算法(1)
分布式一致性的基石---Paxos算法(1)
Paxos算法是由微软的工程师Lamport提出,Lamport依靠Paxos算法获得图灵奖;
Paxos算法旨在解决相互信任的分布式系统中,多个节点能快速达成一个一致的值;
目前,google的Chubby, 雅虎的Zookeeper, Oracle的MySql Replication Group, 腾讯的PhxSql,PhxQueue, 阿里的AliSql等都由Paxos算法作为一致性的基础;
在互联网公司的应用场景下,通常用Zookeeper作为分布式协作服务; 可能不需要研究Paxos的实现;
在一些传统的企业,可以在服务中实现Paxos算法来满足不能部署Zookeeper的场景;
由浅入深,这次只讨论朴素Paxos的实现;
后面的章节会扩展讨论 Multi Paxos 算法和 Paxos 的数学推理证明,
目前最好的 Paxos 的实现是腾讯的PhxPaxos;
之前写过一篇腾讯PhxPaxos的编译流程:https://www.cnblogs.com/lijingshanxi/p/10089351.html
看代码最快的方法是自己加点日志,来熟悉代码流程; 在上述的编译流程里面有介绍;
朴素Paxos算法约束:

活锁:
假设集群中有2个Proposor, 3个Accepter;
每次在Prepare阶段,都能获得多数派的响应,但是每次在Accept阶段,都没有达成多数派的接受,如果这样的情况一致持续下去,就发生了活锁;

两个Proposor在Prepare阶段都获得了多数派的响应,但是在Accept阶段没有达成多数派的通过,交替这样,就形成了活锁;
这里面还有一个关键的地方,每次Prepare阶段,Proposor1都没有获得已经接受过Proposor2的提议的Acceptor的响应, Proposor2都没有获得已经接受过Proposor1的提议的Acceptor的响应;
即使发生活锁,依然不会破坏朴树Paxos的一致性,因为要么多数派节点达成共识,要么多数派节点不能形成共识;
分布式一致性的基石---Paxos算法(1)的更多相关文章
- 搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法 2PC 由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phas ...
- 分布式数据库中的Paxos 算法
分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...
- 分布式理论之一:Paxos算法的通俗理解
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...
- 一致性协议之Paxos算法
一.算法提出背景 Paxos算法需要解决的问题就是如何在一个可能发生诸如宕机或网络异常情况的分布式气筒中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统 ...
- 分布式理论:深入浅出Paxos算法
前言 Paxos算法是用来解决分布式系统中,如何就某个值达成一致的算法.它晦涩难懂的程度完全可以跟它的重要程度相匹敌.目前关于paxos算法的介绍已经非常多,但大多数是和稀泥式的人云亦云,却很少有人能 ...
- Paxos 算法 :消息传递一致性
网络上有很多关于优秀的关于Paxos 算法的文章,我下面进行整理搜集一下: 分布式理论之一:Paxos算法的通俗理解 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 L ...
- 使用GO实现Paxos分布式一致性协议
什么是Paxos分布式一致性协议 最初的服务往往都是通过单体架构对外提供的,即单Server-单Database模式.随着业务的不断扩展,用户和请求数都在不断上升,如何应对大量的请求就成了每个服务都需 ...
- Paxos算法小结
转自不正直的绅士,因百度空间迁移,无法注明出处,我从其google搜索引擎中的cache进行的copy. 不正直的绅士 是跟我一起工作过的非常有才的一个青年才俊. Paxos的使用非常广泛.sanlo ...
- 分布式一致性算法--Paxos
Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说, ...
随机推荐
- Mysql 5 忘记root密码,设置免密登陆
1.修改my.cnf配置文件 vi /etc/my.cnf #允许免密认证登陆 skip-grant-tables = true 2.重启Mysql数据库并登陆数据库修改root用户密码 system ...
- azkaban使用--指定executor
PS:局限,虽然可以指定在一台节点上执行,但是失去了高可用的优势,如果有不同类型的任务建议用多套azkaban 假如二台executor,下图中的4,5,我想将任务运行在hadoop02上,因为只有这 ...
- 14Linux_BIND-Linux就该这么学
bind 域名解析 域名→ip地址:正向解析 ip地址→域名:反向解析 主服务器:做管理 从服务器:同步 缓存服务器:转发
- Django03-视图系统views
一.编写视图 一个视图函数,是一个简单的Python函数,它接受web请求,并且返回web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是 ...
- zabbix添加自定义监控项目
在zabbix里添加一个自定义监控项目,简单做个笔记,怕忘了 首先需要定义 zabbix_agentd.conf 中的 UnsafeUserParameters 修改为 UnsafeUserPara ...
- 修复Microsoft Store 无法连接网络 代码: 0x80072EFD
事情的经过是这样的,我的Windows版本是1709,前两天刚从1703升上来,今天突然发现它自己给我装了个skype,我上Microsoft商店里查一下是什么情况,结果突然发现它又双双双不正常工作了 ...
- C# 消息队列 RabbitMQ
1.引言 RabbitMQ——Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适. RabbitMQ 是一个由 Erlang 语言开发的AMQP(高级消息队列协 ...
- Java内存的 静态方法和实例方法的区别及使用场景
注意:变量指基本数据类型非对象,局部变量不能被静态修饰 1.(静态)成员变量存放在data segment区(数据区),字符串常量也存放在该区 2.非静态变量,new出来的对象存放在堆内存,所有局部变 ...
- css入门第一天
一丶Web标准Web标准不是某一个标准,而是一系列标准的集合,内容与结构与表现形式的分离网页主要有四个部分组成:内容(content),结构(structure), 表现(presentation)和 ...
- Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)
注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...