Paxos 算法-浅显易懂的方式解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Paxos 算法-浅显易懂的方式解析


——本文由 MageByte 团队的「青叶」编写

Paxos 算法是一种提高分布式系统系统容错性的一致性算法 。对于一个一致性算法 有以下特点:

  • 在所有被提出的提案中,只有一个会被选定。
  • 如果没有提案被选出,就不会有选定的提案。
  • 当一个提案被选定后,所有的节点进程都可以获取到被选定的提案信息。
  • 一旦 “接受者” 接受了提议,就不能再接受其他提议内容。

算法过程

在该一致性算法中有三种参与角色。分别为 “提议者(Proposer 向 “接受者” 提出提案)”、“接受者(Acceptor 收到 “提议者” 的提议后,向提议者表达自己的意见)”、“学习者(Learner 天被确定后,学习者获取被确定的提议)”

  • 第一阶段:因为存在多个 “提议者” ,如果都提出提案,那么 “接受者” 接受谁的不接受谁的?太混乱了。所以要先明确具有领袖权的提议者才有权提出提案。所以规定一些有领导权力的 “提案者” 可以提出提案。 “接受者” 们就主要去处理这个 “提案者” 的提案了。(这样,才可以在提案提出时就尽量让意见统一,谋求尽早形成多数派)。
  • 第二阶段:由以上阶段选出来的主 “提议者” 提出提案,“接受者” 反馈意见。如果多数 “接受者” 接受了一个提案(达到半数以上),那么提案就通过了。

提案者选定与意见处理

  1. 怎么明确意见领袖呢?通过编号。每个“提议者”在第一阶段先报个号,谁的号大,谁就是意见领袖。如果不好理解,可以想象为贿选。每个提议者先拿着钞票贿赂一圈“接受者”,谁给的钱多,第二阶段“接受者”就听谁的。(注:这里和下文提到的“意见领袖”,并不是一个新的角色,而是代表在那一轮贿赂成功的“提议者”。所以,请把意见领袖理解为贿赂中胜出的“提议者”即可)。
  2. 有个跟选举常识不一样的地方,就是每个 “提案者” 不会执着让自己的提案通过,而是每个 “提案者” 会执着于让提议尽快达成一致意见。所以为了这个目标,如果 “提案者” 在贿赂的时候发现 “接受者” 已经接受了前面意见领袖的提议,即便 “提议者” 贿赂成功,也会默默地把自己提案修改成前面意见领袖的提议(这样就会更快的达到多数派)。
  3. 钱的多少很重要,若果钱少了,无论第一还是第二阶段 “接受者” 都不会接受,直接拒绝。
  4. 上面 2 中提到如果 “提案者” 在贿赂的时候发现前面已经有意见领袖的提议,那就将自己的提议默默地改成意见领袖的提议。但是这里有一种情况,如果你是 “提议者” ,在贿赂的时候, “接受者n” 回复你说 “他收到的意见领袖的提案是 方案 n ”,而 “接受者 n + 1” 回复你说 “他收到的意见领袖提议的方案是 n + 1”。这时候我们该怎么办。原则很简单,还是: “钱的多少重要!”,你就判断下 “是接受者 n ” 见过的意见领袖有钱还是 “接受者 n + 1” 见过的领袖提议者有钱。你就把自己的提议改成意见领袖钱多的那个 提议。
  5. 在整个选举过程中,每个提案者谁先来后到,“接受者” 什么时候收到 “提案者” 的提议是完全不可控的。所以有可能一个意见领袖已经产生了,但是由于这个意见领袖的第二阶段才刚刚开始,很多 “接受者” 还没有收到这个意见领袖的提案。这时候突然来了一个新的土豪 “提案者” ,那么这个土豪也是有可能让自己提案胜出。会出现这样的博弈现象:
  • 上一个意见领袖要赶在土豪 “提案者” 贿赂到 “接受者” 前接受自己的提案,否则会因为自己之前贿赂的钱少于土豪被拒绝。
  • 土豪 “提案者” 要赶在上一个意见领袖者将提议传达给 “接受者” 前贿赂到 “接受者”,否则土豪 “提议者” 基石贿赂成功,也要默默地将自己的提议改成前任领袖的提议内容。不管怎么样,最终先得到多数 “接受者” 的认可,那么这个提议就胜出了。

总结

  1. Paxos 算法包括两个阶段:第一阶段主要就是贿赂,还没有提出提议;第二个阶段就是根据第一阶段的结果,明确接受谁的提议,并且明确提议的内容(这个提议可能是贿赂选取胜出的 “提案者” 自己的提议,也可能是前任意见领袖的提议)。
  2. 编号(贿赂金额大小)很重要,无论哪个阶段,编号小的都会被拒绝。
  3. 在第一阶段中,一旦 “接受者” 已经接受了前面的意见领袖的提议,后面再来找这个 “接受者” 的 “提议者” ,即便是贿赂胜出,也要老实的把自己的提案内容改成前面领袖提议的内容,这点尤为重要。接着这个 “提案者” 也会在第二阶段提出改变后的提议(为了一件快速达成一致)。如果 “接受者” 之前没有接收过任何提议,那贿赂成功的 “提议者” 就可以提出自己的提议了。

简单示例说明

有两个 “提案者” 和三个 “接受者”

  1. 首先 “提案者1” 贿赂了 3个 “接受者”。也就是第一阶段
    image.png
  2. 三个 “接受者” 记下贿赂的金额大小,目前只有一个 “提案者” 出价贿赂,因此 $1就是最高的,所以 3 个 “接受者” 返回 “提案者1” 贿赂成功。另外,因为没有任何先前的意见领袖提出提议,因此 “接受者” 们告诉 “提案者1” 之前没有接受过提议,自然也就没有上一个意见领袖贿赂金额了。
  3. “提案者1” 准备执行第二阶段: 向 “接受者1” 提出了自己的提议:内容为 1 号提议,并告诉自己之前贿赂的金额$1。
  4. “接受者1” 检查了下,目前贿赂的金额就是 $1,于是就接受了 这个提议,并且把 1号提议的内容记录在案。
  5. 在 “提议者1” 向 “接受者2”、“接受者3” 发起提议之前,土豪 “提议者2” 出现了,他开始使用 $2贿赂 “接受者1“ 和 “接受者2”。
    image.png
  6. “接受者1” 和 “接受者2” 就被土豪 “提议者2” 收买了,将贿赂金额改成了 $2,但是,不同的是 “接受者1” 告诉响应 “提案者2” ,之前已经接受过 “提案者1” 提出的1号提议了。而 “接受者2” 告诉 “提案者2” 之前没有收到过其他领袖的提议。
  7. 这时候 “提案者1” 回神了,他向 “接受者2” 和 “接受者3” 发起 1号内容提议,并且携带之前贿赂过金额 $1的信息。
  8. “接受者2” 和 “接受者3” 开始回复:“接受者2” 检查了下自己记录的金额2了,而你之前出的1,于是就接受了这个提议内容,并且把1号提议记录在案。
  9. 到这里,“提案者1” 已经获得了两个接受者的赞同,达到了 半数通过的场景。于是 “提案者1” 确定了一号提议内容最终通过。
  10. 我们再回到 “提案者2” ,之前贿赂了 “接受者1” 和 “接受者2”,并且被 “接受者1” 告知: “之前已经接受过一号提议了,并且最高金额是¥1。这个时候 “提案者2” 拿到信息后判断一下,目前就是1号提议内容,就默默地把自己的提议内容改成了 1号。然后向 “接受者1” 和 “接受者2” 发起提议,提议内容已经变成 1号。并且携带信息之前已经贿赂过金额 $2。
  11. “接受者1” 和 “接受者2” 收到 “提案者2” 的提议后,继续按照之前流程 对比下贿赂金额,记录的是之前贿赂的金额 $2,所以就接受了提议,其实就是 “提案者1” 提出的内容。就这样最终1号提议内容通过。

欢迎加群与我们分享,我们第一时间反馈。关注公众号,后台回复 加群即可获取个人微信。


JavaStorm.png

相关文章
|
14天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
1月前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
200 30
|
17天前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
1月前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
346 15
|
1月前
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
47 1
|
2月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
79 4
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
103 2
|
3月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
90 0
|
20天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
20天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多