谈谈分布式事务之一:SOA需要怎样的事务控制方式

在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务 流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中。服务对外提供统一的接口,服 务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合、编排成为一个有机的整体。在 这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务 之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Service Coordination )。而具体来讲,一个分布式的活动可能会执行几秒钟,比如银行转帐;也可能执行几分钟、几个小时 、几天甚至更长,比如移民局处理移民的申请。事务,无疑是属于短暂运行服务协作(Short-Running Service Coordination)的范畴。

一、 什么是事务(Transaction)

事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作 只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回 滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。事务具有如 下四个属性,根据其首字母,我们一般将其称为事务的ACID四大属性:

* 原子性(Atomicity):“原子”这个词的本义就是不可分割的意思,事务的原子性的含义是:一 个事务的所有操作被捆绑成一个整体,所有的操作要么全部执行,要么都不执行;

* 一致性(Consistence):事务的原子性确保一个事务不会破环数据的一致性,如果事务成功提交 ,数据的状态是组成事务的所有操作按照事先编排的方式执行的结果,数据状态具有一致性;如果事务 任何一个中间步骤出错,整个事务回滚并将数据回复到原来的状态,数据状态仍然具有一致性。所以, 事务只会将数据状态从一个一致性状态转换到另一个一致性状态;

* 隔离性(Isolation):从事务的外部来看,事务的一致性实现了数据在两个一致性状态之间的转 换,但是从事务内部来看,组成事务的各个操作是按照一定的逻辑顺序执行的,所以数据具有位于两个 一致性状态的“中间状态”。但是,这种中间状态被隔离于事务内部,对于事务外部是不可见的;

* 持久性(Durability):持久性的意思是一旦成功提交,基于持久化资源(比如数据库)的数据将 会被持久化,对数据的改变是永久性的。

事务最初来源于数据库管理系统(DBMS),反映的是对存储于数据库中的数据操作。除了主流的关系 型数据库管理系统,比如SQL Server,Oracle和DB2等提供对事务的支持,基于事务的数据操作方式也可 以应用到其他一些数据存储资源,比如MSMQ。自Windows Vista开始将文件系统(NTFS)以至于注册表纳 入了事务型资源(Transactional Resource)的范畴。

二、 事务的显式控制

虽然事务型资源家族成员越来越多,但是不可否认的是,数据库还是我们使用频率最高的事务型资源 。对于稍微有一定经验的开发人员,应该都在存储过程(Stored Procedure)中编写过基于事务的SQL, 或者编写过基于ADO.NET事务的代码,对事务的进一步介绍就从这里说起。

时间: 2024-09-13 04:21:34

谈谈分布式事务之一:SOA需要怎样的事务控制方式的相关文章

谈谈分布式事务之四: 两种事务处理协议OleTx与WS-AT

在年前写一个几篇关于分布式事务的文章,实际上这些都是为了系统介绍WCF事务处理体系而提供的相关的背景和基础知识.今天发最后一篇,介绍分布式事务采用的两种协议,即OleTx和WS-AT,内容比较枯燥,但对于后续对WCF事务处理框架进行深入剖析的系列文章来说,确是不可以缺少的.总的来说,基于WCF的分布式事务采用的是两阶段提交(2PC:Two Phase Commit)协议.具体来说,我们可以选择如下两种事务处理协议实现WCF的分布式式事务,它们按照各自的方式提供了对两阶段提交的实现. OleTx:

谈谈分布式事务(Distributed Transaction)[共5篇]

[第1篇] SOA需要怎样的事务控制方式 在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中.服务对外提供统一的接口,服务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合.编排成为一个有机的整体.在这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Serv

谈谈分布式事务之三 System.Transactions事务详解[上篇]

在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务..NET 2.0为了带来了全新的 事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集中的 System.Transactions命名空间下,我们直接称基于此的事务为System.Transactions事务. System.Transactions事务编程模型使我们可以显式(通过System.Transactions.Transaction)或者隐 式(基于System.Tran

谈谈分布式事务之二:基于DTC的分布式事务管理模型[下篇]

[续上篇] 当基于LTM或者KTM的事务提升到基于DTC的分布式事务后,DTC成为了本机所有事务型资源 管理器的管理者:此外,当一个事务型操作超出了本机的范围,出现了跨机器的调用后,本机的DTC需要 于被调用者所在机器的DTC进行协助.上级对下级(包括本机DTC对本机所有资源管理器,以及上下级DTC )的管理得前提是下级在上级那里登记,即事务登记(Transaction Enlist).所有事务参与者,包括 所有资源管理器和事务管理器(即DTC)在进行了事务等级完成之后形成了一个树形的层级结构,

谈谈分布式事务之三: System.Transactions事务详解[下篇]

在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该 方法对用于创建基于现有Transaction对象的"依赖事务(DependentTransaction)".不像可提交事务 是一个独立的事务对象,依赖事务依附于现有的某个事务(可能是可提交事务,也可能是依赖事务). 依赖事务可以帮助我们很容易地编写一些事务型操作,当环境事务不存的时候,可以确保操作在一个独 立的事务中执行:当环境事务存在的时候,则自动加入其中. 一.依赖事务

分布式编程模式中的租约、事务和分布式事件机制

Jini技术面向网络及分布式计算的特性决定了Jini技术必然与传统的单机系统在许多方面有概念上和实际应用中的差别.如网络的延迟.失败,或者设备的突然撤出,将导致信息的无序和丢失:资源的获得.保存.维护和回收情况更为复杂:不同实体之间通讯和协调工作的可靠性及效率并不像单机系统中那样较为容易地获得保证.因而在 Jini 中以 Java 为基础加入了分布式编程模式,特别是引入了租约.分布式事务和分布式事件. 租约 租约的基本概念是资源只能被使用一段时间,这由租约的持有者(lease holder)和租

Spring五个事务隔离级别和七个事务传播行为

Spring五个事务隔离级别和七个事务传播行为 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重复读 :是指在一个事务内,多次读同一数据.在这个事务还没有结束时,另外一个事务也访问该同一数据.那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的.这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读.例如

Spring声明式事务管理源码解读之事务提交

在下面的文章中,我讲会多次提到第一篇文章,第一篇文章是:Spring声明式事务管 理源码解读之事务开始 如果要理解事务提交的话,理解事务开始是一个前提条件,所以请先看第一篇文章,再 来看这篇 如果你仔细看下去,我想肯定是有很多收获,因为我们确实能从spring的代码和思想 中学到很多东西. 正文: 其实俺的感觉就是事务提交要比事务开始复杂,看事务是否提交我们还是要回到 TransactionInterceptor类的invoke方法 Java代码 public Object invoke(Met

Spring声明式事务管理源码解读之事务开始

这个是我昨天在解决问题是看源码得一点体验,可能说得比较大概,希望大家多多讨 论,把本贴得质量提高上去,因为spring实现的事务管理这部分我相信还是有点复杂的. 一个人未必能想得十分清楚 在spring的声明式事务管理中,它是如何判定一个及标记一个方法是否应该是处在事 务体之中呢. 首先要理解的是spring是如何来标记一个方法是否应该处在事务体之中的.有这样一 个接口TransactionDefinition,其中定义了很多常量,它还有一个子接口 TransactionAttribute,其中