在企业内事务在所有的业务交互几乎都是需要的,作为一个业务交易集中者的ESB有时也不得不面对这个问题。ESB是所有企业服务的集中者,它面对的是多种的异构的系统,由此会遇到了非常大的挑战性。大都多的情况下,我们建议如果不是业务上非常的必要,最好不要使用事务,因为在ESB的环境下,事务是一个非常昂贵,他会占用大量的资源。
2 ESB事务的特性 2.1 基本特性事务最基本的特性是以下描述的ACID
Atomicity(原子性),事务中的所有操作,要么全部成功,要么全部失败
Consistency(一致性):在事务开始与结束时,数据库处于一致的状态。
Isolation(隔离性):在事务开始与结束时,事务如同只有这一个操作在被数据库所执行一样。
Durability(持久性):在事务结束时,此操作将不可逆转。
2.2 ESB特有的特性 ESB事务除了事务本身带有的ACID的特点之外,还有一些自身的特性而带来的特点。
1. 分布式:应该是由SOA的架构从产生开始就注定存在的特点,而为此而生的ESB当然也继承了这个特点。在分布式的应用的环境下,事务当然也是分布式的,这也是ESB事务带来的最大的挑战。
2. 无状态:很多的ESB的架构都会使用WebService或者其它一些无状态的协议,这无状态也为我们的分布式带来了一定的麻烦。虽然WebService有一个事务的标准WS-AtomicTransaction。但使用这个准标的实现,一个服务的调用需要十次以上的协同调用,在性能上是一个非常大的消耗,想要使用这个标准也非易事。
3. 存在多种事务环境:ESB是一个集成者,他集成了多个系统,这些系统可能使用不同的事务环境。这个时候我们就需要把一种事务环境的上下文传播到别一种上下文中去。例如IBM的CICS Transaction Server要传播到微软事务处理服务(MTS)。
在企业中,为了完成一个分布式事务,主要有两种方式,一种是两段式事务,一种是使用冲正交易。
3.1 两段式事务
两段式事务,在实际的使用过程中,为了提高事务的性能,出现了两种不同的事实,一种是使用事务的协调架构,另一种是TCC事务架构,
这种事务协调服务,可以在使用者透明的情况来达到一种分布式事务的能力。在J2EE的环境,最典型的就是JTA(Java Transaction API)。一般情况下我们会使用JTS的事实,这个事实基于OMG(Object Management Group)的OTS()实现。在WS协议簇中的WS-AtomicTranscation也是基于这个原理来实现的。