第一阶段开始时,向此事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来回滚事务。如果任意一个资源决定回滚事务,那么整个事务将被取消。否则,事务会被提交。
第二阶段只是在第一阶段没有回滚时才会发生。在这个阶段,所有的能被定位和单独控制的资源都将真正的更新。
例如,如果从 JMS 队列中删除一个消息,并且随后更新数据库中基于这条消息的纪录,这时,要保证这两个操作的原子性。不应该出现一条消息已经从队列中被删除,而系统没有更新与此消息相关的数据库中的纪录的情况
在谈到 XA 规范之前,必须首先了解分布式事务处理( Distributed Transaction Processing , DTP )的概念。 Transaction ,即事务,又称之为交易,指一个程序或程序段,在一个或多个资源如 数据库 或文件上为完成某些功能的执行过程的集合。 LU 人的博客 )vqfhOBA
分布式事务处理是指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。
X/Open 组织(即现在的 Open Group )定义了分布式事务处理模型。 X/Open DTP 模型( 1994 )包括应用程序( AP )、事务管理器( TM )、资源管理器( RM )、通信资源管理器( CRM )四部分。一般,常见的事务管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息中间件。
通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。
所 谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务,例如,一个事务中可能更新几个不同的数据库。对 数据库的操作发生在系统的各处但必须全部被提交或回滚。此时一个数据库对自己内部所做操作的提交不仅依赖本身操作是否成功,还要依赖与全局事务相关的其它 数据库的操作是否成功,如果任一数据库的任一操作失败,则参与此事务的所有数据库所做的所有操作都必须回滚。 LU 人的博客 8v:d?(~;~$A-Q9V D
一般情况下,某一数据库无法知道其它数据库在做什么,因此,在一个 DTP 环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。
XA 与两阶段提交协议
通常情况下,交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。
在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。当某一数据库收到预 提交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数据库将不能再在该事 务分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于上锁状态)。如果由于某种原因数据库无法提交属于自己的 事务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。 在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。
以一个全局事务为例, AP 首先通知交易中间件开始一个全局事务,交易中间件通过 XA 接口函数通知数据库开始事务,然后 AP 可以对数据库管理的资源进行操作,数据库系统记录事务对本地资源的所有操作。操作完成后交易中间件通过 XA 接口函数通知数据库操作完成。交易中间件负责记录 AP 操作过哪些数据库(事务分支)。 AP 根据情况通知交易中间件提交该全局事务,交易中间件会通过 XA 接口函数要求各个数据库做预提交,所有数据库返回成功后要求各个数据库做正式提交,此时一笔全局事务结束。
XA 规范对应用来说,最大好处在于事务的完整性由交易中间件和数据库通过 XA 接口控制, AP 只需要关注与数据库的应用逻辑的处理,而无需过多关心事务的完整性,应用设计开发会简化很多。
具体来说,如果没有交易中间件,应用系统需要在程序内部直接通知数据库开始、结束和提交事务,当出现异常情况时必须由专门的程序对数据库进行反向操作才能完成回滚。如果是有很多事务分支的全局事务,回滚时情况将变得异常复杂。而使用 XA 接口,则全局事务的提交是由交易中间件控制,应用程序只需通知交易中间件提交或回滚事务,就可以控制整个事务(可能涉及多个异地的数据库)的全部提交或回滚,应用程序完全不用考虑冲正逻辑。
在一个涉及多个数据库的全局事务中,为保证全局事务的完整性,由交易中间件控制数据库做两阶段提交是必要的。但典型的两阶段提交,对数据库来说事务从开 始到结束(提交或回滚)时间相对较长,在事务处理期间数据库使用的资源(如逻辑日志、各种锁),直到事务结束时才会释放。因此,使用典型的两阶段提交相对 来说会占用更多的资源,在网络条件不是很好,如低速网、网络颠簸频繁,情况会更为严重。
当一个全局事务只涉及一个数据库时,有一种优化方式,即一阶段提交。当 AP 通知交易中间件提交事务时,交易中间件直接要求数据库提交事务,省去两阶段提交中的第一阶段,可以缩短处理一个事务的时间,以提高事务处理的效率。作为两阶段提交的一种特例,与两阶段一样,一阶段提交也是标准的。
分享到:
相关推荐
分布式事务处理的XA规范是一份详细的技术标准文档,最初由X/Open组织在1991年发布,用于描述和规范分布式事务处理(DTP)的模型、接口和协议。XA规范定义了实现分布事务处理的标准方法,它对多个参与方(如数据库...
X/Open DTP(Distributed Transaction Processing)模型是一种用于描述分布式事务处理环境中的组件及其交互的标准模型。该模型主要包括以下功能组件: - **事务管理器(Transaction Manager)**:负责全局事务的...
分布式事务处理(Distributed Transaction Processing, DTP)是一种确保在多个物理分布的数据库之间保持数据一致性的方法。这种一致性通常涉及到多个数据库节点同时成功或失败地完成一系列操作。例如,在银行转账场景...
X/Open DTP(Distributed Transaction Processing)模型是分布式事务处理的一个国际标准,它定义了分布式事务处理的体系结构和接口规范。在DTP模型中,事务处理由多个组件协同工作,包括应用程序(Application)、...
X/Open DTP (Distributed Transaction Processing)模型 X/Open DTP是最早的分布式事务处理模型之一,也是后续其他标准的基础。该模型定义了应用程序如何使用事务管理器来协调跨多个资源管理器的分布式事务。具体...
分布式事务处理(Distributed Transaction Processing)在现代企业级应用中起着关键作用,特别是在银行、金融和其他需要处理大量并发交易的领域。分布式事务是指跨越多个独立系统或数据库的单一操作,这些系统可能...
支付宝的分布式事务解决方案遵循了DTP(Distributed Transaction Processing)模型,该模型定义了一个全局事务由一个全局事务管理器(TM)和多个资源管理器(RM)组成。全局事务管理器负责管理事务的全局状态,并与...
DTP模型(Distributed Transaction Processing Model)是标准的分布式事务处理模型,它包括三个关键组成部分:AP(Application Program)、RM(ResourceManager)和TM(Transaction Manager)。 - **AP**...
- **X/Open DTP 模型**:遵循 X/Open DTP(Distributed Transaction Processing)模型,该模型定义了事务管理器、资源管理器和应用程序之间的交互。 - **JTA 和 JTS**:Java Transaction API (JTA) 和 Java ...
- **全局事务(DTP模型)**:在分布式环境中,事务跨越多个资源管理器,需要一个全局事务管理器来协调这些资源管理器之间的操作。全局事务管理器通过事务管理协议(如XA协议)与资源管理器进行交互,确保整个事务的...
分布式事务处理是解决多数据库系统中一致性问题的关键技术,而X/Open Distributed Transaction Processing (DTP)模型和XA规范是这一领域的重要理论基础和实现标准。X/Open组织,现称为Open Group,于1994年提出了DTP...
在单体架构下,通常采用传统的分布式事务处理模型,如DTP(Distributed Transaction Processing)模型来处理分布式事务。然而,在微服务架构下,由于服务之间的分布式特性更为明显,因此传统模型不再适用。微服务...
全局事务的实现基于 X/Open Distributed Transaction Processing Reference Model(DTP 模型),由应用系统(AP)、事务管理器(TM)和资源管理器(RM)三部分组成。TM 负责协调分布式事务,AP 使用 TM 提供的 TX ...
- **Distributed Transaction Processing**:在多个节点之间协调执行的事务处理过程。 - **Application Program (AP)**:向事务管理器提交事务请求的应用程序。 - **ResourceManager (RM)**:控制对资源的访问,如...
在写之前先来了解一下,分布式事务的一些解决方案。 现目前处理分布式事务的方案有很多,比如 基于 XA 协议的方案 基于业务逻辑的 TCC 协议方案 基于 SAGA 协议的方案 而实现了对应的协议的有 在 Java 中基于 XA ...
文档中提到的DTP模型(Distributed Transaction Processing Model)是其中一种经典的全局事务处理模型。全局事务由事务管理器全局管理,管理事务状态与参与的资源,并协同资源的一致提交或回滚。 两阶段提交(Two-...
4. **XA模式**:遵循X/Open Distributed Transaction Processing (DTP)模型,通过XAResource接口进行资源管理,适用于传统数据库支持的分布式事务处理。 Seata-Server 1.0.0 包含的主要组件有: - **TC...
- **分布式事务处理(Distributed Transaction Processing, DTP)**:在多个数据库间同时执行事务处理的过程。 - **资源管理器(Resource Manager, RM)**:负责管理资源的系统组件,例如数据库管理系统(DBMS)。 -...