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

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅