分布式一致性的基石---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算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说, ...
随机推荐
- 【HDFS API编程】查看HDFS文件内容、创建文件并写入内容、更改文件名
首先,重点重复重复再重复: /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 ...
- 将自己的SpringBoot应用打包发布到Linux下Docker中
目录 将自己的SpringBoot应用打包发布到Linux下Docker中 1. 环境介绍 2. 开始前的准备 2.1 开启docker远程连接 2.2 新建SpringBoot项目 3. 开始构建我 ...
- 11. java中路径/和\的区别
一般可以认为是"/"的作用等同于"\\"在java中路径一般用"/"windows中的路径一般用"\"linux.uni ...
- 6Linux用户身份与文件权限
3类用户身份: (1)管理员UID为0,root (2)系统用户UID为1-999:nologin不能登录系统,老版本5.6中是1-499 (3)普通用户UID为1000开始,老版本5.6中是1000 ...
- 整合MVC实现文件上传
1.整合MVC实现文件上传整合MVC实现文件上传在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,文件上传完毕之后需要将提交的基本信息插入数据库,那么我们来实现这个操作.整个MVC实 ...
- rad 10.2
最大分辨率跟笔记本走了 笔记本最大分辨率 1388 程序界面是 1980*1080 笔记本打开过程序,就自动变为 1388了,界面全乱了.因为设置的 锚点是 右下.
- 供Linux学习使用的在线模拟系统
前言 我只是一名搬运工. 最近想要找一个linux服务器用于调试shell脚本,但是公司服务器又只能内网访问,外网无法使用.对安装VMWARE+Linux镜像觉得繁琐.查找了一下资料.找到了几个在线模 ...
- python学习Day10 函数的介绍(定义、组成、使用)
今日学习内容: 1.什么是函数 :函数就是一个含有特定功能的变量,一个解决某问题的工具 函数的定义:通过关键字def + 功能名字():代码体(根据需求撰写代码逻辑) 2.为什么要用函数:可以复用:函 ...
- 第一次C语言程序设计
C语言程序实验报告 实验项目: 1.字符与ASCII码 2.运算符与表达式的应用 3.顺序结构应用程序 4.数学函数的算法描述 5.鸡兔同笼的算法描述 6.确定坐标的算法描述 姓名:张时锋 实验地点: ...
- .NET Core 跨平台发布Linux和OSX
跨平台发布 简单新建一个项目. mkdir dotnethello cd dotnethello dotnet new dotnet new之后 修改project.json 如下: { " ...