分布式与一致性协议之Paxos算法(二)

Paxos算法

如何达成共识

想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的提案还得包含一个提案编号,以起到唯一标识的作用。与你的做法类似,在Basic Paxos中,兰伯特也使用提案代表一个提议。不过提案中除了包含提案编号,还包含提议值。为了方便表示,使用[n,v]表示一个提案,其中n为提案编号,v为提议值。

强调一下,整个共识协商是分为两个阶段进行的(也就是前面提到的二阶段提交:准备阶段、接受阶段),那么具体要如何协商呢?
我们假设客户端1的提案编号为1,客户端2的提案编号为5,并假设节点A、B先收到来自客户端1的准备请求,节点C先收到客户端2
的准备请求

1.准备节点

先来看第一个阶段,首先,客户端1、2作为提议者,分别向所有接受者发送包含提案编号的准备请求,如图所示。
在这里插入图片描述

需要注意的是,准备请求中不需要指定提案的值,只需要携带提案编号就可以了,这也是很多人容易产生误解的地方。接着,节点A、B收到提案编号为1的准备请求,节点C收到提案编号为5的准备请求后,将进行如图所示的处理。由于之前没有通过任何提案,所以,节点A、B将返回一个"尚无提案"的响应,也就是说,节点A和B在告诉提议者,我之前没有通过任何提案,并承诺以后不再响应提案编号小于或等于1的准备请求,也不会通过编号小于1的提案。节点C也是如此,它将返回一个"尚无提案"的响应,并承诺以后不再响应提案编号小于等于5的准备请求,也不会通过编号小于5的提案。另外,节点A、B收到提案编号为5的准备请求,节点C收到提案编号为1的准备请求后将进行如图所示的处理过程。当节点A、B收到提案编号为5的准备请求时,因为提案编号5大于它们之前响应的主备请求的提案编号1,而且两个节点都没有通过任何提案,所以,节点A、B.将返回一个"尚无提案"的响应,并承诺以后不再响应提案编号小于等于5的准备请求,也不会通过编号小于5的提案。当节点C收到提案编号为1的准备请求时,由于提案编号1小于它之前响应的准备请求的提案编号5,所以节点C将丢弃该准备请求,不做响应
在这里插入图片描述
在这里插入图片描述

注意

本质上而言,提案编号的大小代表着优先级,你可以这么理解,根据提案编号的大小,接受者保证3个承诺,具体来说:

  • 1.如果准备请求的提案编号小于或等于接受者已经响应的准备请求的提案编号,那么接受者将承诺不响应这个准备请求;
  • 2.如果接受请求中的提案编号小于接受者已经响应的准备请求的提案编号,那么接受者将承诺不通过这个提案;
  • 3.如果接受者之前有通过提案,那么接受者将承诺准备请求的响应中会包含已经通过的最大编号的提案信息

2.接受阶段

第二个阶段也就是接受阶段,首先,客户端1、2在收到大多数节点的准备请求之后,会分别发送接受请求,如图所示.
在这里插入图片描述

客户端1收到大多数的接受者(节点A、B)的准备响应后,会根据响应中的提案编号最大的提案的值设置接受请求中的值。因为该值在来自节点A和B的准备响应都为空(“尚无提案”),所以就把自己的提议值3作为提案的值,发送接受请求[1,3].客户端2收到大多数的接受者(节点Ahe 节点B)的准备响应后,会根据响应中提案编号最大的提案的值设置接受请求中的值,因为该值在来自节点A、B的准备响应中都为空,所以就把自己的提议值7作为提案的值,发送接受请求[5,7].
在这里插入图片描述

当3个节点收到两个客户端的接受请求时,会进行如图所示的处理.
当节点A、B、C收到接受请求[1,3]的时候,由于提案的提案编号1小于3个节点承诺能通过的最小提案编号5,所以提案[1,3]将被拒绝。当节点A、B、C收到的接受请求[5,7]的时候,由于提案的提案编号5不小于3个节点承诺能通过的提案的最小编号5,所以提案[5,7]通过,也就是接受了提议值7,3个节点就X值达成共识。如果集群中有学习者,接受者通过了一个提案后就会通知所有的学习者,当学习者发现大多数的接受者都通过了某个提案,那么它也会通过该提案,并接受该提案的值。通过上面的示例过程可以看到,最终就X的值达成了共识。Basic Paxos的容错能力源自"大多数"的约定,可以这么理解,当少于一半的节点出现故障时,共识协商仍然可以正常工作

Multi-Paxos:Multi-Paxos不是一个算法,而是一个统称

通过前面的了解,你应该知道,Basic Paxos只能就单个值达成共识,一旦遇到要实现一系列值得共识的情况时,它就不管用了。虽然兰伯特
提到可以通过多次执行Basic Paxos示例(比如每接到一个值,就执行以此Basic Paxos算法)实现一系列值得共识。但是,很多人读完论文后,
还是两眼抹黑,虽然能读懂每个英文单词,但是不理解兰伯特提到得Multi-Paxos到底时什么意思。为什么Multi-Paxos这么难理解呢?
在我看来,兰伯特并没有把Multi-Paxos讲清除,只是介绍了大概的思想,缺少算法过程的细节和编程所必需的细节(比如缺少选举领导者的细节),
导致每个人实现的Multi-Paxos都不一样。不过从本质上看,大家都是在兰伯特特岛的Mutli-Paxos思想上补充细节,设计自己的Multi-Paxos算法,
然后实现它(比如Chubby的MultiPaxos实现、Raft算法等)。
所以在这里,补充一下:兰伯特提到的Multi-Paxos是一种思想,不是算法。而Multi-Paxos算法是一个统称,它是指基于Multi-Paxos思想,通过
多个Basic Paxos实例实现一系列值的共识算法。这一点由器需要注意

兰伯特关于Multi-Paxos的思考

熟悉Basic Paxos的读者可能还记得,Basic Paxos是通过二阶段提交来达成共识的。在第一阶段,也就是准备阶段,只有接收到大多数准备响应的提议者才能发起接受请求进入第二阶段(也就是接受阶段),如图所示 。
在这里插入图片描述

但是,如果我们之解通过多次执行Basic Paxos实例来实现一系列值得共识,就会存在这样几个问题:

  • 1.如果多个提议者同时提交提案,可能出现因为提案编号冲突,在准备阶段没有提议者接收到大多数准备响应,导致协商失败,需要重新协商。你想象一下,一个5节点的集群,如果其中3个节点作为提议者同时提案,就可能发生因为没有提议者接收大多数响应(比如1个提议者接收到1个准备响应,另外两个提议者分别接收到两个2准备响应)而准备失败,需要重新协商。还有可能只有提案编号最大的那个提议者的值能获得大多数的响应,前面的值则无响应,这显然也不符合Multi-Paxos的思想。
  • 2.两轮RPC通信(准备阶段和接受阶段)往返消息多、耗性能、延迟大。你要知道,分布式系统的运行是建立在RPC通信的基础之上的。因此,延迟一直是分布式系统的通电,是需要我们在开发分布式系统时认真考虑和优化的那么如何解决上面的两个问题呢?可以通过引入领导者和优化Basic Paxos执行过程来解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太网LAN双向透明传输CH9120透传芯片实现以太网转232串口转485转TTL串口

网络串口透传芯片 CH9120 1、概述 CH9120 是一款网络串口透传芯片。CH9120 内部集成 TCP/IP 协议栈,可实现网络数据包和串口数据的双向透明传输,具有 TCP CLIENT、TCP SERVER、UDP CLIENT 、UDP SERVER 4 种工作模式,串口波特率最高可支持到…

BUUCTF-WEB2

[SUCTF 2019]EasySQL1 1.启动靶机 2.寻找注入点和注入方法 随便输入一个字母,没有回显 随便输入一个数字,发现有回显,并且回显结果一样 3.堆叠注入 1; show databases; #查看数据库 1; show tables; #查看数据表 里面有个flag 1;set …

常见SSH功能概述

SSH的基本功能详解 用户身份验证 密码认证 密码身份验证是SSH中最基本的认证形式。在这种方式下,用户输入用户名和密码进行登录。密码在网络中的传输是加密的,保证了认证过程的安全性。尽管如此,基于密码的登录通常易于暴力破解&#xff0…

基于springboot的企业级工位管理系统源码数据库

基于springboot的企业级工位管理系统源码数据库 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业级工位管理系统的开发全过程。通过分析企业级工位管理系统管理的不足,创建了一个计算机管理企业级工…

并发情况下,Elasticsearch 保证读写一致的方法

1: 可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突; 2: 另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分…

图像处理ASIC设计方法 笔记19 连通域标记ASIC系统设计

目录 核心的模块有:标记ASIC的工作流程如下:该芯片的系统结构具有如下特点:P131 第6章 连通域标记与轮廓跟踪 本章节讲述了多值分割图像连通域标记芯片的系统设计 多值分割图像连通域标记芯片(以下简称"标记芯片",也称"标记 ASIC"),完成图像连通域标…

ffmpeg中stream_loop参数不生效原因分析

问题 使用ffmpeg把一个视频文件发布成一个rtmp流,并设置成循环推流,此时需要使用参数stream_loop,命令如下: ffmpeg.exe -stream_loop -1 -re -i D:\tools\ffmpeg-5.1.2\bin\sei.h264 -c copy -f flv -safe 0 rtmp://localhost:1935/live/te…

ESP32的wifi---一些误区

该芯片包含热点AP模式和客户端STA模式 热点AP模式:是指电脑或手机直接连接ESP32发出的热点实现连接,如果电脑连接模块AP热点,这样电脑就不能上网。 因此再使用电脑端和模块进行网络通信时,一般情况下都是使用STA模式。也就是电脑…

视频号小店要交多少保证金?这里面的秘密,全网无人敢说!

大家好,我是电商糖果 关于视频号小店的保证金的问题,有不少人询问过糖果。 这毕竟是个新平台,很多人对于它的收费标准不太清楚。 糖果做视频号小店一年多了,也开了多家小店。 下面就来给大家详细的说一下。 首先,我…

鸿蒙官网学习3

鸿蒙官网学习3 每日小提示项目的模块类型跨设备预览调试阶段应用的替换方式有两种 打开老的demo工程报错UIAbility 每日小提示 项目的模块类型 moduleType分为三种,只有1,2的模块支持直接调试和运行 entryfeaturehar 跨设备预览 需要手动在config.j…

Java微服务架构之Spring Boot —上篇

SpringBoot 概述 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度…

Swift - 基础语法

文章目录 Swift - 基础语法1. 常量1.1 只能赋值1次1.2 它的值不要求在编译时期确定,但使用之前必须赋值1次1.3 常量、变量在初始化之前,都不能使用 2. 标识符3. 常用数据类型4. 字面量4.1 布尔4.2 字符串4.3 整数4.4 浮点数4.5 数组4.6 字典 5. 类型转换…

【MySQL关系型数据库】基本命令、配置、连接池

目录 MySQL数据库 第一章 1、什么是数据库 2、数据库分类 3、不同数据库的特点 4、MySQL常见命令: 5、MySQL基本语法 第二章 1、MySQL的常见数据类型 1、数值类型 2、字符类型 3、时间日期类型 2、SQL语句分类 1、DDL(数据定义语言&#x…

Rust 实战练习 - 11. Rust异步的基石 tokio

前言 Tokio是一个异步运行时。同时支持embedded devices. 对异步代码的多线程运行时对标准库的异步实现 (这个可以省很多事情)生态系统丰富,非常多的工具库实现 Tokio不是万能的,部分场景不建议,可以考虑使用其他的: 多CPU计算…

怎么理解React Router

React Router就是实现不用刷新的条件下切换不同页面。路由的本质是页面URL发生改变,页面的显示结果也发生改变,但是页面不会刷新。 React Router分为几个部分: React-Router:实现了路由核心部分功能;React-Router-dom:基于react-router,加入了在浏览器运行环境下的一些…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…

一套Java语言开发的(药物不良反应智能监测ADR成品源码)B/S架构:用于监测和收集药品在使用过程中发生的不良反应的系统

药品不良反应监测工作弥补了药品上市前研究的局限性,可以最大程度上降低药品不良反应的重复发生,提高合理用药水平,同时也为监管、遴选、调整基本药物提供了数据支持。 所谓“是药三分毒”,药品是把双刃剑,具有两面性…

基于springboot+vue+Mysql的CSGO赛事管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Docker容器部署overleaf

overleaf在线版限制很多,好在开源,准备在本地Docker部署,网上翻了翻,似乎本地部署并非易事,我也尝试了一下,发现直接使用docker-compose拉官方最新镜像部署的确问题很多,不过最终还是完美解决。…

【ARMv9 DSU-120 系列 4.2 -- Utility Bus 访问的 memory-mapped 寄存器详细介绍】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 External registers关于Cluster系统控制寄存器的关键点摘要表概述Cluster registers summaryExternal registers ARMv9架构中的DSU-120(DynamIQ™ Shared Unit-120)提供了一组Cluster系统控制寄存器,这些寄存器可以…