`
y806839048
  • 浏览: 1126816 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

XA分布式事务处理两阶段提交

阅读更多

在谈到 XA 规范之前,必须首先了解分布式事务处理( Distributed Transaction Processing  DTP )的概念。 Transaction ,即事务,又称之为交易,指一个程序或程序段,在一个或多个资源如 数据库 或文件上为完成某些功能的执行过程的集合。 
  分布式事务处理是指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。 
  X/Open 组织(即现在的 Open Group )定义了分布式事务处理模型。 X/Open DTP 模型( 1994 )包括应用程序( AP )、事务管理器( TM )、资源管理器( RM )、通信资源管理器( CRM )四部分。一般,常见的事务管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息中间件。
  通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。 
所 谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务,例如,一个事务中可能更新几个不同的数据库。对 数据库的操作发生在系统的各处但必须全部被提交或回滚。此时一个数据库对自己内部所做操作的提交不仅依赖本身操作是否成功,还要依赖与全局事务相关的其它 数据库的操作是否成功,如果任一数据库的任一操作失败,则参与此事务的所有数据库所做的所有操作都必须回滚。 
  一般情况下,某一数据库无法知道其它数据库在做什么,因此,在一个 DTP 环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。 
   XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。 

XA
 
与两阶段提交协议 
  通常情况下,交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。
   在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。当某一数据库收到预 提交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数据库将不能再在该事 务分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于上锁状态)。如果由于某种原因数据库无法提交属于自己的 事务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。 在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。 
  以一个全局事务为例, AP 首先通知交易中间件开始一个全局事务,交易中间件通过 XA 接口函数通知数据库开始事务,然后AP 可以对数据库管理的资源进行操作,数据库系统记录事务对本地资源的所有操作。操作完成后交易中间件通过 XA 接口函数通知数据库操作完成。交易中间件负责记录 AP 操作过哪些数据库(事务分支)。 AP 根据情况通知交易中间件提交该全局事务,交易中间件会通过 XA 接口函数要求各个数据库做预提交,所有数据库返回成功后要求各个数据库做正式提交,此时一笔全局事务结束。 
   XA 规范对应用来说,最大好处在于事务的完整性由交易中间件和数据库通过 XA 接口控制, AP 只需要关注与数据库的应用逻辑的处理,而无需过多关心事务的完整性,应用设计开发会简化很多。   具体来说,如果没有交易中间件,应用系统需要在程序内部直接通知数据库开始、结束和提交事务,当出现异常情况时必须由专门的程序对数据库进行反向操作才能完成回滚。如果是有很多事务分支的全局事务,回滚时情况将变得异常复杂。而使用 XA 接口,则全局事务的提交是由交易中间件控制,应用程序只需通知交易中间件提交或回滚事务,就可以控制整个事务(可能涉及多个异地的数据库)的全部提交或回滚,应用程序完全不用考虑冲正逻辑。 
   在一个涉及多个数据库的全局事务中,为保证全局事务的完整性,由交易中间件控制数据库做两阶段提交是必要的。但典型的两阶段提交,对数据库来说事务从开 始到结束(提交或回滚)时间相对较长,在事务处理期间数据库使用的资源(如逻辑日志、各种锁),直到事务结束时才会释放。因此,使用典型的两阶段提交相对 来说会占用更多的资源,在网络条件不是很好,如低速网、网络颠簸频繁,情况会更为严重。 
  当一个全局事务只涉及一个数据库时,有一种优化方式,即一阶段提交。当 AP 通知交易中间件提交事务时,交易中间件直接要求数据库提交事务,省去两阶段提交中的第一阶段,可以缩短处理一个事务的时间,以提高事务处理的效率。作为两阶段提交的一种特例,与两阶段一样,一阶段提交也是标准的。

 

实现例子

http://eric-hwp.iteye.com/blog/2205763

 

用框架的话只要配置好对个数据源,和工厂,公用一个JtaTransactionManager事物管理器,一个事物中有多个不同数据库操作不同数据源的时候会自动启用两阶段提交

 

http://zibo.group.iteye.com/group/topic/6894

分享到:
评论

相关推荐

    xa分布式事务处理

    在实际应用中,XA分布式事务处理常用于银行、电子商务和大数据处理等场景,确保在分布式环境中的数据一致性。然而,由于2PC的限制,现代分布式系统中也发展出了其他替代方案,如三阶段提交、Paxos协议和Saga模式,以...

    mysql分布式事务实现 MySQL XA pdf

    MySQL的XA实现允许应用程序通过两阶段提交(2PC)协议来确保分布式事务的一致性。 #### 七、两阶段提交(2PC) 两阶段提交是实现分布式事务的核心机制。其主要步骤如下: 1. **准备阶段(Prepare Phase)**:事务管理...

    大规模SOA系统中的分布式事务处理

    1. **两阶段提交(2PC)**:这是分布式事务的经典协议,包括准备和提交两个阶段。在准备阶段,事务协调者询问所有参与者是否准备好提交事务,如果所有参与者都同意,则进入提交阶段,否则事务被回滚。然而,2PC存在...

    大规模SOA服务分布式事务处理-程立.rar

    本文将深入探讨这一主题,基于程立的资料,主要关注分布式事务处理模型、XA规范以及两阶段提交和三阶段提交协议。 首先,我们需要理解什么是分布式事务。在传统的单体应用中,事务管理相对简单,但在SOA架构下,...

    Mysql事务控制(XA分布式事务)和锁定语句

    分布式事务的处理分为两个主要阶段: 1. **预提交阶段(Prepare Phase)**:在这一阶段,所有参与的资源管理器(RMs)会被事务管理器(TM)通知准备提交事务。RMs将记录必要的事务信息,以备后续的提交或回滚操作。...

    java分布式事务demo

    3. **两阶段提交(2PC)**:这是一种经典的分布式事务解决方案,包括准备阶段和提交阶段。所有参与者首先在准备阶段进行预提交,然后在提交阶段根据所有参与者的结果决定是否正式提交。然而,2PC存在单点故障、阻塞...

    DTP分布式事务处理规范XA.pdf

    此外,XA还引入了两阶段提交(2PC,Two-Phase Commit)协议,这是一种保证分布式事务一致性的经典算法。在第一阶段,事务管理器询问所有资源管理器是否准备好提交事务;在第二阶段,根据第一阶段的反馈,事务管理器...

    深入理解分布式事务

    常见的分布式事务解决方案主要包括基于XA协议的两阶段提交(2PC)和消息事务+最终一致性两种方式。 ##### 1. 基于XA协议的两阶段提交 两阶段提交是一种经典且成熟的分布式事务处理方案。它分为准备阶段和提交阶段...

    WebSphere MQ与Oracle 数据库的XA事务(两阶段提交)实现

    总的来说,理解并掌握WebSphere MQ的XA事务处理和两阶段提交机制对于构建高可用、强一致性的分布式系统至关重要。这种技术不仅适用于WMQ与Oracle数据库的组合,还可以应用于其他支持XA的资源管理器,实现更复杂的...

    基于MySQL和PHP的分布式事务处理.pdf

    通过以上的知识点,我们可以看出基于MySQL和PHP的分布式事务处理涉及到的技术和概念包括分布式事务处理模型、两阶段提交协议、XA接口规范、事务管理器、资源管理器以及实际应用场景分析。这些内容对于理解和实现可靠...

    [[分布式事务]]支付宝分布式事务设计草案.doc

    总的来说,支付宝的分布式事务设计旨在确保在多服务协作中的数据一致性,通过两阶段提交协议和最末参与者优化策略来协调服务间的操作,同时借鉴X/Open模型的标准接口,实现高效且可靠的事务管理。在遇到标准框架无法...

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

    两阶段提交(Two-Phase Commit, 2PC)是一种经典的分布式事务提交协议,分为准备阶段和提交阶段。在准备阶段,事务协调者(事务管理器)向所有参与者(资源管理器)发送Prepare消息,参与者执行事务但不提交,处于...

    分布式事务源代码

    1. **两阶段提交(2PC, Two-Phase Commit)**:这是最基础的分布式事务协议,包括准备阶段和提交阶段。在准备阶段,事务协调者询问所有参与者是否可以提交,参与者根据自身情况返回结果;在提交阶段,协调者根据准备...

    MySQL 外部XA及其在分布式事务中的应用分析

    在MySQL数据库中,XA事务通过两阶段提交协议(2PC)来协调分布式事务。该协议要求事务资源管理器(通常指数据库实例)在进行全局提交前,先达到一种“准备提交”的状态,并在所有参与方同意后,才能完成事务提交。...

    掌握分布式事务的艺术:深入MySQL XA事务处理

    具体来说,XA 协议通过两阶段提交(Two-Phase Commit, 2PC)实现这一点,其中包含准备(Prepare)和提交(Commit)阶段。 #### 2. MySQL XA 事务的特点 ##### 2.1 跨数据库实例支持 MySQL 的 XA 事务支持在不同的 ...

    分布式事务与Seata.pptx

    分布式事务的解决方案包括Seata、TCC、SAGA、X/Open XA等。 分布式事务的产生是由于业务的不断扩大,用户数的增加,导致单个库或表无法存储所有数据,需要将数据分布在多个库或表中,从而引发跨数据库的事务操作...

Global site tag (gtag.js) - Google Analytics