3

前言

在分布式事务的学习过程中会遇到许多概念:X/Open XA、两段式提交(2PC)、JTA等,以下就这些概念进行解释,重点在于概念之间的关系,望抛砖引玉,为后来者指路。

1. X/Open XA

(摘自wiki)XA规范是开放群组关于分布式事务处理 (DTP)的规范。规范描述了全局的事务管理器与局部的资源管理器之间的接口。XA规范的目的是允许的多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效。XA使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务。

1.1 DTP

要理解XA规范,必须先理解DTPDTP全称为Distributed Transaction Processing Reference Model,他也是一个规范,他定义了一些模型对象和对象间行为,通过这些对象和对象间行为来指导分布式事务实现。如果你了解领域驱动设计,你会发现DTP就是对分布式事务这个领域进行模型设计。

DTP协议假设整个分布式事务有三个对象参与完成,他们分别是:

  • 应用程序(application program)(AP):定义了事务边界并指定构成事务的操作。可以将AP理解为service层接口,三层开发原则告诉我们需要在service层开启事务。
  • 资源管理器(Resource Manager)(RM):顾名思义,资源管理器用来管理我们需要访问的共享资源,我们可以将它理解为关系数据库、文件存储系统、消息队列等。
  • 事务管理器(transaction manager)(TM):事务管理器是一个独立的组件,他为事务分配标识符并监视事务的执行情况,负责事务完成和故障恢复。

1.2 XA

了解了DTP的定义,我们再看XA规范,XA规范描述全局的事务管理器(TM)与局部的资源管理器(RM)之间的接口,这个接口不是编程层面的接口,而是DTO定义模型之间直接交互的系统接口。

我们依然用领域建模的概念理解这个定义。我们的世界是动态,我们要描述一个事物不能只有现实事物对应的静态抽象对象模型,还需要有对象动态交互行为的描述,只有静态的模型和动态的行为一切运作,才能完成我们的对现实世界的建模过程。XA协议就是这个动态行为的描述。他包含于DTP协议中,专门描述TM和RM之间如何交互以通力协作完成分布式事务。

我们经常听到某某数据库支持XA协议,某某分布式事务中间件支持XA协议,现在应该能理解他们的含义了,因为分布式事务参与方众多,只有各方都按照同一规则交互,才能最终完成分布式事务。所以从某种意义上说,XA协议就像一份分布式事务的操作指南,各方只要按照操作指南规定一步一步的完成操作,就会完成最终目标。

2. 两段式提交

(摘自wiki)二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol)。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。

如果说XA规范是实现分布式事务操作指南的话,那两段式提交就是这本操作指南的核心概念和理论依据。所有实现XA协议的关系数据库和第三方分布式事务中间件都使用2PC算法。

3. JTA

(摘自wiki)Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务。JTA是在Java社区过程下制定的规范,编号JSR 907。JTA提供:

  • 划分事务边界
  • X/Open XA API允许资源参与到事务中。

定义是不是不知所云,简单说JTA主要就是XA协议的程序级定义。什么是程序级定义?如果我们把XA协议作为领域模型的话,我们需要用具体的语言来实现领域模型,JTA就是用Java实现的XA协议,但是他只定义了相应的接口,并没有给出具体实现,为了能够完成分布式事务,我们需要自己按照“两段式提交”算法完成自己的实现,或者借助第三方中间件,例如BTM,atomikos等。

总结

DTP定义分布式事务过程。
XA定义DTPTMRM的交互行为。
XA2PC算法实现。
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》


JerryTse
768 声望126 粉丝