`
lemhion
  • 浏览: 8729 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
社区版块
存档分类
最新评论

XA分布式事务处理

    博客分类:
  • db
阅读更多
转载自:http://www.blogjava.net/rednight/archive/2007/03/06/102070.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 接口,则全局事务的提交是由交易中间件控制,应用程序只需通知交易中间件提交或回滚事务,就可以控制整个事务(可能涉及多个异地的数据库)的全部提交或回滚,应用程序完全不用考虑冲正逻辑。

  在一个涉及多个数据库的全局事务中,为保证全局事务的完整性,由交易中间件控制数据库做两阶段提交是必要的。但典型的两阶段提交,对数据库来说事务从开始到结束(提交或回滚)时间相对较长,在事务处理期间数据库使用的资源(如逻辑日志、各种锁),直到事务结束时才会释放。因此,使用典型的两阶段提交相对来说会占用更多的资源,在网络条件不是很好,如低速网、网络颠簸频繁,情况会更为严重。

  当一个全局事务只涉及一个数据库时,有一种优化方式,即一阶段提交。当 AP 通知交易中间件提交事务时,交易中间件直接要求数据库提交事务,省去两阶段提交中的第一阶段,可以缩短处理一个事务的时间,以提高事务处理的效率。作为两阶段提交的一种特例,与两阶段一样,一阶段提交也是标准的。
分享到:
评论

相关推荐

    xa分布式事务处理

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

    mysql分布式事务实现 MySQL XA pdf

    ### MySQL分布式事务处理与XA协议详解 #### 一、引言 在当今互联网技术高度发展的背景下,分布式系统已经成为处理大规模数据的关键技术之一。而在分布式环境中,确保数据的一致性成为了非常重要的挑战。其中,...

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

    分布式事务处理是现代大型服务导向架构(SOA)系统中不可或缺的一部分,特别是在诸如支付宝这样的高并发、高可用性环境中。本讲义将深入探讨在Java环境下实现大规模SOA系统中的分布式事务处理的关键技术和挑战。 ...

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

    在分布式系统中,MySQL支持通过X/Open XA协议实现的分布式事务,这允许跨越多个资源管理器(如不同的数据库实例)的事务一致性。分布式事务的处理分为两个主要阶段: 1. **预提交阶段(Prepare Phase)**:在这一...

    java分布式事务demo

    分布式事务处理通常涉及ACID(原子性、一致性、隔离性和持久性)原则,这些原则是传统数据库事务管理的基础。在Java中,实现分布式事务的方法有很多,例如使用JTA(Java Transaction API)或者Spring框架的声明式...

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

    XA(eXtended Architecture)是开放集团(Open Group)提出的分布式事务处理规范,被广泛应用于数据库厂商。XA规范定义了分布式事务处理的模型和接口,确保了事务的一致性和可靠性。MySQL从5.x版本开始支持XA规范,...

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

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

    深入理解分布式事务

    两阶段提交是一种经典且成熟的分布式事务处理方案。它分为准备阶段和提交阶段,通过事务管理器协调多个本地资源管理器(如数据库)共同完成事务。这种方式简单明了,但在高并发场景下性能不佳,尤其是在主备切换时...

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

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

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

    针对数据库分布在几个远程服务器上的情况,可以采用基于XA接口的MySQL来支持分布式事务处理,这样可以避免由于网络或通信故障导致的数据错误。 PHP,作为一种服务器端的、执行效率高且易于开发的HTML内嵌式语言,...

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

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

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

    本文将深入讨论与理解分布式事务处理原理,MySQL XA事务的具体分类(包括内部XA与外部XA),以及在分布式环境下实现一致性事务处理所面临的挑战和解决策略。 在MySQL数据库中,XA事务通过两阶段提交协议(2PC)来...

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

    X/Open模型是分布式事务处理的标准化框架,定义了TX和XA接口,分别用于应用程序与事务管理器交互,以及事务管理器控制资源管理器(如数据库)的事务参与。然而,X/Open模型在面对复杂的SOA环境和异常恢复时可能存在...

    ejb3.0 分布式事务

    在实际开发中,理解和熟练掌握ejb3.0的分布式事务处理机制,对于构建健壮、可扩展的企业级应用至关重要。开发者需要考虑事务的一致性、隔离性、持久性和原子性,以及可能的死锁和性能问题。同时,通过合理配置`...

    非Maven基于SSM+Atomikos的分布式事务处理案例源码

    4. **Atomikos**:Atomikos是一个符合JTA(Java Transaction API)标准的事务管理器,支持XA分布式事务协议。在分布式环境中,它能确保跨多个数据源的操作要么全部成功,要么全部回滚,实现ACID(原子性、一致性、...

    分布式事务源代码

    4. **分布式事务API与协议**:如Java的JTA(Java Transaction API)和X/Open XA,它们提供了标准的接口和规范来处理分布式事务。 5. **数据库级别的分布式事务**:例如SQL Server的分布式事务支持,利用MS DTC...

Global site tag (gtag.js) - Google Analytics