在分布式事务的学习过程当中会遇到许多概念:X/Open XA、两段式提交(2PC)、JTA等,如下就这些概念进行解释,重点在于概念之间的关系,望抛砖引玉,为后来者指路。html
(摘自wiki)XA规范是开放群组关于分布式事务处理 (DTP)的规范。规范描述了全局的事务管理器与局部的资源管理器之间的接口。XA规范的目的是容许的多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可使ACID属性跨越应用程序而保持有效。XA使用两阶段提交来保证全部资源同时提交或回滚任何特定的事务。
要理解XA规范,必须先理解DTP,DTP全称为Distributed Transaction Processing Reference Model,他也是一个规范,他定义了一些模型对象和对象间行为,经过这些对象和对象间行为来指导分布式事务实现。若是你了解领域驱动设计,你会发现DTP就是对分布式事务这个领域进行模型设计。java
DTP协议假设整个分布式事务有三个对象参与完成,他们分别是:算法
了解了DTP的定义,咱们再看XA规范,XA规范描述全局的事务管理器(TM)与局部的资源管理器(RM)之间的接口,这个接口不是编程层面的接口,而是DTO定义模型之间直接交互的系统接口。数据库
咱们依然用领域建模的概念理解这个定义。咱们的世界是动态,咱们要描述一个事物不能只有现实事物对应的静态抽象对象模型,还须要有对象动态交互行为的描述,只有静态的模型和动态的行为一切运做,才能完成咱们的对现实世界的建模过程。XA协议就是这个动态行为的描述。他包含于DTP协议中,专门描述TM和RM之间如何交互以通力协做完成分布式事务。编程
咱们常常听到某某数据库支持XA协议,某某分布式事务中间件支持XA协议,如今应该能理解他们的含义了,由于分布式事务参与方众多,只有各方都按照同一规则交互,才能最终完成分布式事务。因此从某种意义上说,XA协议就像一份分布式事务的操做指南,各方只要按照操做指南规定一步一步的完成操做,就会完成最终目标。服务器
(摘自wiki)二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的全部节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。一般,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每一个节点虽然能够知晓本身的操做时成功或者失败,却没法知道其余节点的操做的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,须要引入一个做为协调者的组件来统一掌控全部节点(称做参与者)的操做结果并最终指示这些节点是否要把操做结果进行真正的提交(好比将更新后的数据写入磁盘等等)。所以,二阶段提交的算法思路能够归纳为: 参与者将操做成败通知协调者,再由协调者根据全部参与者的反馈情报决定各参与者是否要提交操做仍是停止操做。
若是说XA规范是实现分布式事务操做指南的话,那两段式提交就是这本操做指南的核心概念和理论依据。全部实现XA协议的关系数据库和第三方分布式事务中间件都使用2PC算法。架构
(摘自wiki)Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版的应用程序接口,在Java环境中,容许完成跨越多个XA资源的分布式事务。JTA是在Java社区过程下制定的规范,编号JSR 907。JTA提供:oracle
- 划分事务边界
- X/Open XA API容许资源参与到事务中。
定义是否是不知所云,简单说JTA主要就是XA协议的程序级定义。什么是程序级定义?若是咱们把XA协议做为领域模型的话,咱们须要用具体的语言来实现领域模型,JTA就是用Java实现的XA协议,可是他只定义了相应的接口,并无给出具体实现,为了可以完成分布式事务,咱们须要本身按照“两段式提交”算法完成本身的实现,或者借助第三方中间件,例如BTM,atomikos等。app
DTP定义分布式事务过程。
XA定义DTP中TM和RM的交互行为。
XA由2PC算法实现。
JTA主要是XA规范的JAVA接口描述分布式
参考:
https://zh.wikipedia.org/wiki...
http://www.opengroup.org/book...
https://zh.wikipedia.org/wiki...
https://zh.wikipedia.org/wiki...
http://www.oracle.com/technet...
http://download.oracle.com/ot...《Distributed Transaction Processing:The XA Specification》《Java Transaction API》