Zookeeper(三)一致性算法Paxos

news2024/9/20 6:20:42

目录

    • 1. Paxos算法是什么
    • 2. Paxos算法产生背景
      • 2.1. 拜占庭将军问题
      • 2.2. Paxos算法由来
      • 2.3 产生背景
    • 3. 算法详解
      • 3.1 角色 & 提案
        • 提案 (Proposal)
        • 角色
      • 3.2. 问题描述
        • 3.2.1. 一致性算法的前置条件
        • 3.2.2. 不同角色通过发送消息进行通信
      • 3.3. 推导过程
        • 3.3.1. 只有一个Acceptor
        • 3.3.2. 多个Acceptor
        • 3.3.2.1. 约定P1
        • 3.3.2.2. 约定P2
      • 3.4. 算法流程
        • 3.4.1. Proposer提出提案
          • (一). 学习阶段:Prepare请求
          • (二). 接受阶段:Acceptor请求
        • 3.4.2. Acceptor接受提案
    • 4. Paxos算法描述
    • 5. Learner学习提案
    • 6. 如何保证Paxos算法的活性

  • 官网:Apache ZooKeeper

世界上只有一种一致性算法,就是 Paxos。出自一位 Google 大神之口。Paxos 也是出名的 晦涩难懂,推理过程极其复杂。Paxos 有点类似之前说的 2PC,3PC,但是解决了这两种算法各种硬伤。该算法在很多大厂都得到了工程实践,比如阿里的 OceanBase 的 分布式数据库,底层就是使用的 Paxos 算法。再比如 Google 的 chubby 分布式锁 也是用的这个算法。可见该算法在分布式系统中的地位,甚至于,Paxos 就是 分布式一致性 的代名词。

1. Paxos算法是什么

Paxos 算法是 基于消息传递 且具有 高效容错特性 的一致性算法,目前公认的解决 分布式一致性问题 最有效的算法之一.

2. Paxos算法产生背景

2.1. 拜占庭将军问题

拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致的决定。但由于信使中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图会干扰一致性的达成。

2.2. Paxos算法由来

故事背景是古希腊 Paxos 岛上的多个法官在一个大厅内对一个议案进行表决,如何达成统一的结果。他们之间通过服务人员来传递纸条,但法官可能离开或进入大厅,服务人员可能偷懒去睡觉。

2.3 产生背景

在常见的 分布式系统 中,总会发生 节点宕机网络异常 (包括消息的 重复丢失延迟乱序网络分区) 等情况。
Paxos 算法主要就是解决如何在一个 发生如上故障 的分布式系统中,快速正确的在集群内 对某个值达成一致,并且保证 整个系统的一致性

3. 算法详解

3.1 角色 & 提案

提案 (Proposal)

注意:提案的范围>value.后面会讲到,[提案=编号+Value].也可表示为[M,V]. 以下描述中暂定: 提案=P,Value=V.

角色
  1. Proposer : Proposer 可以 提出提案 (Proposal)。
  2. Accecptor : Acceptor 可以 接受提案。一旦接受提案,提案 里面的 value 值就被选定了。
  3. Learner : Acceptor 告诉 Learner 哪个提案被选定了,那么 Learner 就学习这个被选择的 value。


在具体的实现中,一个进程即可能是Proposer,也可能是Acceptor,也可能是Learner。

3.2. 问题描述

Paxos 算法的核心是 一致性。所以将从一致性问题的描述来讲解该算法怎么解决实际问题。

3.2.1. 一致性算法的前置条件
  1. 在被提出的 P 中,只有一个 V 被选中。
  2. 如果没有 P 被提出,就没有 V 被选中。
  3. 在 P 被选定后,进程都可以学习被选中的 P。
3.2.2. 不同角色通过发送消息进行通信
  1. 每个角色以任意的速度执行,可能因出错而停止,也可能会重启。一个 value 被选定后,所有的角色可能失败然后重启,除非那些失败后重启的角色能记录某些信息,否则等他们重启后无法确定被选定的值。
  2. 消息在传递过程中可能出现 任意时长的延迟,可能会 重复,也可能 丢失,但是消息不会被 损坏

3.3. 推导过程

3.3.1. 只有一个Acceptor

一个 Acceptor 接受一个 P,那么只有一个 V 被选定。
问题:如果这个 Acceptor 宕机,那么整个系统服务不可用。

3.3.2. 多个Acceptor

问题:如何在多 Proposer 和多 Acceptor 情况下,选定一个 value?
讲解步骤分两阶段:约定 P1 和 约定 P2。

3.3.2.1. 约定P1
  • P1 :一个 Acceptor 必须接受一个它收到的第一个 P。
    如果每个 Proposer 会产生不同的 P,那么多个 Proposer 必定产生多个 P,发给多个 Acceptor。根据 约定 P1,Acceptor 分别接受到 P,就会导致不同的 V 被选定,如下图所示:
  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • 如上图所示,P1 会产生的问题: v1、v2、v3 都没有被选定,因为他们只有被一个 Acceptor 接受。
    对于上述问题,我们需要一个额外的约定:
  • P1a : 一个提案 P 被选定,需要被半数以上 Acceptor 接受.
    对于 P1a,其实就意味着 一个Acceptor必须接受不止一个提案
    显然,这与 P1 相矛盾,所以需要重新设计提案。原来的设计是: [提案P = value],现在重新设计 [提案P = 提案编号 + value],可表示为 [M,V]。
  • 新问题:多提案被选定,如何保证被选定的提案 P 具有相同的value?
3.3.2.2. 约定P2
  • P2 : 如果提案 P[M0,V0] 被选定了,那么所有比 M0 编号更高的,且被选定的 P,其 value 的值也是 V0。
    对于 P2 中的 “被选定”:一个提案要被选定,首先至少要被一个 Acceptor 批准。因此,可以理解 P2 为:
  • P2a : 如果提案 P[M0,V0] 被选定了,那么所有比 M0 编号更高的,且 [被Acceptor批准] 的P,其 value 值也是 V0。
    只要满足 P2a,就能满足 P2。多提案被选择 的问题解决了,但是由于 网络不稳定 或者 宕机 的原因(不可避免),会产生新问题:
    • 假设有 5 个 Acceptor。Proposer2 提出 [M1,V1]的提案,Acceptor2~5(半数以上)均接受了该提案,于是对于 Acceptor2~5 和 Proposer2 来讲,它们都认为 V1 被选定。
    • Acceptor1 刚刚从 宕机状态 恢复过来(之前 Acceptor1 没有收到过任何提案),此时 Proposer1 向 Acceptor1 发送了 [M2,V2] 的提案 (V2≠V1且M2>M1)。对于 Acceptor1 来讲,这是它收到的 第一个提案。根据 P1(一个 Acceptor 必须接受它收到的 第一个提案),Acceptor1 必须接受该提案。同时 Acceptor1 认为 V2 被选定。
    • 这就出现了两个问题:
  1. Acceptor1 认为 V2 被选定,Acceptor2~5 和Proposer2 认为 V1 被选定。出现了不一致
  2. V1 被选定了,但是 编号更高 的被 Acceptor1 接受的提案 [M2,V2] 的 value 为 V2,且 V2≠V1。这就跟 P2a(如果某个 value 为 v的提案被选定了,那么每个 编号更高 的被 Acceptor 接受的提案的 value 必须也是 v)矛盾了。

基于以上问题,所有就有了 P2b:

  • P2b : 如果 P[M0,V0] 被选定后,任何 Proposer 产生的 P,其值也是 V0。
  • 对于 P2b 中的描述,怎样保证 任何Proposer产生的P,其值也是V0 ?只要满足 P2c 即可:
    P2c: 对于任意的 M、V,如果 [M,V] 被提出,那么存在一个半数以上的 Acceptor 组成的组合 S,满足以下两个条件中的任何一个: ① S 中没有一个接受过编号小于 M 的提案。 ② S 中的 Acceptor 接受过的最大编号的提案的 value 为 V。

3.4. 算法流程

3.4.1. Proposer提出提案

总体思路如下:

(一). 学习阶段:Prepare请求

Proposer 选择一个新的提案 P[MN,?] 向 Acceptor 集合 S(数目在半数以上)发送请求,要求 S 中的每一个 Acceptor 做出如下响应:

  1. 如果 Acceptor 没有接受过提案,则向 Proposer 保证 不再接受编号小于N的提案
  2. 如果 Acceptor 接受过请求,则向 Proposer 返回 已经接受过的编号小于N的编号最大的提案
(二). 接受阶段:Acceptor请求
  1. 如果 Proposer 收到 半数以上 的 Acceptor 响应,则 生成编号为N,value 为 V 的提案 [MN,V],V 为所有响应中 编号最大 的提案的 value。
  2. 如果 Proposer 收到的响应中 没有提案,那么 value 由 Proposer自己生成,生成后将此提案发给 S,并期望 Acceptor 能接受此提案。
3.4.2. Acceptor接受提案
  • Acceptor 可以忽略任何请求(包括 Prepare 请求和 Accept 请求)而不用担心破坏 算法的安全性。因此,我们这里要讨论的是什么时候 Acceptor 可以响应一个请求。
  • 对 Acceptor 接受提案给出如下约束:
    P1b:一个 Acceptor 只要尚未响应过任何编号大于 N 的 Prepare 请求,那么就可以接受这个编号为 N 的提案。
    如果 Acceptor 收到一个编号为 N 的 Prepare 请求,在此之前它已经 响应过 编号大于 N 的 Prepare 请求。根据 P1b,该 Acceptor 不可能接受编号为 N 的提案。因此,该 Acceptor 可以 忽略 编号为 N 的 Prepare 请求。当然,也可以回复一个 error,让 Proposer 尽早知道自己的提案 不会被接受
    因此,一个 Acceptor 只需记住:
  1. 已接受的编号最大的提案;
  2. 已响应的请求的最大编号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. Paxos算法描述

5. Learner学习提案

Learner 学习(获取)被选定的 value 有如下三种方案:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6. 如何保证Paxos算法的活性

  • Paxos 在 节点宕机恢复消息无序或丢失网络分化 的场景下能保证 数据的一致性。而 Paxos 的描述侧重于 理论,在实际项目应用中,处理了 N 多实际细节后,可能已经变成了另外一种算法,这时候正确性已经无法得到理论的保证。
    要证明分布式一致性算法的正确性通常比实现算法还困难。所以很多系统实际中使用的都是以 Paxos 理论 为基础而 衍生 出来的变种和简化版。
  • 例如 Google 的 Chubby、MegaStore、Spanner 等系统,ZooKeeper 的 ZAB 协议,还有更加容易理解的 Raft 协议。

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

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

相关文章

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置(账户/团队/用户)①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

程序计数器

程序计数器 JVM中的程序计数器(Program Counter Register)并非是广义上所指的物理寄存器,是对物理PC寄存器的一种抽象模拟 PC寄存器(程序计数器) PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 它是一块很…

机器人在果园内行巡检仿真

文章目录 创建工作空间仿真果园场景搭建小车模型搭建将机器人放在仿真世界中创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws仿真果园场景搭建 cd ~/catkin_ws/src git clone https://gitcode.com/clearpathrobotics/cpr_gazebo.git小车模型搭建 DiffBot是一种具有两个…

视频技术2:把rtsp转为各种格式,包括webrtc

前题是启动ABLMediaServer,把ini里的hls_enable1 1、添加rtsp到视频服务器 http://127.0.0.1:7088/index/api/addStreamProxy?secret035c73f7-bb6b-4889-a715-d9eb2d1925cc&vhost_defaultVhost_&appMedia&streamCamera_00001&enable_hls1&ur…

HTML5+CSS3小实例:具有悬停效果的3D闪耀动画

实例:具有悬停效果的3D闪耀动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, init…

电学基础知识

目录 电流 前言 电流的产生 电流的单位安培&#xff08;A&#xff09; 电路和电池 开路和闭路 电灯泡原理 对电池容量的理解 毫安时 毫瓦时 直流电和交流电 AC交流电 DC直流电 直流电和交流电对比 电压 对电器的电压和电流的理解 电阻 电压电阻电子的关系 欧…

Vulnhub - Raven2

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Raven2 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/raven-2,269/ 0x01 信息收集 Nmap扫描…

DC-DC 变换集成电路芯片MC34063A,内含温度补偿的参考电压源(1.25V)、比较器、能有效限制电流及控制工作周期的振荡器,驱动器及大电流输出开关管等

MC34063A 为一单片 DC-DC 变换集成电路&#xff0c;内含温度补偿的参考电压源&#xff08;1.25V&#xff09;、比较器、能有效限制电流及控制工作周期的振荡器&#xff0c;驱动器及大电流输出开关管等。外配少量元件&#xff0c;就能组成升压、降压及电压反转型 DC-DC 变换器。…

三菱FX3U/FX5U的采集方式有哪些?如何快速采集?

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;扮演着至关重要的角色。三菱FX3U和FX5U作为三菱电机公司推出的两款经典PLC产品&#xff0c;广泛应用于各种工业自动化控制系统中。为了更好地实现对这些PLC设备的数据采集与远程控制&#xff0c;我们引…

危险废物处理不容忽视,环保企业责任在肩|中联环保圈

铝熔炼企业产生的大量铝灰渣&#xff0c;属于危险废物&#xff0c;其处理问题引起了广泛关注。在江西省抚州市&#xff0c;生态环境局副局长祝志辉强调&#xff1a;“铝灰渣的处理必须委托有资质的第三方进行。”他进一步解释说&#xff0c;铝灰的主要成分为金属铝和铝氧化物&a…

软考真题详解-系统架构设计师-计算机基础知识(1)

题目1&#xff1a;计算机系统中硬件层之上的软件通常按照三层来划分&#xff0c;如下图所示&#xff0c;图中①②③分别表示&#xff08;1&#xff09;。 A.操作系统、应用软件和其他系统软件 B.操作系统、其他系统软件和应用软件 C.其他系统软件、操作系统和应用软件 D.应…

递推算法C++

所谓递推&#xff0c;是指从已知的初始条件出发&#xff0c;依据某种递推关系&#xff0c;逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定&#xff0c;或是通过对问题的分析与化简后确定。从已知条件出发逐步推到问题结果&#xff0c;此种方法叫顺推…

第一阶段回顾

一、IP、网络等初步认知 L1~L3&#xff08;物理层到网络层&#xff09;以及端到端如何走&#xff1f;&#xff01; 1.1 OSI七层参考模型 方向 方向分为上下和左右 上下流向&#xff08;南北&#xff09;&#xff1a; 左右流向&#xff08;南北流向&#xff09;&#xff1a; 注意…

堆叠与集群

8.1堆叠与集群概述 随着企业的发展&#xff0c;企业网络的规模越来越大&#xff0c;这对企业网络提出了更高的要求&#xff1a;更高的可靠性、更低的故障恢复时间、设备更加易于管理等。传统的园区网高可靠性技术出现故障时切换时间很难做到毫秒级别、实现可靠性的方案通常为一…

高架学习笔记之信息系统分类概览

目录 零、前言 一、业务处理系统(TPS) 概念 功能 特点 二、管理信息系统(MIS) 概念 功能 组成 三、决策支持系统(DSS) 概念 功能 特点 组成 1. 数据仓库 2. 数据挖掘工具 3. 决策模型 4. 可视化界面 四、专家系统(ES) 概念 特点 组成 求解过程 专家系统…

开箱即用之 windows部署jdk、设置nginx、jar自启

jdk安装 官网下载对应的安装包&#xff0c;解压之后放在本地指定的文件夹下 传送门https://www.oracle.com/java/technologies/downloads/#jdk21-windows 我比较喜欢下载zip方式的&#xff0c;解压之后直接能用&#xff0c;不需要安装了 配置环境 JAVA_HOME 添加path路径 …

蓝桥杯-Sticks-DFS搜索

题目 样例输出是 6 5 题目中给错了&#xff0c;不知道什么时候会改。 思路 --剪枝&#xff0c;否则时间复杂度和空间复杂度过大&#xff0c;会超时。 --注意有多组测试样例时&#xff0c;需要将bool数组重新赋值为false。 --函数类型不是void&#xff0c;return语句不能省…

倍思、南卡、Cleer开放式耳机好用吗?深度测评行业精品!

​作为一名资深数码评测博主&#xff0c;我拥有五年的行业经验&#xff0c;期间深入体验了众多蓝牙耳机&#xff0c;涵盖了从新兴小众品牌到知名大厂的各种产品。我经常收到不同品牌的邀请&#xff0c;希望我能为他们的产品提供评测。在我的社交媒体私信中&#xff0c;也经常有…

【LeetCode】升级打怪之路 Day 24:回溯算法的解题框架

今日题目&#xff1a; 46. 全排列51. N 皇后78. 子集 目录 LC 46. 全排列LC 51. N 皇后LC 78. 子集 【classic】1&#xff09;思路一2&#xff09;思路二 今天学习了回溯算法的解题框架&#xff1a;回溯算法解题套路框架 | labuladong 回溯算法的整体框架都是&#xff1a; re…

在16G的GPU上微调Mixtral-8x7B

Mixtral-8x7B是最好的开源llm之一。但是消费级硬件上对其进行微调也是非常具有挑战性的。因为模型需要96.8 GB内存。而微调则需要更多的内存来存储状态和训练数据。比如说80gb RAM的H100 GPU是不够的。 这时我们就想到了QLoRA&#xff0c;它将模型大小除以4&#xff0c;同时通…