这一几天一直在回顾事务相关的知识,也准备把以前了解皮毛的知识进行一些深入总结,虽然这一些知识并没有用到,但是了解其实现原理还是很有必要的,因为知道了原理,你也能把它实现出来。
在上一节事务的编程模型里面,主要说明了三种编程模型,一般情况下,我们都接触的是单一资源的事务,也就是单独对一个数据库进行操作。如果需要跨多个资源保证事务一致性
举个例子:在ATM机取钱的时候,需要对用户的账户进行扣款处理,然后发送一条消息给消息服务器(假设消息服务器是用JMS实现的),由消息服务器异步通过短信通知用户。如果用户取款失败,那么消息服务器不应该发送短信给用户。如何保证 用户帐务扣款 和 消息服务器的消息保持一致性,也就是说 取款成功,消息服务器就持久化消息,然后发送短信给用户,取款失败,消息服务器就回滚消息,啥都不做。
在上面这种情况下,就需要使用分布式事务,也就是跨越多个资源的保证数据一致性。
X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由这个厂商进行具体的实现。这个思想在java 平台里面到处都是。
X/Open DTP 定义了三个组件: AP,TM,RM
AP(Application Program):也就是应用程序,可以理解为使用DTP的程序
RM(Resource Manager):资源管理器,这里可以理解为一个DBMS系统,或者消息服务器管理系统,应用程序通过资源管理器对资源进行控制。资源必须实现XA定义的接口
TM(Transaction Manager):事务管理器,负责协调和管理事务,提供给AP应用程序编程接口以及管理资源管理器
其中,AP 可以和TM 以及 RM 通信,TM 和 RM 互相之间可以通信,DTP模型里面定义了XA接口,TM 和 RM 通过XA接口进行双向通信,例如:TM通知RM提交事务或者回滚事务,RM把提交结果通知给TM。AP和RM之间则通过RM提供的Native API 进行资源控制,这个没有进行约API和规范,各个厂商自己实现自己的资源控制,比如Oracle自己的数据库驱动程序。
下面一幅图说明了三者的关系:
其中在DTP定了以下几个概念:
事务:一个事务是一个完整的工作单元,由多个独立的计算任务组成,这多个任务在逻辑上是原子的。
全局事务:对于一次性操作多个资源管理器的事务,就是全局事务
分支事务:在全局事务中,某一个资源管理器有自己独立的任务,这些任务的集合作为这个资源管理器的分支任务
控制线程:用来表示一个工作线程,主要是关联AP,TM,RM三者的一个线程,也就是事务上下文环境。简单的说,就是需要标识一个全局事务以及分支事务的关系。
两阶段提交协议:如果一个事务管理器管理着多个资源管理器,如果控制全局事务和分支事务,在DTP里面说明两阶段提交的协议
第一阶段:准备阶段
事务管理器通知资源管理器准备分支事务,资源管理器告之事务管理器准备结果
第二阶段:提交阶段
事务管理器通知资源管理器提交分支事务,资源管理器告之事务管理器结果
下面一幅图演示了正常情况下的两阶段提交,
如果第一阶段某一个资源预提交失败,第二阶段就回滚第一阶段已经预提交成功的资源
以上是比较正常的情况,但是由于RM有权利自己根据情况提交或者回滚自己的分支事务(官方说法是:Heuristic Decision)那三么就可能出现以下种情况:
1 在TM通知RM提交事务之前,RM分支事务已经提交
2 在TM通知RM提交事务之前,RM分支事务全部回滚
3 在TM通知RM提交事务之前,RM分支事务部分回滚
对于Heuristic Decision标记的分支事务,在没有TM通知RM forget 它之前,RM都必须保存分支事务的信息,等到TM从失败中恢复事务之后,通知RM forget 分支事务,这个时候RM才真正的完成事务。
对于前面两种情况来说,TM会比较好处理,做事务恢复的时候,要么标记全局事务成功,要么标记全局事务回滚,通知RM可以完成分支事务了。对于第三种情况,可能就需要进行决策了,这个具体怎么处理,貌似DTP并没有说明细节,可以交给应用自己去判断。
DTP编程模型
虽然DTP内部的实现比较复杂,但是对于DTP编程模型就比较简单了
1 AP通过TM获取事务
2 AP申明需要哪些RM,TM注册RM
3 AP使用RM完成分支事务
4 AP通过TM提交事务
5 TM通知RM提交事务
而DTP的服务的实现就需要考虑以下几个问题:
- 如何获取TM?
- 如何启动和结束一个事务
- 如何标识一个事务
- 如何保存和传递事务上下文
- 应用如何通过资源管理器操作共享资源
- 资源管理器如何实现准备阶段以及与提交阶段的逻辑
- 如何实现两阶段提交协议
- 如何实现在异常情况下进行事务恢复
其实如果把这几个问题了解清楚了,就可以自己实现一个两阶段提交的分布式事务模型了。
转自:http://www.cnblogs.com/aigongsi/archive/2012/10/11/2718313.html
相关推荐
X/OPEN DTP分布式事务模型是指一种分布式事务处理模型,由X/Open Company Ltd.提出,旨在提供 يك种通用的分布式事务处理-reference model,指导分布式事务处理系统的设计、实现和测试。 分布式事务处理的主要挑战...
为了实现分布式事务,X/Open组织提出了一套分布式事务处理模型(X/Open DTP Model),该模型定义了三个关键组件: 1. **应用程序程序(AP)**: 定义了事务边界,并指定了构成事务的操作。 2. **资源管理器(RM)**: ...
X/Open DTP模型提供了一种结构化的框架,用于理解和实现分布式事务处理。该模型包括以下几个关键组件: 1. 应用程序(Application Program):发起和控制事务的逻辑单元,它定义了事务的开始、提交或回滚。 2. 资源...
X/Open DTP是最早的分布式事务处理模型之一,也是后续其他标准的基础。该模型定义了应用程序如何使用事务管理器来协调跨多个资源管理器的分布式事务。具体组成部分包括: - **应用程序(Application)**:发起事务...
分布式事务处理是解决多数据库系统中一致性问题的关键技术,而X/Open Distributed Transaction Processing (DTP)模型和XA规范是这一领域的重要理论基础和实现标准。X/Open组织,现称为Open Group,于1994年提出了DTP...
分布式事务处理模型X/Open DTP定义了一套标准,包括了AP(Application)和RM(Resource Manager),以及TM(Transaction Manager)。AP是应用层,RM是数据库或其他资源管理者,TM负责协调整个事务的执行。其中,XA...
X/Open DTP(Distributed Transaction Processing)模型是分布式事务处理的一个国际标准,它定义了分布式事务处理的体系结构和接口规范。在DTP模型中,事务处理由多个组件协同工作,包括应用程序(Application)、...
- **X/Open DTP 模型**:遵循 X/Open DTP(Distributed Transaction Processing)模型,该模型定义了事务管理器、资源管理器和应用程序之间的交互。 - **JTA 和 JTS**:Java Transaction API (JTA) 和 Java ...
在这些场景中,事务模型如X/Open DTP模型被采用,它包括应用程序、资源管理器、事务管理器和通信资源管理,定义了全局事务树形结构。为了协调这些组件,有如XA规范这样的标准,以及2PC(两阶段提交)和3PC(三阶段...
- XA是由X/Open组织提出的分布式事务的规范,主要用于定义事务管理器(TM)和资源管理器(RM)之间的接口。 - XA接口是双向的系统接口,在事务管理器(TM)以及一个或多个资源管理器(RM)之间形成通信桥梁。 - 由于...
总结来说,支付宝的分布式事务解决方案涉及到的技术和概念主要包括SOA系统中的分布式事务处理、DTP模型、两阶段提交协议、跨域事务管理、JTA/JTS/EJB事务接口以及ACID属性。这些技术共同组成了支付宝强大的分布式...
在分布式事务中,X/Open DTP模型定义了应用程序(AP)、资源管理器(RM)和事务管理器(TM)的角色。RM通常代表数据库,需要实现XA接口,而TM负责协调和管理事务。二阶段提交(2PC)协议是经典的分布式事务提交策略...
常见的分布式事务解决方案包括基于X/Open XA协议的二阶段提交(2PC)、三阶段提交(3PC)以及补偿性事务控制(TCC)。 1. XA协议:它是DTP(分布式事务处理)模型的一部分,定义了事务管理器(TM)与资源管理器(RM...
XA协议是由X/Open组织提出的一种分布式事务的规范,主要用于定义事务管理器(TM)与资源管理器(RM)之间的接口。主流的关系型数据库都实现了XA接口。 **3. 两阶段提交(2PC)** 两阶段提交协议(Two-phase commit ...
例如,采用两阶段提交(2PC)协议或者三阶段提交(3PC)协议来保证分布式事务的原子性。除此之外,还可以通过数据库连接池管理、异步事务处理、事务日志优化等技术手段进一步提升事务管理模型的性能。 综上所述,...