分布式 Paxos算法 总结

前言


 相关系列

  • 《分布式 & 目录》
  • 《分布式 & Paxos算法 & 总结》
  • 《分布式 & Paxos算法 & 问题》
     

 参考文献

  • 《图解超难理解的 Paxos 算法(含伪代码)》
  • 《【超详细】分布式一致性协议 - Paxos》
     
     

Basic-Paxos @ 基础帕克索斯算法


    Paxos算法是目前公认解决分布式一致性问题的最有效算法之一,甚至可以说它是过去几十年里一切分布式一致性算法的源头。我们对Paxos算法进行描述时通常都会带上“容错&共识”两个关键字,那么它们具体代表的是什么呢?

  • 容错:是指分布式系统在部分节点宕机的情况下依然能够对外提供服务,即CAP理论中的分区容错性;
  • 共识:是指分布式系统的各节点都能就某个操作达成共识,即所有节点都批准执行这个操作。例如在分布式系统中操作A/B都想访问某服务,那么令集群中的所有(超半数/自定义数量)服务都批准执行操作A/B的的过程就是所谓的达成共识。
     

 概念

    在正式对流程进行阐述之前,我们需要先对Paxos算法的各类角色&变量进行讲解。Paxos算法具有四类角色…其名称/作用具体如下:

  • client @ 客户端:负责向提案者发送操作请求;
  • proposer @ 提案者:提案者负责接收&封装客户端的操作请求为proposal @ 提案,并为之生成全局唯一&增长的编号。随后向各接收者广播准备/接收请求,并根据其返回的通过/批准情况决定是否继续发送接收请求/判定其已达成一致;
  • acceptor @ 接收者:接收者负责对准备&接收请求中的提案进行判定,以决定是否通过/批准该提案;
  • learner @ 学习者:学习者负责获取已达成共识的提案并应用于分布式系统中。

    Paxos算法具有三类“持久化”变量…其名称/作用具体如下:

  • maxProposal @ 最大提案:接收者在准备请求中通过的最大提案编号;
  • acceptedProposal @ 已批准提案:接收者在接收请求中批准的最大提案编号;
  • acceptedValue @ 已批准值:接收者在接收请求中批准的最大提案值。
     

 流程

    Paxos算法的流程分为“批准/获取”两个部分,这其中“批准”部分负责提案的实际批准,具体又可分为“准备/接收”两个阶段;而“获取”部分则负责提案批准后的对外开放。关于提案批准的完整流程具体如下:

  • prepare @ 准备阶段:提案者在接收到客户端的操作请求后,其会将之封装为提案并为之生成全局唯一&增长的编号,关于全局编号的具体生成方式此处不予讨论;
  • 提案者会向各接收者广播(即全体发送)准备(当前提案编号)请求;
  • 各接收者在收到准备(当前提案编号)请求后会比较“当前提案编号”和“最大提案”的大小,如果“当前提案编号” > “最大提案”则记录“最大提案”为“当前提案编号”并返回通过回应。而如果该接收者曾chosen @ 选中/批准过某项提案,则“已批准提案/已批准值”会随通过回应一同返回;否则便会无视请求/返回拒绝回应。而在未能收到超过半数/自定义数量通过回应的情况下,提案者会为提案生成重新新编号并再次开始流程;
  • accept @ 接收阶段:提案者在收到超过半数/自定义数量的通过回应后会向接收者广播接收(当前提案编号&当前提案值)请求。如果在之前的准备请求回应中存在“已批准值”,那么在接收请求中携带的“当前提案值”就必须应用该值;否则就由当前提案者负责自定义。通过该规则可以得知:Paxos算法只支持单个值/操作的共识;
  • 各接收者在收到接收(当前提案编号&当前提案值)请求后会再次比较“当前提案编号”与“最大提案”的大小,如果“当前提案编号” >= “最大提案”则记录“已批准提案&已批准值”为“当前提案编号&当前提案值”,并将“当前提案编号”返回,意味着已批准当前提案;否则便将原本的“最大提案”返回;
  • 提案者在收到超过半数/自定义数量的“当前提案编号”后便会认为各接收者已对当前提案达成共识,至此该提案便可以被学习者所获取&应用于分布式系统了;否则便意味着当前提案被否决,提案者需要为提案重新生成新编号以再次开始流程。

    当提案达成共识后,如何让学习者获取该提案也是值得细究的问题。提案获取通常有以下几种方案:

  • 全量发送:接收者一旦批准提案便将该提案广播给所有学习者。这种做法虽然可以让学习者尽快的获得批准提案,但是却需要每个接收者与所有学习者逐一进行通信,通信次数为二者乘积,所以效率较低;
  • 主从同步:选定主学习者,提案批准后由接收者通知主学习者,并由主学习者负责通知其它的学习者。这个方案虽然多了一个步骤,但是通信次数大大降低,通信次数为学习者的数量。该方案同时引出另一个问题:主学习者随时可能出现故障。
  • 多主从同步:在主从同步的基础上,由单个主学习者扩展成一个主学习者集合。集合中学习者数量越高,可靠性也越好。
     

 模拟

    为了更好的熟悉Paxos算法,此处我们举例描述Paxos算法“提案批准”的完整过程,该案例中的Paxos集群共有A/B/C三个节点。注意!这里的任意节点都可同时扮演提案者&接收者。

    提案者A/B分别将X赋值成3/5的操作请求封装为提案,并为之生成全局唯一&增长的编号1/2,随后向各接收者广播。在准备阶段它们的交互结果如下:

在这里插入图片描述

  • 提案者A/B分别进入准备阶段,并向各接收者广播准备(1/2)请求;
  • 接收者A/B在收到提案者A的准备(1)请求后发现自身并没有通过/批准任何准备/接收请求,因此直接返回空的通过回应;
  • 接收者C由于在收到&通过提案者B的准备(2)请求之后再收到提案者A的准备(1)请求,并且提案者B的提案编号2大于提案者A的提案编号1,因此无视了准备(1)请求/返回了拒绝回应;
  • 接收者A/B在收到提案者B的准备(2)请求后由于其提案编号2 > 已通过的提案编号1,因此两者都会返回空的通过回应。

    由于提案者A/B的准备请求都收到了超过半数的通过回应,因此提案者A/B都将进入Paxos算法的接收阶段。

在这里插入图片描述

  • 提案者A向各接收者广播接收(1&3)请求。由于之前的通过回应中没有携带“已批准提案”,因此提案的值可以完全自定义;
  • 接收者A/B/C在收到接收(1&3)请求后,由于其之前已经各自通过了准备(2)请求,因此其都会返回提案编号2来表示未曾批准该请求;
  • 提案者A在收到回应后发现提案编号2比自己的提案编号1大,因此知晓自身提案未曾被批准,因此重新回到准备阶段进行协商;
  • 提案者B向各接收者广播接收(2&5)请求。由于之前的通过回应中没有携带“已批准提案”,因此提案的值可以完全自定义;
  • 接收者A/B/C在收到接收(2&5)请求后,由于其都未通过提案编号更大的准备请求,因此其都会返回提案编号2来表示批准了该请求;
  • 提案者B在收到回应后发现提案编号2与自身提案编号相同且数量超过半数,因此判定接收者对该提案已达成共识,学习者可正式获取&应用该提案。

    在提案批准的流程中还有一种常见的情况是接收者在已批准某项提案的情况下收到提案编号更大的准备请求,这种情况下其就需要在通过回应中返回已批准提案的编号&值…模拟如下:

在这里插入图片描述

  • 提案者B向各接收者广播接收(3&6)请求;
  • 接收者A收到&批准了提案者B的接收(3&6)请求;
  • 提案者A向各接收者广播准备(4)请求;
  • 接收者B/C收到&通过提案者A的广播准备(4)请求,并因此未批准提案者B的接收(3&6)请求;
  • 接收者A收到&通过提案者A的准备(4)请求,并在通过回应中携带了已批准提案编号&值(3&6);
  • 提案者B判定接收者未能就提案达成共识,重新进入准备阶段;
  • 提案者A因为收到超过半数的通过请求而进入接收阶段,向各接收者广播接收(4&6)请求。这其中6是因为在之前接收者A的通过回应中包含有已批准提案值,因此该值便被作为了提案者A的提案值;
  • 接收者A/B/C收到&批准了接收(4&6)请求,提案者A判定各接收者已就该提案达成共识。
     
     

Multi-Paxos算法 @ 多帕克索斯算法


    原始的Basic-Paxos算法只能达成一个值/操作的共识,而Leslie Lamport则提出可以通过多次执行Basic-Paxos算法来达成一系列值/操作的共识。但由于多次协商会增加通信开销&影响协商活性(即指协商进入死循环),因此Leslie Lamport则进一步提出了名为Multi-Paxos算法的解决方案。

    Multi-Paxos算法对于Basic-Paxos算法的主要区别在于其引入了领导提案者的概念。在Multi-Paxos算法中,提案(准备&接收)请求的发送是由领导提案者专属负责的。Multi-Paxos系统会在启动时先通过Basic-Paxos算法从各提案者中选举出唯一的领导提案者用于“串行”发送提案请求,这样就能避免并发提交而解决Basic-Paxos算法的活锁(接收者不断通过编号更大的提案而导致无法批准已通过的旧提案,该问题正常情况下可通过随机延迟的方式进行缓解)问题。此外由于领导提案者会连续发送提案请求,因此除去首个提案请求需要完整执行准备&接收两个阶段(为了应对网络分区而保留,否则也可以不执行)外,后续提案请求的发送都可以只执行接收阶段,从而便能减少RPC来提升共识的达成效率。

    Multi-Paxos算法可以支持多领导提案者并存的场景。在实际的Multi-Paxos系统中,由于网络分区情况的存在,其可能出现选举出多个领导提案者的情况。对于这种情况Multi-Paxos算法是提供支持的,因为如此一来其会自动退化成Basic-Paxos算法的多次执行场景。

    领导提案者的宕机会导致Multi-Paxos系统不可用。对于一个功能完善的Multi-Paxos系统,其应该具备对领导提案者的故障监测&转移功能。理论上,领导提案者需要不断向系统中的其它节点发送心跳以表示自身存活,而一旦在指定时间内未收到心跳(及一系列综合性盘点),那么Multi-Paxos系统就会判定领导提案者已经宕机。这种情况下其就会选举新的领导提案者来代替工作,即使旧领导提案者只是因为网络分区而无法连接。而在不存在可用提案者的情况下,Multi-Paxos系统将陷入不可用的状态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10.qml使用 shadereffect 实现高斯模糊

目录 高斯模糊sigma获取加权均值获取 高斯二维公式实现高斯一维公式实现使用总结 高斯模糊 高斯模糊应用领域我就不过多讲解,想了解自己去了解 高斯模糊有 一维公式 二维公式 当然我们图像是二维的 但是实际上二维公式用于计算那是消耗大量的算力的&#xff0c…

从 CephFS 到 JuiceFS:同程旅游亿级文件存储平台构建之路

随着公司业务的快速发展,同程旅行的非结构化的数据突破 10 亿,在 2022 年,同程首先完成了对象存储服务的建设。当时,分布式文件系统方面,同程使用的是 CephFS,随着数据量的持续增长,CephFS 的高…

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…

AOF和RDB【Redis持久化篇】

文章目录 1.什么是持久化?2.RDB3.AOF 1.什么是持久化? Redis是跑在内存里的,当程序重启或者服务器崩溃,数据就会丢失,如果业务场景希望重启之后数据还在,就需要持久化,即把数据保存到可永久保存…

2024-12-14 学习人工智能的Day35 卷积神经网络.阶段项目

卷积神经网络项目实现 关于项目实现的文档说明书,三个要素:数据、模型、训练 1、项目简介。 1.1 项目名称 ​ 基于CNN实现扑克牌花色的小颗粒度分类 1.2 项目简介 ​ 该项目旨在通过卷积神经网络(CNN)实现扑克的小颗粒度分类…

【鸿蒙实战开发】数据的下拉刷新与上拉加载

本章介绍 本章主要介绍 ArkUI 开发中最常用的场景下拉刷新, 上拉加载,在本章中介绍的内容在实际开发过程当中会高频的使用,所以同学们要牢记本章的内容。下面就让我们开始今天的讲解吧! List 组件 在 ArkUI 中List容器组件也可以实现数据滚动的效果&a…

MR30分布式 IO 模块:硅晶行业电池片导片机的智能 “心脏”

硅晶产业作为全球能源和电子领域的基石,其生产规模庞大且工艺复杂。从硅料的提纯、拉晶,到硅片的切割、电池片的制造,每一个环节都要求高精度与高稳定性。在电池片生产环节,导片机承担着硅片传输与定位的重要任务,其运…

MAC虚拟机上安装WDA环境

MAC虚拟机上安装WDA环境 一、MAC虚拟机切换root权限二、macOS上安装xcode若你的macOS系统可以在appstore下载安装若你安装的macOS系统版本太低,无法在appstore上安装xcode 三、macOS上安装WebDriverAgent四、使用xcode配置WDA安装到手机上高版本系统支持 一、MAC虚拟…

个人ffmpeg笔记(一)

环境安装 QT环境安装 运行qt…run安装 下载地址:https://download.qt.io/archive/qt/ 下载地址:https://download.qt.io/archive/qt/5.12/5.12.10/ sudo apt install --reinstall libxcb-xinerama0 解决xcb问题 Ubuntu16.04打开Qt显示/home/user/.co…

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页:醋溜马桶圈-CSDN博客 专栏:计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…

WordPress插件 Download-block-plugin下载按钮图标美化

WordPress插件 Download-block-plugin下载按钮图标美化

分布式 漏桶算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 漏桶算法 & 总结》《分布式 & 漏桶算法 & 问题》 概述 简介 LBA Leaky Bucket Algorithm 漏桶算法是一种流行于网络通信领域的流量控制/频率限制算法。漏桶算法的核心原理是通过一个概念上的“漏桶”来…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

群控系统服务端开发模式-应用开发-前端操作记录功能展示

一、创建操作记录展示视图 在根目录下src文件夹下views文件夹下permission文件夹下创建token文件夹&#xff0c;在token文件夹下&#xff0c;新建index.vue文件&#xff0c;代码如下&#xff1a; <template><div class"app-container"><div class&qu…

【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!

还记得第一次使用ChatGPT时&#xff0c;那种既兴奋又困惑的心情吗&#xff1f;我是从一个对AI一知半解的普通用户&#xff0c;逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就&#xff0c;而是通过不断的探索和实践&#xff0c;掌握了一系列高效使用的技巧。今天&#…

电容Q值、损耗角、应用

电容发热的主要原因&#xff1a;纹波电压 当电容两端施加纹波电压时&#xff0c;电容承受的是变化的电压&#xff0c;由于电容内部存在寄生电阻&#xff08;ESR&#xff09;和寄生电感&#xff08;ESL&#xff09;.因此电容会有能量损耗&#xff0c;从而产生热量&#xff0c;这…

适配器模式的理解和实践

在软件开发中&#xff0c;我们经常遇到需要将一个类的接口转换成客户端所期望的另一种接口的情况。这种接口不匹配问题会导致类之间的不兼容&#xff0c;使得原本可以协同工作的两个类无法在一起工作。为了解决这一问题&#xff0c;适配器模式&#xff08;Adapter Pattern&…

大数据分析案例-基于梯度提升决策树回归算法构建医疗保险费用预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

轩凯生物被警示,财务内控不规范,华泰证券又被处罚

作者&#xff1a;Tracy 来源&#xff1a;IPO魔女 11月21日&#xff0c;南京轩凯生物科技股份有限公司&#xff08;简称“轩凯生物”&#xff09;被交易所下达书面警示的自律监管函。同时其保荐机构华泰联合证券和会计师事务所天衡&#xff0c;均受到监管处罚。这是今年来&…

IoTDB 常见问题 QA 第二期

关于 IoTDB 的 Q&A IoTDB Q&A 第二期来啦~我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;集群扩容方法 问题 问题1&#xff1a;当 IoTDB 集群的存储占用达到…