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

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

两阶段提交 (2PC)


两阶段提交(2PC)

第一阶段:协调者询问参 可者事务是否执行成功,参与者发回事务执行结果。这一阶段的协调者有超

时机制,假设因为网络原因没有收到某参与者的响应或某参与者挂了,那么超时后就会判断事务失

败,向所有参与者友送回滚命令

第二阶段:如果事务在每个参与者上都执行成功,事务协调者才发送通知让参与者提交事务;否则,协调者发送通知让参与者回滚事务。这一阶段的协调者的没法超时,只能不断重试。


协调者是一一个单点,存在单点故障问题

假设协调者在发送准备命令之前挂了,还行等于事务还没开始。

假设协调者在发送准备命令之后挂了 这就不太行了,有些参与者等于都执行了处于事务资源锁定的状态。不仅事务执行不下去,还会因为锁定了一些公共资源而阻塞系统其它操作。

假设协调者在发送回滚事务命令之前挂了,那么事务也是执行不下去,且在第一阶段那些准备成功参与者都阻塞着。

假设协调者在发送回滚事务命令之后挂了,这个还行,至少命令发出去了,很大的概率都会回滚成功,资源都会释放。但是如果出现网络分区问题,某些参与者将因为收不到命令而阻塞着。

假设协调者在发送提交事务命令之前挂了,这个不行,傻了!这下是所有资源都阻塞着。

假设协调者在发送提交事务命令之后挂了,这个还行,也是至少命令发出去了,很大概率都会提交成功,然后释放资源,但是如果出现网络分区问题某些参与者将因为收不到命令而阻塞着。


存在的缺点:

同步阻塞 所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作。单点问题 协调者在 2PC 中起到常大的作用,发生故障将会造成很大影响。特别是在阶段二发生故障,所有参与者会一直等待状态,无法完成其它操作。

数据不一致在阶段二,如果协调者只发送了部分 Commit 消息,此时网络发生异常,那么只有部分参与者接收到 Commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。

太过保守 任意一个节点失败就会导致整个事务失败,没有完善的容错机制。

相关文章
|
算法
分布式系统中的那些一致性(CAP、BASE、2PC、3PC、Paxos、ZAB、Raft)
本文介绍 CAP、BASE理论的正确理解、Paxos 算法如何保证一致性及死循环问题、ZAB 协议中原子广播及崩溃恢复以及 Raft 算法的动态演示。
390 0
|
10月前
|
分布式计算 算法
分布式系统设计之共识算法—2PC、3PC、 Paxos
分布式系统设计之共识算法—2PC、3PC、 Paxos
173 1
|
10月前
|
存储 消息中间件 关系型数据库
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
解密分布式事务:CAP理论、BASE理论、两阶段提交(2PC)、三阶段提交(3PC)、补偿事务(TCC)、MQ事务消息、最大努力通知
196 0
|
算法 Oracle 关系型数据库
【分布式】分布式事务基础概念(2PC,3PC,TCC)
【分布式】分布式事务基础概念(2PC,3PC,TCC)
1152 1
|
消息中间件 算法 程序员
分布式事务 2PC
分布式事务是指跨越多个计算机节点的事务,涉及到多个数据库或其他资源的访问和更新。在分布式事务中,由于数据分布在不同的节点上,因此需要采用一些特殊的技术来保证事务的一致性和可靠性,其中最常用的技术之一就是两阶段提交(Two-Phase Commit,2PC)。
150 0
分布式事务 2PC
|
消息中间件 缓存 NoSQL
分布式事务 3PC
3PC(Three-Phase Commit)是一种增强型的2PC(Two-Phase Commit)协议,用于解决2PC协议存在的可靠性问题和性能问题。3PC协议将2PC协议的两个阶段分为了三个阶段,同时引入了超时机制,从而提高了协议的可靠性和容错性。
150 0
|
存储 关系型数据库 MySQL
【JavaP6大纲】分布式事务篇:BASE理论
【JavaP6大纲】分布式事务篇:BASE理论
121 0
【JavaP6大纲】分布式事务篇:CAP理论
【JavaP6大纲】分布式事务篇:CAP理论
【JavaP6大纲】分布式事务篇:三阶段提交(3PC)
【JavaP6大纲】分布式事务篇:三阶段提交(3PC)
126 0
|
23天前
|
NoSQL Java 中间件
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
本文介绍了从单机锁到分布式锁的演变,重点探讨了使用Redis实现分布式锁的方法。分布式锁用于控制分布式系统中多个实例对共享资源的同步访问,需满足互斥性、可重入性、锁超时防死锁和锁释放正确防误删等特性。文章通过具体示例展示了如何利用Redis的`setnx`命令实现加锁,并分析了简化版分布式锁存在的问题,如锁超时和误删。为了解决这些问题,文中提出了设置锁过期时间和在解锁前验证持有锁的线程身份的优化方案。最后指出,尽管当前设计已解决部分问题,但仍存在进一步优化的空间,将在后续章节继续探讨。
468 131
【📕分布式锁通关指南 02】基于Redis实现的分布式锁

热门文章

最新文章