所谓两阶段提交, 即Two Phase Commit (2PC), 是分布式事务采用的一种处理方式.
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规范的基础是两阶段提交协议。
在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。
当某一数据库收到预提交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数据库将不能再在该事务分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于上锁状态)。
如果由于某种原因数据库无法提交属于自己的事务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。
在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。
分享到:
相关推荐
两阶段提交(Two-Phase Commit, 2PC)是一种经典的分布式事务提交协议,分为准备阶段和提交阶段。在准备阶段,事务协调者(事务管理器)向所有参与者(资源管理器)发送Prepare消息,参与者执行事务但不提交,处于...
【数据库一阶段提交和两阶段提交的区别】 一阶段提交(One-Phase Commit)和两阶段提交(Two-Phase Commit)是分布式事务中常见的两种提交协议,它们主要用于保证跨多个数据库节点的事务一致性。 1. **一阶段提交*...
XA事务是一种两阶段提交(Two-Phase Commit, 2PC)协议,广泛应用于多资源协调的分布式系统中。 首先,让我们了解一下MQ独立事务。在WebSphere MQ中,每个消息发送或接收操作都可以作为一个事务进行。这意味着如果...
本文将深入探讨在EJB3中实现跨Oracle和MySQL数据库的两阶段提交(Two-Phase Commit, 2PC)机制的具体实例。两阶段提交是一种分布式事务管理协议,用于确保分布式系统中多个资源管理器(例如不同的数据库)能够协调...
3. **两阶段提交(2PC)**:XA 规范通常与两阶段提交协议相关联。在第一阶段,事务管理器询问所有参与的资源管理器是否准备提交事务。在第二阶段,如果所有参与者都同意,事务将被提交;如果有任何一方拒绝,事务将...
在分布式系统中,数据一致性是至关重要的,而XA(eXtended Architecture)协议就是为了解决这个问题而设计的一种两阶段提交(2PC, Two-Phase Commit)协议。本项目"XA 多数据源分布式事物实现 java"提供了一个基于...
4. **两阶段提交协议(2PC)**:这是XA接口规范的基础,用于协调全局事务的提交或回滚。第一阶段,TM询问所有RM是否准备提交事务;第二阶段,如果所有RM都准备好了,TM指示所有RM提交,否则回滚所有操作。2PC保证了...
2. **提交或回滚阶段(Commit or Rollback Phase)**:基于预提交阶段的结果,TM决定是向所有RMs发送提交指令还是回滚指令。如果所有RMs都能成功预提交,则整个分布式事务将被提交;若有任一RM无法预提交,则整个...
TDDL加入XA两阶段事务提交,本人自己跟代码画的这些图,从原公司离职没有保存代码,希望这个图可以给研究TDDL的朋友一些启发
MySQL的XA实现允许应用程序通过两阶段提交(2PC)协议来确保分布式事务的一致性。 #### 七、两阶段提交(2PC) 两阶段提交是实现分布式事务的核心机制。其主要步骤如下: 1. **准备阶段(Prepare Phase)**:事务管理...
在MySQL数据库中,XA事务通过两阶段提交协议(2PC)来协调分布式事务。该协议要求事务资源管理器(通常指数据库实例)在进行全局提交前,先达到一种“准备提交”的状态,并在所有参与方同意后,才能完成事务提交。...
全局事务的管理通常涉及两阶段提交协议(Two-Phase Commit Protocol),以确保所有参与者达成一致。 ##### 3.5 事务分支(Transaction Branches) 事务分支指的是全局事务中的局部事务。每个资源管理器上的操作被...
在传统的两阶段提交(2PC)中,协调者会先询问所有参与者是否准备提交,然后根据所有参与者的反馈决定是否执行真正的提交操作。这种模式在网络延迟和故障恢复方面存在很多问题。 Seata的AT模式是一种全自动的分布式...
交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者...
接下来,我们将重点讨论两种常用的分布式事务协议——两阶段提交(2PC)和三阶段提交(3PC)。 **2PC**(Two-Phase Commit Protocol)是一种经典的分布式事务协议,主要用于数据库层面的分布式事务场景。它包括以下...
此外,XA还引入了两阶段提交(2PC,Two-Phase Commit)协议,这是一种保证分布式事务一致性的经典算法。在第一阶段,事务管理器询问所有资源管理器是否准备好提交事务;在第二阶段,根据第一阶段的反馈,事务管理器...
具体来说,XA 协议通过两阶段提交(Two-Phase Commit, 2PC)实现这一点,其中包含准备(Prepare)和提交(Commit)阶段。 #### 2. MySQL XA 事务的特点 ##### 2.1 跨数据库实例支持 MySQL 的 XA 事务支持在不同的 ...
文档中还涉及到commitment control对于批量应用(batch applications)的工作方式以及两阶段提交(two-phase commit)控制。 在两阶段提交的情况下,提交处理中的角色、事务的状态、提交定义以及提交定义对于只读...
常见的分布式事务解决方案包括基于X/Open XA协议的二阶段提交(2PC)、三阶段提交(3PC)以及补偿性事务控制(TCC)。 1. XA协议:它是DTP(分布式事务处理)模型的一部分,定义了事务管理器(TM)与资源管理器(RM...