2PC:一个2阶段提交事件数据的同等性协议

分享
手机游戏开发者 2024-9-19 08:04:13 41 0 来自 中国
背景
对一个分布式体系架构计划的过程中,CAP理论中P分区容错性是根本要求,那么就必要在A可用性和C数据同等性之间举行反复的权衡,于是就涌现出一批经典的同等性协媾和算法,此中最著名的就是二阶段提交协议、三阶段提交协媾和Paxos算法了。

在分布式体系中,每一个呆板节点固然都能够明确地知道本身在举行事件操纵过程中的效果是乐成或失败,但却无法直接获取到其他分布式节点的操纵效果。因此,当一个事件操纵必要超过多个分布式节点的时间,为了保持事件处理处罚的ACID特性,就必要引入一个“调和者(Coordinator)”的组件来同一调治全部分布式节点的实行逻辑,这些被调治的分布式节点称为“加入者”(Participant)调和者负责调治加入者的举动,并终极决定这些加入者是否要把事件真正举行提交。基于这个头脑,衍生出了二阶段提交和三阶段提交两种协议。

2PC(Two-Phase Commit)二阶段提交
2PC是盘算机网络尤其是在数据库范畴内,为了分布式体系架构下的全部节点在举行事件处理处罚过程中能够保持原子性和同等性而计划的一种算法。通常,二阶段提交协议也被以为是一种同等性协议,用来包管分布式体系数据的同等性。如今,绝大部分的关系型数据库都是采取二阶段提交协议来完身分布式事件处理处罚的,利用该协议能够非常方便地完成全部分布式事件加入者的调和,同一决定事件的提交或回滚,从而能够有用地包管分布式数据同等性,因此二阶段提交协议被广泛地应用在很多分布式体系中。
二阶段提交协议是将事件的提交过程分成了两个阶段来举行处理处罚。
阶段一:确认是否实行事件扣问请求

1.事件扣问:调和者加入者发起扣问是否可以提交事件。
调和者向全部的加入者发送事件内容,扣问是否可以实行事件提交操纵,并开始等候各加入者的相应。
2.加入者实行事件。
各加入者节点实行事件操纵,并将Undo和Redo信息记入事件日记中。
3.各加入者调和者反馈事件扣问的相应。
如果加入者乐成实行了事件操纵,那么就反馈给调和者 Yes 相应,表示事件可以实行;如果加入者没有乐成实行事件,那么就反馈给调和者No相应,表示事件不可以实行。
调和者组织各加入者对一次事件操纵的投票亮相过程,因此二阶段提交协议的阶段一也被称为“投票阶段”。
阶段二:实行事件提交或停止事件

在阶段二中,调和者会根据各加入者的反馈环境来决定终极是否可以举行事件提交操纵,正常环境下,包罗以下两种可能。
实行事件提交的条件:全部加入者获得的反馈都是Yes相应。
1) 发送提交请求:调和者向全部加入者发出Commit请求。
2) 事件提交:加入者吸收到 Commit 请求后,会正式实行事件提交操纵,并在完成提交之后开释在整个事件实行期间占用的事件资源。
3) 反馈事件提交效果:加入者在完成事件提交之后,向调和者发送Ack消息。
4) 完成事件:调和者吸收到全部加入者反馈的Ack消息后,完成事件。
停止事件的条件:任何一个加入者向调和者反馈No相应,大概在等候超时之后,调和者尚无法吸收到全部加入者的反馈相应。
1) 调和者发送回滚请求:调和者向全部加入者节点发出Rollback请求。
2) 加入者事件回滚:加入者吸收到 Rollback 请求后,会利用其在阶段一中纪录的Undo信息来实行事件回滚操纵,并在完成回滚之后开释在整个事件实行期间占用的资源。
3) 反馈事件回滚效果:加入者在完成事件回滚之后,向调和者发送Ack消息。
4) 停止事件:调和者吸收到全部加入者反馈的Ack消息后,完成事件停止。
二阶段提交将一个事件的处理处罚过程分为了投票和实行两个阶段,其核心是对每个事件都采取先实行后提交的处理处罚方式,因此也可以将二阶段提交看作一个强同等性的算法。
2PC的优缺点
二阶段提交协议的优点:原理简单,实现方便。
二阶段提交协议的缺点:同步壅闭、单点标题、脑裂、太过守旧。
同步壅闭

二阶段提交协议存在的最显着也是最大的一个标题就是同步壅闭,这会极大地限定分布式体系的性能。在二阶段提交的实行过程中,全部加入该事件操纵的逻辑都处于壅闭状态,也就是说,各个加入者在等候其他加入者相应的过程中,将无法举行其他任何操纵。
单点标题

调和者的脚色在整个二阶段提交协议中起到了非常紧张的作用。一旦调和者出现标题,那么整个二阶段提交换程将无法运转,尤其是调和者在阶段二中出现标题的话,其他加入者将会不绝处于锁定事件资源的状态中,而无法继续完成事件操纵。
数据不同等

在二阶段提交协议的阶段二,即实行事件提交的时间,当调和者向全部的加入者发送Commit请求之后,发生了局部网络非常大概是调和者在尚未发送完Commit请求之前自身发生了瓦解,导致终极只有部分加入者收到了Commit请求。于是,这部分收到了Commit请求的加入者就会举行事件的提交,而其他没有收到Commit请求的加入者则无法举行事件提交,于是整个分布式体系便出现了数据不同等性征象
太过守旧

如果在调和者指示加入者举行事件提交扣问的过程中,加入者出现故障而导致调和者始终无法获取到全部加入者的相应信息的话,这时调和者只能依赖其自身的超机遇制来判定是否必要停止事件,如许的计谋显得比较守旧。换句话说,二阶段提交协议没有计划算为美满的容错机制,恣意一个节点的失败都会导致整个事件的失败。


摘取自倪超《从Paxos到Zookeeper:分布式同等性原理与实践》
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 02:21, Processed in 0.199144 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表