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

XA事务规范

阅读更多
转自:http://hi.baidu.com/javaopensource/blog/item/0a2b764ec501b10cb3de05ba.html
在谈到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接口,则全局事务的提交是由交易中间件控制,应用程序只需通知交易中间件提交或回滚事务,就可以控制整个事务(可能涉及多个异地的数据库)的全部提交或回滚,应用程序完全不用考虑冲正逻辑。

分享到:
评论

相关推荐

    xa分布式事务处理

    分布式事务处理是解决多数据库系统中一致性问题的关键技术,而X/Open Distributed Transaction Processing (DTP)模型和XA规范是这一领域的重要理论基础和实现标准。X/Open组织,现称为Open Group,于1994年提出了DTP...

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

    XA 事务是基于 X/Open XA 规范的一种分布式事务处理机制。这种机制允许应用程序在一个全局事务中协调多个资源管理器(如数据库、消息队列等),从而确保事务的一致性和完整性。具体来说,XA 协议通过两阶段提交(Two...

    使用Atomikos处理ActiveMQ在Spring环境的XA事务

    标题“使用Atomikos处理ActiveMQ在Spring环境的XA事务”揭示了本文将涉及的关键技术领域,即在Spring框架中如何利用Atomikos这个开源事务管理器来支持分布式事务,特别是针对ActiveMQ消息队列的XA事务处理。...

    分布式事务常用的解决方案,XA,Saga,TCC,MQ补偿.docx

    JDBC 提供了 XAConnection 和 XAResource 接口来实现XA事务。开发者可以使用这些接口来实现分布式事务的解决方案。 分布式事务解决方案有多种,选择哪种解决方案取决于具体的业务需求和系统架构。XA、Saga、TCC和MQ...

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

    《X/Open分布式事务处理规范XA》是X/Open(现为The Open Group)发布的一个重要的技术标准,主要关注在分布式计算环境中如何协调多个资源管理器进行一致性的事务处理。该规范定义了一个接口,允许应用程序和资源管理...

    Distributed Transaction Processing The XA Specification.pdf

    分布式事务处理的XA规范是一份详细的技术标准文档,最初由X/Open组织在1991年发布,用于描述和规范分布式事务处理(DTP)的模型、接口和协议。XA规范定义了实现分布事务处理的标准方法,它对多个参与方(如数据库...

    XA与非XA驱动差异

    它实现了X/Open XA规范,能够处理跨多个资源管理器的事务。当应用程序需要同时操作多个数据库或其他资源时(例如消息队列、文件系统等),并且要求这些操作作为一个整体成功或失败时,就需要使用XA驱动来确保事务的...

    Distributed Transaction Processing The XA Specification

    分布式事务处理:XA 规范 分布式事务处理是现代企业级应用中不可或缺的一部分,它允许在多台计算机之间协调和管理数据操作。《Distributed Transaction Processing: The XA Specification》是一份重要的技术文档,...

    lixa:LIXA,LIbre XA,是一个免费的开源XA事务管理器-开源

    LIXA甚至实现了XTA:XA事务API,这是一种创新的API,它实现了在不同应用程序之间传递XA事务上下文。 LIXA是事务管理器,但不是事务监视器:这是项目的独特功能。 LIXA技术使每个应用程序容器(例如Web服务器或外壳...

    DRDS跨库事务文档

    XA事务是分布式事务的一种实现方式,它遵循X/Open组织定义的XA接口规范。XA事务通过一个全局事务管理器来协调各个参与的数据库资源,确保所有资源要么全部提交成功,要么全部回滚,从而保证数据的一致性。 在XA事务...

    Distributed Transaction Processing-The XA+ Specification Version 2

    ### 分布式事务处理:XA+ 规范版本2 #### 一、引言 《分布式事务处理:XA+ 规范版本2》是X/Open组织发布的一份关于分布式事务处理的重要规范文档,该文档详细介绍了分布式事务处理模型以及相关的接口定义。X/Open...

    XA 多数据源分布式事物实现 java

    XA是由开放组(The Open Group)制定的一套分布式事务处理标准,它定义了一种分布式事务的接口规范,使得不同的资源管理器(如数据库、消息队列等)能够协同工作,确保在分布式环境下的数据一致性。通过XA协议,应用...

    分布式事务

    尽管分布式事务的概念和技术已经存在多年(X/Open XA规范早在1991年就已发布),但在设计时考虑其对架构的影响仍然是一个不容忽视的问题。 #### 二、Oracle 控制的分布式事务 Oracle 提供了两种主要的方式来管理...

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

    JTA在Java平台上提供了对XA事务的支持,其规范定义了接口,但具体的实现由供应商提供,如J2EE容器的JTA实现或独立的JTA实现(如JOTM, Atomikos)。 【二阶段提交缺点】 1. **同步阻塞问题**:在2PC执行期间,所有...

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

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

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

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

    Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

    Atomikos通过实现JTA规范,允许应用程序在不同的数据源之间进行跨系统事务处理。 JPA是Java平台上的标准ORM(Object-Relational Mapping)框架,用于管理和持久化Java对象到关系数据库。它提供了一种抽象层,使得...

    最新的JTA规范.pdf

    - **XAResource**:由资源管理器实现,提供与事务管理器交互的接口,用于支持两阶段提交等分布式事务协议。 #### 实现考量与应用场景 JTA规范不仅提供了接口定义,还详细阐述了在组件化企业应用服务器环境中实现...

Global site tag (gtag.js) - Google Analytics