【JavaP6大纲】分布式事务篇:三阶段提交(3PC)

简介: 【JavaP6大纲】分布式事务篇:三阶段提交(3PC)

三阶段提交(3PC)? 搜索评论笔记


3PC

相比于 2PC 它在参与者中也引入了超时机制,并且新增了一个阶段使得参与者可以利用这一个阶段统各自的状态,3PC 包含了三个阶段,分别是准备阶段、预提交阶段和提交阶段

准备阶段的变更成不会直接执行事务,而是会先去询问此时的参与者是否有条件接这个事务,因此不会来就干活直接锁资源,使得在某些资源不可用的情况下所有参与者都阻塞着。

而预提交阶段的引入起到了一个统一状态的作用,它像一道栅栏,表明在预提交阶段前所有参与者其实还未都回应,在预处理Q阶段表明所有参与者都已经回应了。

假如你是位参与者,你知道自己进入了预提交状态那你就可以推断出来其他参与者也都进入了预提交状态。


缺点:

多引入个阶段也多一个交互,因此性能会差一些,而且绝大部分的情况下资源应该都是可用的,这样等于每次明知可用执行还得询问一次。


和2PC对比:

2PC是同步阻塞的协调者挂在了提交请求还未发出去的时候是最伤的,所有参与者都已经锁定资源并且阻塞等待着,提交阶段 2PC 协调者和某参与者都挂了之后新选举的协调者不知道当前应该提交还是回滚


改进的优势:

新协调者来的时候发现有一个参与者处于预提交或者提交阶段,那么表明已经经过了所有参与者的确认了,所以此时执行的就是提交命令。

所以道 3PC 就县通过21入预提亦阶段来使得 状态得到统一 也就是留了一个阶段让大家同步一下。

但是这也只能让协调者知道该如果做,但不能保证这样做一定对,这其实和上面 2PC 分析一致,因为挂了的参与者到底有没有执行事务无法断定。

所以说3PC 通过预提交阶段可以减少故障恢复时候的复杂性,但是不能保证数据一致,除非挂了的那个参与者恢复。


总结一下

3PC 相对于2PC做了一定的改进:引入了参与者超时机制,并且增加了预提交阶段使得故障恢复之后协调者的决策复杂度降低,但整体的交互过程更长了,性能有所下降,并日环是会存在数据下一致问题,

2PC 和3PC 都不能保证数据100%—致,因此一般都需要有定时扫描补偿机制

相关文章
|
算法
分布式系统中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)
本文介绍 CAP、BASE理论的正确理解、Paxos 算法如何保证一致性及死循环问题、ZAB 协议中原子广播及崩溃恢复以及 Raft 算法的动态演示。
349 0
|
9月前
|
分布式计算 算法
分布式系统设计之共识算法—2PC、3PC、 Paxos
分布式系统设计之共识算法—2PC、3PC、 Paxos
163 1
|
9月前
|
存储 消息中间件 关系型数据库
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
173 0
|
算法 Oracle 关系型数据库
【分布式】分布式事务基础概念(2PC,3PC,TCC)
【分布式】分布式事务基础概念(2PC,3PC,TCC)
1110 1
|
消息中间件 算法 程序员
分布式事务 2PC
分布式事务是指跨越多个计算机节点的事务,涉及到多个数据库或其他资源的访问和更新。在分布式事务中,由于数据分布在不同的节点上,因此需要采用一些特殊的技术来保证事务的一致性和可靠性,其中最常用的技术之一就是两阶段提交(Two-Phase Commit,2PC)。
147 0
分布式事务 2PC
|
消息中间件 缓存 NoSQL
分布式事务 3PC
3PC(Three-Phase Commit)是一种增强型的2PC(Two-Phase Commit)协议,用于解决2PC协议存在的可靠性问题和性能问题。3PC协议将2PC协议的两个阶段分为了三个阶段,同时引入了超时机制,从而提高了协议的可靠性和容错性。
143 0
|
存储 关系型数据库 MySQL
【JavaP6大纲】分布式事务篇:BASE理论
【JavaP6大纲】分布式事务篇:BASE理论
118 0
【JavaP6大纲】分布式事务篇:CAP理论
【JavaP6大纲】分布式事务篇:CAP理论
【JavaP6大纲】分布式事务篇:两阶段提交(2PC)
【JavaP6大纲】分布式事务篇:两阶段提交(2PC)
134 0
|
4月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?