首页 / 软件开发 / .NET编程技术 / 谈谈分布式事务之二:基于DTC的分布式事务管理模型[上篇]
谈谈分布式事务之二:基于DTC的分布式事务管理模型[上篇]2011-08-20 博客园 Artech通过上一篇的介绍,我们知道了SOA真正需要的是一个能够协调服务操作直接(通过服务自身访问的 资源)或者间接(通过被调用服务访问的资源)访问的所有资源的分布式事务管理系统,这是一个复杂 的架构体系。WCF,作为Windows平台下基于SOA的分布式框架,对分布式事务提供全面的支持。不过, WCF并不是另起炉灶,而是充分地利用了Windows现有的事务控制基础架构。本节着重讨论Windows事务处 理模型,首先来看看在这个模型中各个事务参与者各自扮演怎样的角色。对于所有的事务参与者,按照各自在整个事务生命周期各个阶段所承担的职能,大致扮演着如下三种 角色:* 应用(Application)、服务(Service)或者组件(Component):代表用户程序,或者是承载着 某功能的服务(Service)或者组件(Component);* 资源管理器(RM:Resource Manager):代表用于管理具体事务型资源的软件程序,比如数据库或 者队列(MSMQ)等;* 事务管理器(TM: Transaction Manager):代表管理整个事务的中间件程序,为应用和资源管理 器提供基本的事务控制服务。一、应用(Application)、服务(Service)和组件(Component)事务最终为用户程序、服务和组件服务的,后者利用了事务这种特殊的机制将一组相关的操作作为一 个不可分割的整体来执行,从而确保了数据的一致性。在整个模型中,应用(服务或者应用,为了叙述 简练,后续部分关于应用、服务和组件都简称为应用)主要负责如下一些事务相关的任务:* 开始事务:事务开始的驱动者总是应用,但是并不是所有的应用都会开始一个新的事务,只有最初 的应用才才是事务的开启者;* 事务的奉送(Marshaling)和传播(Propagation):将应用的本地事务封送、传播给另一个应用 或者资源管理器;* 提交事务:事务的开启者同时也是事务最终的提交者,当事务相关的操作顺利完成后,最初开启事 务的应用会提交该事务。二、资源管理器(RM:Resource Manager)在事务控制模型中,不论是应用还是资源管理器都不是直接地访问具体的事务型资源,而是通过一个 中介间接地对目标资源进行操作,这个中介就是资源管理器。按照目标资源是否可被持久化,可以将相 应的资源管理器分为如下两类:* 持久化资源管理器(Durable Resource Manager):用于管理持久化资源,比如数据库和MSMQ,当 事务回滚得时候,具有可恢复性(Recovery);* 易失资源管理器(Volatile Resource Manager):用于管理像内存数据这样的不会被持久化的易 失资源,易失资源不具有可以恢复性。在后面介绍的实现分布式事务的两阶段提交(2PC: Two-Phase Commit)协议中,对于这两种不同的 资源管理器,采用不同的登记(Enlist)方式。总的来说,资源管理器在整个事务模型中主要承担如下 几种职能:* 帮助应用实现对目标资源的操作;* 注册到相应的事务管理器,以便事务回滚得时候可以从事务管理器中接收到恢复请求,实现对数据 的恢复;* 向相应的事务管理器报告本地事务的结果;