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

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

分布式系统设计之共识算法—2PC、3PC、 Paxos 分布式共识协议有什么作用?

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

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

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

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

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

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

1.2 具体流程

2PC协议的两个步骤:

    请求(投票)阶段:联系每一位参与者,提出价值并收集他们的回应。提交阶段:如果每个人都同意,请再次联系每个参与者,让他们知道。否则,请联系每个参与者以中止共识。
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中两个重要的角色:

提议者:

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

接受者:

    收到提案后,将其编号与您已经同意的编号最高的提案进行比较。如果新提案更高,请回复“同意”您已接受的任何提案的价值。如果它较低,则回复“拒绝”,以及最高提案的序列号。当收到“提交”消息时,如果 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存