分布式系统设计之共识算法—2PC、3PC、 Paxos

简介: 分布式系统设计之共识算法—2PC、3PC、 Paxos

分布式共识协议有什么作用?

共识问题分布式计算中最基本的概念之一,是让分布式系统中的一组节点就某事达成一致的问题的一个价值、一个行动方案或一个决定。达成共识允许分布式系统充当单个实体,每个单独的节点都知道并同意整个网络的行为。

例如,共识的一些可能用途是:

  • 分布式事务处理
  • 分布式不同节点间同步时钟
  • 决定分布式算法的下一阶段(这是著名的复制状态机方法)
  • 选举一个领导节点来协调一些更高级别的协议

Google Chubby Service的发明者 Mike Burrows 说“只有一种共识协议,那就是 Paxos”

1 两阶段提交(2PC)协议

1.1 概念

两阶段提交又称 2PC,是一个非常经典的 强一致、中心化的原子提交协议。两阶段提交协议经常用来实现分布式事务,在两阶段协议中,系统一般包含两类节点:一类是 协调者,通常一个系统中只有一个;另一类是事务的 参与者,一般包含多个,在提交过程中任何节点都能当做协调者发起2PC,不必特别选举。

1.2 具体流程

2PC协议的两个步骤

  1. 请求(投票)阶段:联系每一位参与者,提出价值并收集他们的回应。
  2. 提交阶段:如果每个人都同意,请再次联系每个参与者,让他们知道。否则,请联系每个参与者以中止共识。
1.3 问题
  • 性能问题
    无论是在第一阶段的过程中,还是在第二阶段,所有的参与者资源和协调者资源都是被锁住的,只有当所有节点准备完毕,事务 协调者 才会通知进行全局提交,参与者 进行本地事务提交后才会释放资源。这样的过程会比较漫长,对性能影响比较大。
  • 单节点故障
    由于 协调者 的重要性,一旦 协调者 发生故障。参与者 会一直阻塞下去。尤其在第二阶段,协调者 发生故障,那么所有的 参与者 还都处于锁定事务资源的状态中,而无法继续完成事务操作。

2 三阶段提交(3PC)协议

2.1 概念

3PC是2PC的改进版本。3PC主要是为了解决两阶段提交协议的阻塞问题,2PC 存在的问题是当协作者崩溃时,参与者不能做出最后的选择。因此参与者可能在协作者恢复之前保持阻塞。改进措施:

(1) 引入超时机制,同时在 协调者 和 参与者中都引入超时机制。

(2) 在 2PC 的第二阶段中插入一个准备阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。

也就是说,除了引入超时机制之外,3PC 把 2PC 的准备阶段再次一分为二,这样三阶段提交就有 CanCommit、PreCommit、DoCommit 三个阶段。

2.2 具体步骤

将 2PC 的第二阶段——“提交”——分成两个子阶段。第一个是“准备提交”阶段。当协调者在第一阶段收到一致的“是”票时,它会将此消息发送给所有副本。收到此消息后,副本进入一种能够提交事务的状态 - 通过获取必要的锁等 - 但至关重要的是,它们不会做任何他们以后无法撤消的工作。然后他们回复协调员,告诉它“准备提交”消息已收到。

2.3 问题
  • 依然没有完全解决数据不一致的问题

3 Paxos协议

Paxos 起来很像 2PC。提议者向接受者发送“准备”请求。当接受者表示同意接受提案时,提议者向接受者发送提交请求。最后,接受者回复提供者,表明提交请求成功或失败。一旦足够多的接受者提交了价值并通知了提议者,协议就会终止。

Paxos 为 2PC 添加了两个重要的机制。

  • 对请求进行排序,以便确定应该接受两个提案中的哪一个。
  • 当大多数接受者表示他们已经决定时,考虑接受一个提案。这与 2PC 不同,后者只有在每个接受者都同意的情况下才会接受提案。这导致了 2PC 的阻塞特性,其中单个故障节点可能导致协议永远不会终止,而提议者等待永远不会到来的回复。相反,在 Paxos 中,近一半的节点可能无法回复,协议仍将正确继续。

Paxos中两个重要的角色:

提议者:

  1. 向大多数接受者提交编号为n 的请求。等待大多数接受者回复。
  2. 如果多数人回复“同意”,他们还将发回他们已经接受的任何提案的价值。选择其中一个值,并发送带有提案编号和值的“提交”消息。如果尚未接受任何值,请使用您自己的值。相反,如果多数人回复“拒绝”,或未能回复,则放弃提案并重新开始。
  3. 如果大多数人使用“已接受”消息回复您的提交请求,则认为协议已终止。否则,放弃提案并重新开始。

接受者:

  1. 收到提案后,将其编号与您已经同意的编号最高的提案进行比较。如果新提案更高,请回复“同意”您已接受的任何提案的价值。如果它较低,则回复“拒绝”,以及最高提案的序列号。
  2. 当收到“提交”消息时,如果 a) 值与任何先前接受的提案相同并且 b) 它的序列号是您同意的最高提案号,则接受它。否则,拒绝它。

参考文章:

https://www.the-paper-trail.org/post/2008-11-27-consensus-protocols-two-phase-commit/

https://www.the-paper-trail.org/post/2008-11-29-consensus-protocols-three-phase-commit/

https://www.the-paper-trail.org/post/2009-02-03-consensus-protocols-paxos/

https://blog.csdn.net/qq_38289815/article/details/108714855

相关文章
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
155 0
|
10天前
|
存储 分布式计算 负载均衡
分布式(计算机算法)
分布式(计算机算法)
|
30天前
|
缓存 算法 关系型数据库
深度思考:雪花算法snowflake分布式id生成原理详解
雪花算法snowflake是一种优秀的分布式ID生成方案,其优点突出:它能生成全局唯一且递增的ID,确保了数据的一致性和准确性;同时,该算法灵活性强,可自定义各部分bit位,满足不同业务场景的需求;此外,雪花算法生成ID的速度快,效率高,能有效应对高并发场景,是分布式系统中不可或缺的组件。
深度思考:雪花算法snowflake分布式id生成原理详解
|
1月前
|
算法 Java 数据中心
分布式ID生成系统之雪花算法详解
在当今的云计算和微服务架构盛行的时代,分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化,对数据一致性和唯一性的要求也越来越高,尤其是在全局唯一标识符(ID)的生成上。因此,分布式ID生成系统应运而生,成为保证数据唯一性和提高系统可扩展性的关键技术之一。雪花算法(Snowflake)是Twitter开源的一种算法,用于生成64位的全局唯一ID,非常适用于分布式系统中生成唯一标识符。下面我们将深入探讨雪花算法的原理、结构和实现方式。
98 2
 分布式ID生成系统之雪花算法详解
|
2月前
|
存储 分布式计算 负载均衡
浅谈分布式共识算法概念与演进
浅谈分布式共识算法概念与演进
43 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
40 1
|
8天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。