引言
编写应用程序是很难的随着时间的推移我们不断发掘允许建立大型应用程序的概念和技术模块化或者说将应用程序构建成独立的模块使我们得以由简单的部分构建复杂的系统并使软件得到重复使用面向对象概念和 Microsoft® 组件对象模块 (COM) 可提供编写模块化应用程序的技术
当某个应用程序构建为组件时各个单独部分可共同驻留在单台计算机上也可通过远程过程调用在网络上相互作用因此组件同时提供了模块化和自然分布
将应用程序构建成独立的组件会产生组件的管理问题单个程序失败后将作为一个单位重新启动但在使用模块化系统时一个组件的失败不应当破坏其它组件这就必须有隔离故障和限制故障传播的方法事务提供了模块化执行方式因此简化了故障处理并使故障处理自动实现它们同时为执行者和用户提供了简单的概念化执行框架
用户认为事务是单个的要么发生或要么不发生的更改事件执行者认为事务是一种允许他们编写能参与分布式计算的模块的编程形式假定您要将资金从一个银行帐户转到另一个帐户执行者和用户需要确保两个帐户都更改或都不更改在分布式系统中很难完成这项工作 计算机可能失败并且会丢失信息事务提供了一种方法能够将一组操作集合成具有原子性的执行单位
原子性要么全有要么全无的属性并不新鲜它在生活中随处可见例如如果输入一个合同escrow(由第三者保存附带条件委付盖印的契约)官员将协调这项事务escrow 官员会收集此合同每一方的签字当 escrow 官员宣布所有人都已签字后此合同就完成了主持结婚典礼的牧师先问新娘和新郎愿意此人成为您的配偶吗? 如果他们都回答愿意牧师就会宣布他们结婚电影导演在某一场景会先问布景准备好了吗? 如果都回答已准备好导演就会喊开拍! 在帆船上预备掉转航向的舵手会先问船员准备好转向了吗? 如果都回答已准备好舵手就会喊转舵!改变船的方向
这些情景说明了事务的基本原理几个独立的实体必须达成一致如果任何一方不同意交易就会失败一旦同意后事务就会发生Microsoft Distributed Transaction Coordinator (MS® DTC) 为 COM 结构的其它组件执行这项事务协调任务
在 MS DTC 术语中执行者被称为事务管理器在执行事务保护资源的事务中其参与者(如关系数据库)被称为资源管理器
应用程序通过调用事务管理器的 BeginTransaction 方法开始事务这样可创建一个代表事务的事务对象然后应用程序会调用资源管理器来完成事务工作
应用程序对每个资源管理器的第一次调用确定应用程序的当前事务例如如果应用程序在使用关系数据库它会调用 ODBC 接口此接口将事务对象与 ODBC 连接关联起来在此之后所有通过此连接的数据库调用都会代表该事务执行直到该事务结束为止
当某个资源管理器首先代表某个事务工作时会通过调用事务管理器登记到该事务中随着事务的发展事务管理器会跟蹤每个登记到该事务中的资源管理器
通常应用程序用 Commit 事务方法来完成事务如果应用程序无法完成则调用 Abort 事务方法该方法可以撤消事务的操作如果应用程序失败MS DTC 就会放弃此事务
当应用程序成功地完成事务的工作后它会调用 MS DTC 来提交事务然后 MS DTC 会仔细检查两阶段 提交协议使所有已登记的资源管理器都提交两阶段提交协议可确保所有的资源管理器提交此事务或全都放弃此事务在第一阶段MS DTC 询问每个资源管理器是否准备提交如果所有参与者都回答是那么在第二阶段 MS DTC 将向所有参与者广播提交信息如果事务的任何部分失败或资源管理器响应准备请求失败或资源管理器响应否那么 MS DTC 将通知所有资源管理器该事务已被放弃
事务管理器是大多数数据库系统的关键部分事务管理器还是某些操作系统的可选部分Microsoft 相信事务对分布式应用至关重要 事务提供了模块化执行从而使 COM 模块化编程更加完备Microsoft 提供 Microsoft Windows® 和 Microsoft Windows NT® 操作系统的事务管理软件
将事务概念与 COM 必需的创新相结合传统的事务系统要求具有很高的安装和管理技巧而集成 MS DTC 与 Microsoft 操作系统的难点是自动实现安装管理和使用许多概念和技术必须针对新的客户/服务器面向对象和可视化管理环境重新创造
在第一版中MS DTC 使用了一个资源管理器Microsoft SQL Server®它还使用了几个事务处理监视器包括 Encina®Top End 和 TUXEDO®MS DTC 实现 OLE 事务接口所有 OLE 事务接口都是公用的因此任何资源管理器都可以变成 OLE 事务资源管理器将来Microsoft 和其它软件公司将增加其它事务资源管理器比如分布式对象系统事务文件系统事务队列系统及业务流程管理系统