这篇文章粗略讲一下两阶段提交协议,即2PC,Two Phase Commitment Protocol。之所以称为两阶段提交,是相对于单库的事务提交方式来说的。我们在单库上完成相关的数据库操作后,就会直接提交或者回滚,而在分布式系统中,在提交之前增加了准备的阶段,所以称为两阶段提交。
图1显示的就是第一阶段提交的情况,可以看到,参与操作的是事务管理器与两个资源。
图1 第一阶段
图2所示的是第二阶段的情况。
图2 第二阶段
此外还会遇到的另外一种情况,就是在准备阶段有一个资源失败,那么在第二阶段的处理就是回滚所有资源,如图3和图4所示。
图3 出现问题的第一阶段
图4 第一阶段出现问题后的第二阶段
前面对两阶段提交的介绍都是在理想状态下的情况。在实际当中,由于事务管理器自身的稳定性,可用性的影响,以及网络通信中可能产生的问题,出现的情况会复杂很多。此外,事务管理器在多个资源之间进行协调,它自身要进行很多日志记录的工作。网络上的交互次数的增多以及引入事务管理器的开销,是使用两阶段提交协议使分布式事务的开销增大的两个方面。
因此,在进行垂直拆分或者水平拆分后,需要想清楚是否一定要引入两阶段的分布式事务,在必要的情况下才建议使用。
分享到:
相关推荐
自己整理的XA两阶段提交和一阶段提交的说明,希望对你有用
mysql数据库一阶段提交和两阶段提交的说明和区别, 各自优点和缺点, 重点介绍两阶段提交的各个过程,
两阶段提交1
NULL 博文链接:https://eleopard.iteye.com/blog/2107415
2 两阶段提交在分布式系统中,事务往往包含有多个参与者的活动,单个参与者上的活动是能够保证原子性的,而多个参与者之间原子性的保证则需要通过两阶段提交来实现,两阶
ejb3事务分容器管理事务(CMT)和Bean管理事务(BMT),这里讲述了CMT情况下,两阶段提交例子(tow-phase commit),展示ejb容器为我们做的事情,其实就是ejb容器提供商,已经帮开发者解决了的问题。数据库分别是oracle...
两阶段提交 分布式计算中的第二个项目:两阶段提交。 第一个项目是在全局范围内的函数中实现的,所以我必须为xmlrpc接口注册所有的put、get、del函数。 后来参考了一些其他同学的作品,我意识到构建系统的更好方法...
#资源达人分享计划#
采用.NET实现以下功能 1. MQ 独立事务 2. 多MQ之间的XA事务 3. MQ与数据库之间的XA事务
本文实例讲述了MongoDB数据库两阶段提交实现事务的方法。分享给大家供大家参考,具体如下: MongoDB数据库中操作单个文档总是原子性的,然而,涉及多个文档的操作,通常被作为一个“事务”,而不是原子性的。因为...
#资源达人分享计划#
leveldb的两阶段提交协议。 描述 为本地群集复制提供强一致性。 群集中的每个节点都是可写的,并且从任何节点进行的所有读取都是一致的。 使用支持可注入的传输,例如实现浏览器兼容性。 建立状态 规格 这是如何...
mongodb交易 使用猫鼬重新实现 基于本文的 如何运行两阶段提交 yarn twoPhase
Flink MySQL二阶提交代码,为了保证前一次 CheckPoint 成功后到这次 CheckPoint 成功之前这段时间内的数据不丢失,如果执行到一半过程任务失败了,从而导致前一次CheckPoint成功后到任务失败前的数据已经存储到了...
TCP协议的复制密钥值存储 使用两阶段提交算法构建TCP客户端/服务器以支持复制。
交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者...
传统拜占庭一致性中常见的中心化和去中心化算法在解决合法性验证的过程中存在容错率低、消息复杂度高等问题,为此,提出新的区块链一致性算法,引入两阶段提交和法定人数投票的过程,利用区块链协议的分布式总账特点...