Paxos协议超级详细解释+简单实例
Basic-Paxos算法(可以先看后面的实际例子再看前面的具体介绍部分)
Paxos算法的目的
Paxos算法的目的是为了解决分布式环境下一致性的问题。
多个节点并发操纵数据,如何保证在读写过程中数据的一致性,并且解决方案要能适应分布式环境下的不可靠性(系统如何就一个值达到统一)
Paxos的两个组件
Proposer
提议发起者,处理客户端请求,将客户端的请求发送到集群中,以便决定这个值是否可以被批准。
Acceptor
提议批准者,负责处理接收到的提议,他们的回复就是一次投票。会存储一些状态来决定是否接收一个值
Paxos有两个原则
1)安全原则---保证不能做错的事
a) 针对某个实例的表决只能有一个值被批准,不能出现一个被批准的值被另一个值覆盖的情况;(假设有一个值被多数Acceptor批准了,那么这个值就只能被学习)
b) 每个节点只能学习到已经被批准的值,不能学习没有被批准的值。
2)存活原则---只要有多数服务器存活并且彼此间可以通信,最终都要做到的下列事情:
a)最终会批准某个被提议的值;
b)一个值被批准了,其他服务器最终会学习到这个值。
Paxos具体流程图
第一阶段(prepare)
1).获取一个proposal number, n;
2).提议者向所有节点广播prepare(n)请求;
3).接收者(Acceptors比较善变,如果还没最终认可一个值,它就会不断认同提案号最大的那个方案)比较n和minProposal,如果n>minProposal,表示有更新的提议minProposal=n;如果此时该接受者并没有认可一个最终值,那么认可这个提案,返回OK。如果此时已经有一个accptedValue, 将返回(acceptedProposal,acceptedValue);
4).提议者接收到过半数请求后,如果发现有acceptedValue返回,表示有认可的提议,保存最高acceptedProposal编号的acceptedValue到本地
第二阶段(Accept)
5)广播accept(n,value)到所有节点;
6).接收者比较n和minProposal,如果n>=minProposal,则acceptedProposal=minProposal=n,acceptedValue=value,本地持久化后,返回;
否则,拒绝并且返回minProposal
7).提议者接收到过半数请求后,如果发现有返回值>n,表示有更新的提议,跳转1(重新发起提议);否则value达成一致。
Paxos议案ID生成算法
在Google的Chubby论文中给出了这样一种方法:假设有n个proposer,每个编号为ir(0<=ir<n),proposal编号的任何值s都应该大于它已知的最大值,并且满足:
s %n = ir => s = m*n + ir
proposer已知的最大值来自两部分:proposer自己对编号自增后的值和接收到acceptor的拒绝后所得到的值。
例: 以3个proposer P1、P2、P3为例,开始m=0,编号分别为0,1,2。
1) P1提交的时候发现了P2已经提交,P2编号为1 >P1的0,因此P1重新计算编号:new P1 = 1*3+1 = 4;
2) P3以编号2提交,发现小于P1的4,因此P3重新编号:new P3 = 1*3+2 = 5。
Paxos原理
任意两个法定集合,必定存在一个公共的成员。该性质是Paxos有效的基本保障
活锁
当某一proposer提交的proposal被拒绝时,可能是因为acceptor 承诺返回了更大编号的proposal,因此proposer提高编号继续提交。 如果2个proposer都发现自己的编号过低转而提出更高编号的proposal,会导致死循环,这种情况也称为活锁。
比如说当此时的 proposer1提案是3, proposer2提案是4, 但acceptor承诺的编号是5,那么此时proposer1,proposer2 都将提高编号假设分别为6,7,并试图与accceptor连接,假设7被接受了,那么提案5和提案6就要重新编号提交,从而不断死循环。
异常情况——持久存储
在算法执行的过程中会产生很多的异常情况:proposer宕机,acceptor在接收proposal后宕机,proposer接收消息后宕机,acceptor在accept后宕机,learn宕机,存储失败,等等。
为保证paxos算法的正确性,proposer、aceptor、learn都实现持久存储,以做到server恢复后仍能正确参与paxos处理。
propose存储已提交的最大proposal编号、决议编号(instance id)。
acceptor存储已承诺(promise)的最大编号、已接受(accept)的最大编号和value、决议编号。
learn存储已学习过的决议和编号
具体实例:
假设的3军问题
1) 1支红军在山谷里扎营,在周围的山坡上驻扎着3支蓝军;
2) 红军比任意1支蓝军都要强大;如果1支蓝军单独作战,红军胜;如果2支或以上蓝军同时进攻,蓝军胜;
3) 三支蓝军需要同步他们的进攻时间;但他们惟一的通信媒介是派通信兵步行进入山谷,在那里他们可能被俘虏,从而将信息丢失;或者为了避免被俘虏,可能在山谷停留很长时间;
4) 每支军队有1个参谋负责提议进攻时间;每支军队也有1个将军批准参谋提出的进攻时间;很明显,1个参谋提出的进攻时间需要获得至少2个将军的批准才有意义;
5) 问题:是否存在一个协议,能够使得蓝军同步他们的进攻时间?
接下来以两个假设的场景来演绎BasicPaxos;参谋和将军需要遵循一些基本的规则
1) 参谋以两阶段提交(prepare/commit)的方式来发起提议,在prepare阶段需要给出一个编号;
2) 在prepare阶段产生冲突,将军以编号大小来裁决,编号大的参谋胜出;
3) 参谋在prepare阶段如果收到了将军返回的已接受进攻时间,在commit阶段必须使用这个返回的进攻时间;
两个参谋先后提议的场景
1) 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);
2) 3个将军收到参谋1的提议,由于之前还没有保存任何编号,因此把(编号1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(ok);
3) 参谋1收到至少2个将军的回复,再次派通信兵带信给3个将军,内容为(编号1,进攻时间1);
4) 3个将军收到参谋1的时间,把(编号1,进攻时间1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(Accepted);
5) 参谋1收到至少2个将军的(Accepted)内容,确认进攻时间已经被大家接收;
6) 参谋2发起提议,派通信兵带信给3个将军,内容为(编号2);
7) 3个将军收到参谋2的提议,由于(编号2)比(编号1)大,因此把(编号2)保存下来,避免遗忘;又由于之前已经接受参谋1的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1);
8) 参谋2收到至少2个将军的回复,由于回复中带来了已接受的参谋1的提议内容,参谋2因此不再提出新的进攻时间,接受参谋1提出的时间;
两个参谋交叉提议的场景
1) 参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);
2) 3个将军的情况如下
a) 将军1和将军2收到参谋1的提议,将军1和将军2把(编号1)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok);
b) 负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;
3) 参谋2在同一时间也发起了提议,派通信兵带信给3个将军,内容为(编号2);
4) 3个将军的情况如下
a) 将军2和将军3收到参谋2的提议,将军2和将军3把(编号2)记录下来,如果有其他参谋提出更小的编号,将被拒绝;同时让通信兵带信回去,内容为(ok);
b) 负责通知将军1的通信兵被抓,因此将军1没收到参谋2的提议;
5) 参谋1收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号1,进攻时间1);
6) 2个将军的情况如下
a) 将军1收到了(编号1,进攻时间1),和自己保存的编号相同,因此把(编号1,进攻时间1)保存下来;同时让通信兵带信回去,内容为(Accepted);
b) 将军2收到了(编号1,进攻时间1),由于(编号1)小于已经保存的(编号2),因此让通信兵带信回去,内容为(Rejected,编号2);
7) 参谋2收到至少2个将军的回复,再次派通信兵带信给有答复的2个将军,内容为(编号2,进攻时间2);
8) 将军2和将军3收到了(编号2,进攻时间2),和自己保存的编号相同,因此把(编号2,进攻时间2)保存下来,同时让通信兵带信回去,内容为(Accepted);
9) 参谋2收到至少2个将军的(Accepted)内容,确认进攻时间已经被多数派接受;
10) 参谋1只收到了1个将军的(Accepted)内容,同时收到一个(Rejected,编号2);参谋1重新发起提议,派通信兵带信给3个将军,内容为(编号3);
11) 3个将军的情况如下
a) 将军1收到参谋1的提议,由于(编号3)大于之前保存的(编号1),因此把(编号3)保存下来;由于将军1已经接受参谋1前一次的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1);
b) 将军2收到参谋1的提议,由于(编号3)大于之前保存的(编号2),因此把(编号3)保存下来;由于将军2已经接受参谋2的提议,因此让通信兵带信回去,内容为(编号2,进攻时间2);
c) 负责通知将军3的通信兵被抓,因此将军3没收到参谋1的提议;
12) 参谋1收到了至少2个将军的回复,比较两个回复的编号大小,选择大编号对应的进攻时间作为最新的提议;参谋1再次派通信兵带信给有答复的2个将军,内容为(编号3,进攻时间2);
13) 将军1和将军2收到了(编号3,进攻时间2),和自己保存的编号相同,因此保存(编号3,进攻时间2),同时让通信兵带信回去,内容为(Accepted);
14) 参谋1收到了至少2个将军的(accepted)内容,确认进攻时间已经被多数派接受;
————————————————
版权声明:本文为CSDN博主「凉拌灰土」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cnh294141800/article/details/53768464
Paxos协议超级详细解释+简单实例相关推荐
- 【MyBatis】MyBatis是什么?能干什么?一篇学习MyBatis,知识点详细解释,实例演示
文章目录 MyBatis 1.简介 1.1 什么是MyBatis? 1.2 如何获得MyBatis? 1.3 持久化? 1.4 持久层? 1.5 为什么需要Mybatis? 2.第一个MyBatis程 ...
- im2col函数实现超级详细解释
前言 阅读<深度学习入门:基于python的理论与实现>,其中在实现CNN的章节中,提到为了CNN的快速计算需要将输入数据展开是以适合滤波器(权重),对于输入数据,将应用滤波器的区域(3维 ...
- 教你写一手漂亮的伪代码(详细规则简单实例)
文章目录 前言 伪代码的7个主要部分 1.算法名称 2.指令序列 3.输入/输出 4.分支选择 5.赋值 6.循环 7.算法结束 补充 举个例子 说明 前言 最近在复盘<算法设计与分析>这 ...
- Java线程同步(含详细解释/代码实例)
一.为解决线程安全问题,Java引入监视器(monitor)来保证共享数据的同步性.任何对象都可作为一个监视器,关键词synchronized修饰某个对象后,该对象就成为监视器. 二.同步代码块只能有 ...
- Ubuntu零基础教学-SpringBoot项目如何生成SSL证书并配置HTTPS协议 | 超级详细,建议收藏
- HTTP协议详解(超级详细)
目录 1. HTTP概述 2. HTTP特点 3. HTTP之URL 4. HTTP协议格式 4.1 HTTP请求 4.1.1 请求行 4.1.2 请求头(Header) 4.1.3 空行 4.1.4 ...
- 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。
解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...
- PySide2 基础入门-创建实例窗口(详细解释)
PySide2 基础入门-创建实例窗口(详细解释) python 3.7 / Pyside2 (如果使用pyQt5,将Pyside2 直接替换PyQt5即可)首先我们在Qt Designer中画好界面 ...
- Vue.js-Day03-AM【超级详细:Node.js环境安装、安装淘宝镜像(Win、Mac)、安装Vue脚手架、初始化Vue项目-命令解释(Vscode、命令行窗口)、目录介绍、Vue文件介绍】
Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目 录 1.Node.js-环境安装 1.1.Node.js-详细安装步骤 2.vue-cli脚手架安装 2.1.安装 ...
最新文章
- 使用nGraph的Intel®Xeon®上的高性能TensorFlow
- 基本数据类型使用注意事项
- java面试怎样成功率高一些_java初学者参加面试怎样提高成功率?
- 高焦耳贴片压敏电阻,有哪些?
- PMP之项目资源管理---管理风格
- Hadoop之深入HDFS原理<一>
- 《Fast R-CNN》阅读笔记
- mysql 根据状态输出_mysql show processlist 输出状态说明
- 【Java】Java_03第一个Java程序
- MCT工具的使用说明
- HTML5与Flash相比有哪些好处?
- JAVA操作FTP(FTP工具类)
- 全民一起玩Python 之 基础篇视频教程
- 小E开发板wifi音箱二实现网络助手发送整个WAV音乐
- 胶囊网络用于推荐系统问题(MIND,CARP)
- 电子邮件格式是什么,你知道电子邮件在哪里找吗
- react-native系列(13)动画篇:Animated动画库和LayoutAnimation布局动画详解
- ps 改变图层纯色与渐变色
- 向质量要增长,内容社区告别“大水漫灌”时代
- 字符串加密与解密_一种可以用在程序加密的功能
热门文章
- 计算机监控通信网络 rs485和rs232,聊聊机房监控系统需要的RS485与RS232通讯接口
- 小问题:no available avd
- 解决Configuration is faulty. Check the Issues view for details. Error while building/deploying project
- 三、线性规划 单纯形法
- SC/Tetra V13 安装指南 Crack
- quartus ii matlab,基於Quartus II和MATLAB的FIR濾波器設計與仿真(二)
- 课程设计_solidworks_机械狗玩具建模,机械原理连杆机构运动
- Parentheses Balance UVA - 673
- 用于FUZZ测试的程序及其详解
- 横向加载更多(查看更多)RecyclerView