`
samuschen
  • 浏览: 405927 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

两阶段提交协议

 
阅读更多

转http://vvggsky.iteye.com/blog/438634

 

在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。当某一数据库收到预提 交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数据库将不能再在该事务 分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于锁定状态)。如果由于某种原因数据库无法提交属于自己的事 务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。

在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。

伪代码:


假设有两个Connection, con1, con2, 大体的过程如下,

Java代码  收藏代码
  1. con1 = XAResouce1.getConnection...  
  2. con2 = XAResouce2.getConnection...  
  3.   
  4. con1 do  some thing.  
  5. con2 do  some thing.  
  6. after they finish.  
  7.   
  8. pre1 = XAResouce1.prepare();  
  9. pre2 = XAResouce2.prepare();  
  10.   
  11. if ( both pre1 and pre2 are OK){  
  12. XAResouce1 and 2  commit  
  13. }else  {  
  14. XAResouce1 and 2  rollback  

分享到:
评论

相关推荐

    分布式事务两阶段提交协议的实现方法研究.pdf

    两阶段提交协议是实现分布式事务保证原子性、一致性、隔离性和持久性(即ACID属性)的关键技术之一。 传统的两阶段提交协议(2PC)将事务处理分为两个阶段:预提交阶段和决策阶段。在预提交阶段,事务协调者询问...

    分布式数据库两阶段提交协议研究与改进.pdf

    《分布式数据库两阶段提交协议研究与改进》这篇论文主要探讨了分布式数据库中的关键问题——如何确保分布式事务的ACID特性,即原子性、一致性、隔离性和持久性。为了解决这一问题,文章深入研究了两阶段提交(2PC)...

    XA两阶段提交及一阶段提交说明

    XA接口支持两阶段提交协议,确保跨多个资源的事务一致性。JTA在Java平台上提供了对XA事务的支持,其规范定义了接口,但具体的实现由供应商提供,如J2EE容器的JTA实现或独立的JTA实现(如JOTM, Atomikos)。 【二...

    分布式事务之两阶段提交,转载自:银河里的星星

    两阶段提交协议(2PC)就是为了实现这种原子性而设计的。它主要分为两个阶段: 1. 准备阶段(Prepare Phase): 在这个阶段,事务协调者(通常是事务发起者)询问所有参与者(每个涉及事务的节点)是否准备执行...

    oracle-mysql 两阶段提交例子(ejb3)

    两阶段提交协议包括两个主要阶段: 1. **准备阶段**(Prepare Phase):在这个阶段,事务协调者向所有参与事务的资源管理器发送“准备”命令。每个资源管理器执行事务操作,并记录必要的信息以便能够在后续阶段进行...

    基于非阻塞的分布式事务提交协议的实现.pdf

    标题《基于非阻塞的分布式事务提交协议的实现》和描述提到了关于分布式事务提交协议的最新研究和实现,具体内容中介绍了两阶段提交(2PC)和三阶段提交(3PC)协议的...,并提出了一种新的基于非阻塞的两阶段提交协议方案...

    数据库一阶段提交和两阶段提交区别和说明

    一阶段提交(One-Phase Commit)和两阶段提交(Two-Phase Commit)是分布式事务中常见的两种提交协议,它们主要用于保证跨多个数据库节点的事务一致性。 1. **一阶段提交** 一阶段提交简单直接,应用程序向数据库...

    level-2pc:leveldb的两阶段提交协议

    leveldb的两阶段提交协议。 描述 为本地群集复制提供强一致性。 群集中的每个节点都是可写的,并且从任何节点进行的所有读取都是一致的。 使用支持可注入的传输,例如实现浏览器兼容性。 建立状态 规格 这是如何...

    一种基于非阻塞的分布式数据库原子提交协议.pdf

    传统的原子提交协议包括两阶段提交协议(2PC)和三阶段提交协议(3PC)。2PC是最广泛使用的协议之一,它简单且有效,但它的主要缺点是具有阻塞性。所谓阻塞性,是指在发生故障时,事务处理会被挂起,等待恢复或终止...

    分布式短事务系统中提交协议的研究.pdf

    由于短事务的这些特点,传统的两阶段提交协议不适合直接应用于短事务系统。因此,研究者通过创新设计了一种适合短事务特点的提交协议,既保留了传统协议的可靠性,同时克服了它们在短事务场景下的不足,提高了系统的...

    greenplum两阶段事务详解

    在Greenplum数据库中,事务是通过两阶段提交协议来实现的,即Prepare和Commit两个阶段。 在事务的开始阶段,客户端会向服务器发送BeginTransaction命令,以启动事务。服务器收到命令后,会创建一个事务块...

    分布式数据库系统的故障恢复方法.pdf

    本文探讨了分布式数据库系统的故障恢复方法,并详细分析了备份恢复技术和日志恢复技术,以及基于这两种技术的两阶段提交协议和三阶段提交协议。 在分布式数据库系统中,数据分布带来的问题主要包括保持分布一致性、...

    基于Spring4.1.7+atomikos+mybaits 实现两阶段的分布式事务处理

    它能够协调参与事务的各个资源管理器(如数据库),确保遵循两阶段提交协议。 MyBatis是一个轻量级的持久层框架,它允许开发者使用SQL来定义数据操作。在分布式事务场景下,MyBatis可以通过Atomikos提供的JTA支持,...

    分布式数据库系统的故障恢复方法探讨.pdf

    故障恢复技术的实践应用,如日志恢复和备份恢复技术的结合使用,以及两阶段提交协议和三阶段提交协议的运用,都是确保系统从故障状态恢复正常的关键步骤。 分布式数据库系统的故障恢复是一个复杂的过程,需要充分...

    Twophase_#twophase_zip_

    这个压缩包文件可能包含了实现两阶段提交协议的相关源代码。 首先,我们来看一下核心的"twophase.h"头文件。在这个头文件中,可能会定义相关的数据结构、类以及接口。这些通常包括`Coordinator`和`Participant`的...

    支付宝TCC模型

    1. 两阶段提交协议(2PC):这是传统分布式事务处理的一种方法,分为准备和提交两个阶段。在准备阶段,分布式事务协调者请求所有参与者准备执行事务。只有所有参与者都回应准备成功后,协调者才会进入第二阶段,向...

    分布式事务思想和分布式系统入门.txt

    交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者...

    Saga分布式事务解决方案与实践.docx

    两阶段提交协议包括准备和提交两个阶段。在准备阶段,所有的资源都被锁定,直到提交阶段完成。如果提交阶段失败,则所有的资源都会回滚。这种协议可以保证事务的一致性,但是它也存在一些缺陷,例如性能不高、全局锁...

    分布式事务入门GitChat问题实录解答

    在两阶段提交协议中,协调者首先向所有参与者发送准备请求,并等待所有参与者准备好提交事务。如果所有参与者都同意提交,协调者会向所有参与者发出提交请求,然后每个参与者执行提交操作。问题在于,如果协调者在...

Global site tag (gtag.js) - Google Analytics