Paxos协议学习---2.由3大条件证明一致性

2024-05-05 15:48

本文主要是介绍Paxos协议学习---2.由3大条件证明一致性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Paxos是分布式的一致性协议,最重要的部分当然是这个一致性的证明。

在朴素Paxos协议中给出了3大条件,只要达到了这3大条件

可以证明,如果Paxos协议达成了一次成功的表决,那么这个表决具有一致性。

需要说明的是,这3大条件并不保证进行性,也就是说并不保证一定会达成成功的表决。

但是可以保证的是,如果达成了一个成功表决,那么这个表决具有一致性。

1.基本术语

(1)

ballot/B表决
decree法令
quorum法定人数集、多数派

Bdec某次表决的法令
Bqrm参与某次表决的牧师集合
Bvot参与某次表决的牧师中投赞成票的集合
Bbal某次表决的编号

说明1:成功的表决

说一轮表决B是成功的,当且仅当Bqrm属于Bvot
即该轮表决中所有参与的牧师都投了赞成票

说明2:表决的大小

B1 > B2 等价于 B1val > B2val,
但是这个下标并不反映实际表决发生的顺序。
即允许bal小的表决发生在bal大的之后


(2)

要最终确定一个值需要多轮表决。
某次表决B
多轮表决构成的集合是β

V表示一个投票
Vbal表示投票的编号
Vpst表示投票的牧师
Vvec表示投票的法令
V1<V2等价于,V1bal<V2bal
Votes(β)表示所有在β中的投票
p表示一个牧师
b表示一个表决的编号
MaxVote(b,p,β)表示β中,由p投出的所有表决中,编号小于b
的投票中最大的投票v。
Q表示牧师集合
MaxVote(b,Q,β)表示,所有p属于Q中MaxVote(b,p,β)的最大值


2.MaxVote(b,Q,β)

MaxVote(b,Q,β)的意义十分重要,是接下来要介绍的三大条件以及后面一致性证明的核心概念。

用一个例子来表述MaxVote(b,Q,β)的含义。


其中,最左边的#下面表示的是编号bal

然后decree表示的是需要表决的法令

接下来A、B、倒L、三角形、E表示所有可能来进行表决的牧师

每一行实际显示出的牧师就是Bqrm,牧师中的多数派

每一行被方框框住的牧师就是Bvot,Bqrm中实际在某次表决中投赞成票的牧师。

MaxVote(2,{A、B、倒L、三角形},β) bal == null

MaxVote(5,{A、B、倒L、E},β) bal == null

MaxVote(14,{B、三角形、E},β) bal == 2      ,其中关联牧师为三角形

MaxVote(27,{A、倒L、三角形},β) bal == 5   ,其中关联牧师为倒L

MaxVote(29,{B、倒L、三角形},β)bal  == 27 ,其中关联牧师为倒L、三角形


3.三大条件

条件1:β中的每一轮表决,都有一个唯一的编号
条件2:β中任意两轮的B1qrm和B2qrm中,至少有一个公共的牧师成员
条件3:对于每一轮表决B,如果B的Bqrm中任何一个牧师在β中一个编号更小的表决中投过赞成票,
那么B的法令必须与所有更小轮表决中的最大那次的表决的法令相同

条件2的笔记:
由于有公共假设,牧师如果没有出去旅游,就会来办公,
并且如果同时有超过总数量一半的牧师不来,就是无法确定一个法令。
所以条件2又可以表述为
任意一次的Bqrm都是超过牧师总数量的一半的。
即Bqrm始终要是总人数的多数派这次表决才能生效。


条件3的笔记:
(1)
相对于条件1和2的好理解,
这个条件3仿佛是不知怎么样就出现的一个古怪约束。
然而这才是重头戏,要保证一致性,这个条件3是相当重要的。
(2)
假设本次表决编号N,现在有牧师1-k,
它们投过票的表决编号为N1-Nk,
条件3就是要保证,N1-Nk都小于N,
然后选出N1-Nk中最大的那个编号对应的表决的法令作为本次表决的法令

这个条件结合MaxVote(b,Q,β)与上面的图更好理解一些。


三大条件更正式的表述如下:



4.引理与定理

(1)引理1

在3大条件被满足的情况下,如果β中的表决B是成功的,那么β中更大编号的表决和B有相同的法令。

(2)定理1

在3大条件被满足的情况下,任意两轮成功的表决,都是对相同法令的表决。

(3)定理2

在3大条件被满足的情况下,是有可能做出一次成功的表决的。
但不能保证一定会产生一轮成功的表决。
但至少表明在3大条件的基础上表决协议不会产生死锁。


引理与定理的正式表述:

(1)引理1


(2)定理1


(3)定理2



思考:

(1)由定理1很容易理解如果产生了成功的表决,那么表决具有一致性。

因为所有成功的表决都是对相同的法令进行的表决。

(2)由引理1很容易证明定理1

因为所有不同的成功的表决的编号都是不同的,这一点由条件1保证。

那么假设成功表决中编号最大的表决时B,那么由引理1可知,任一成功的表决的法令都与B相同。

所以任一成功的表决的法令是相同的。


5.证明一致性

由4中的思考的(1)、(2)可知,证明朴素Paxos如果成功表决,那么其结果具有一致性的证明的关键是引理1的证明。

论文中采用的是反证法证明。

引理1说如果满足条件1-3,并且B是一次通过的表决,那么所有编号比Bbal大的表决的法令和Bdec相同。

假设:存在集合X,X为比B编号大,并且法令与Bdec不同的表决的集合。

进一步假设C是X中编号最小的一个表决。

通过一系列的推导,可以得出
MaxVote(Cbal,Cqrm,β)属于集合X
并且MaxVote(Cbal,Cqrm,β)bal < Cbal
这是矛盾的。

我们令MaxVote(Cbal,Cqrm,β)=D
那么D属于集合X,并且Dbal < Cbal
但是我们之前的假设就是C是集合X中bal最小的。
所以矛盾。

那么假设不成立,那么命题引理1得证。


正式的推导:





说明:

步骤3.因为B是一次成功的投票,所以Bvot==Bqrm,又因为C也是一次β中的投票所以Cqrm也是多数派。

所以Bvot与上Cqrm == Bqrm与上Cqrm != 空集

步骤4.因为C是属于集合X的,而集合X的定义又是bal大于Bbal的,

并且MaxVote(Cbal,Cqrm,β)bal的定义是所有比Cbal小的里面最大的。

所以MaxVote(Cbal,Cqrm,β)bal大于等于Bbal

步骤5、6.由步骤4可知MaxVote(Cbal,Cqrm,β)bal >= Bbal

所以无论如何MaxVote不是nullVote,那么根据条件3就可以推出步骤6





这篇关于Paxos协议学习---2.由3大条件证明一致性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962060

相关文章

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批