什么是 MS DTC(Microsoft 分布式事务协调器)?

Dio*_*ogo 5 windows-7

我试图了解什么是 MS DTC(Microsoft 分布式事务协调器)。我喜欢它是 COM+ 事务的协调器,但我仍然不明白它是什么,有人知道解释吗?

Moa*_*oab 8

编写应用程序很困难。随着时间的推移,我们正在发现允许我们构建大型应用程序的概念和技术。模块化,或将应用程序构建为独立模块,允许您从更简单的部分构建复杂的系统并获得软件重用。面向对象的概念和 Microsoft® 组件对象模型 (COM) 提供了一种允许您编写模块化应用程序的技术。当应用程序被构造为组件时,各个部分可以一起驻留在一台计算机中,或者它们可以通过使用跨网络的远程过程调用。因此,组件提供了模块化和自然分布。

将应用程序构建为独立的组件会产生管理组件的问题。单体程序失败并作为一个单元重新启动。但是,对于模块化系统,一个组件的故障不能破坏其他组件。必须有一种方法来隔离故障并限制故障传播。事务提供模块化执行,从而简化和自动化故障处理。它们为实现者和用户提供了一个简单的概念执行框架。

用户将事务视为发生或不发生的单个更改事件。实现者将事务视为一种编程风格,允许他们编写可以参与分布式计算的模块。假设您想将钱从一个银行账户转移到另一个银行账户。实施者和用户希望确保两个帐户都更改或都不更改。在分布式系统中很难做到这一点——计算机可能会出现故障,消息可能会丢失。事务提供了一种将一组操作捆绑到原子执行单元中的方法。

原子的全有或全无属性并不新鲜:它在整个生命中都会出现。例如,如果您签订合同,托管人员会协调交易:托管人员收集合同各方的签名。当托管人员宣布每个人都已签署时,合同即为最终合同。主持婚礼的牧师首先问新郎新娘:“你愿意把这个人当作你的配偶吗?” 如果他们都回答“我愿意”,部长就会宣布他们结婚。电影片场的导演首先会问:“准备好了吗?” 如果所有人都回答“是”,那么导演会喊:“行动!” 准备起航的帆船上的舵手首先问船员:“准备好了吗?” 如果他们都回答是,那么舵手就会喊道:“Helm's a'lee!” 并转动船。

这些场景说明了交易的基本原则:几个独立的实体必须达成一致。如果任何一方不同意,交易就会终止。一旦他们同意,交易就可以发生。Microsoft 分布式事务协调器 (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® 95 和 Microsoft® Windows NT® 操作系统实施了事务管理软件。

将事务概念与 COM 相结合需要创新。传统的交易系统需要相当多的技能来安装和管理。将 MS DTC 与 Microsoft 的操作系统集成的挑战是自动化安装、管理和使用。许多概念和技术必须为新的客户端/服务器、面向对象和可视化管理环境重新发明。

在其第一个版本中,MS DTC 使用一个资源管理器:Microsoft® SQL Server™。它还与多个事务处理监视器一起运行,包括 Encina®、Top End® 和 TUXEDO®。MS DTC 实现 OLE 事务接口。所有 OLE 事务接口都是公共的,因此任何资源管理器都可以成为 OLE 事务资源管理器。未来,微软等软件公司还会增加其他事务资源管理器,如分布式对象系统、事务文件系统、事务队列系统、工作流管理系统等。

ACID 属性

事务提供 ACID 属性。

原子性 事务要么提交要么中止。如果一个事务提交,它的所有影响仍然存在。如果它中止,它的所有影响都会被撤销。例如,在重命名对象时,会创建新名称并删除旧名称(提交),或者不进行任何更改(中止)。

一致性事务是系统状态的正确转换。它保留了状态不变量。例如,通过向双向链表添加一个元素,所有四个前向和后向指针都会更新。

隔离并发事务与其他不完整事务的更新隔离。这些更新不构成一致状态。此属性通常称为可序列化性。例如,遍历一致性示例中提到的双向链表的第二个事务将在插入之前或之后看到列表,但它只会看到完整的更改。

持久性一旦事务提交,即使出现系统故障,其影响也将持续存在。例如,在原子性示例中重命名后,即使系统失败并在提交完成后立即重新启动,对象也将具有新名称。

由应用程序决定什么是一致性,并使用 BeginTransaction 和 Commit 事务方法对其计算进行括号以分隔这些一致性转换。事务性资源管理器为其管理的对象提供一致、隔离和持久的转换。MS DTC 管理涉及多个资源管理器的事务,可能分布在多台计算机中。MS DTC 创建事务对象,跟踪资源管理器之间事务的迁移,并实现两阶段提交协议,使这些事务具有原子性和持久性。

信息来源

另见 http://en.wikipedia.org/wiki/Distributed_Transaction_Coordinator

http://www.microsoft.com/sqlserver/en/us/default.aspx