我试图了解什么是 MS DTC(Microsoft 分布式事务协调器)。我发现它是 COM+ 事务的协调器,但我仍然不明白它是什么,有人知道解释一下吗?
答案1
编写应用程序很困难。随着时间的推移,我们发现了一些概念和技术,这些概念和技术允许我们构建大型应用程序。模块化,或将应用程序构建为独立模块,允许您从较简单的部分构建复杂系统并实现软件重用。面向对象的概念和 Microsoft® 组件对象模型 (COM) 提供了一种允许您编写模块化应用程序的技术。当应用程序被构建为组件时,各个部分可以一起驻留在一台计算机中,或者它们可以通过网络上的远程过程调用进行交互。因此,组件既提供了模块化,又提供了自然分布。
将应用程序构建为独立组件可能会产生组件管理问题。单片程序发生故障并作为一个单元重新启动。但是,对于模块化系统,一个组件的故障不得影响其他组件。必须有一种方法可以隔离故障并限制故障传播。事务提供模块化执行,从而简化和自动化故障处理。它们为实施者和用户提供了一个简单的概念执行框架。
用户将事务视为一个单一的变更事件,该事件要么发生,要么不发生。实施者将事务视为一种编程风格,允许他们编写可参与分布式计算的模块。假设您想将钱从一个银行账户转到另一个银行账户。实施者和用户希望确保两个账户都发生变化或都不变。在分布式系统中很难做到这一点——计算机可能会发生故障,消息可能会丢失。事务提供了一种将一组操作捆绑到原子执行单元中的方法。
原子的全有或全无属性并不新鲜:它贯穿于整个生命过程。例如,如果你签订了一份合同,托管官会协调交易:托管官会收集合同各方的签名。当托管官宣布所有人都已签字时,合同即为最终合同。主持婚礼的牧师首先会问新郎新娘:“你愿意让这个人成为你的配偶吗?”如果他们都回答“我愿意”,牧师就会宣布他们结婚。电影片场的导演首先会问:“片场准备好了吗?”如果所有人都回答是,导演就会喊道:“开始!”帆船上的舵手首先准备转向,会问船员:“准备好了吗?”如果他们都回答是,舵手就会喊道:“舵转下风!”然后调转船头。
这些场景说明了事务的基本原则:多个独立实体必须达成一致。如果任何一方不同意,交易就取消了。一旦他们达成一致,事务就可以发生。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 事务资源管理器。将来,Microsoft 和其他软件公司将添加其他事务资源管理器,例如分布式对象系统、事务文件系统、事务排队系统和工作流管理系统。
ACID 属性
事务提供 ACID 属性。
原子性 事务要么提交,要么中止。如果事务提交,则其所有效果都会保留。如果事务中止,则其所有效果都会被撤消。例如,在重命名对象时,会创建新名称并删除旧名称(提交),或者不进行任何更改(中止)。
一致性 事务是对系统状态的正确转换。它保留状态不变量。例如,通过向双向链表添加元素,所有四个前向和后向指针都会更新。
隔离性 并发事务与其他未完成事务的更新隔离。这些更新不构成一致状态。此属性通常称为可序列化性。例如,在一致性示例中提到的遍历双向链表的第二个事务将看到插入之前或之后的列表,但它只会看到完整的更改。
持久性一旦事务提交,即使系统发生故障,其效果也将持续存在。例如,在原子性示例中重命名之后,即使系统在提交完成后立即发生故障并重新启动,对象也将具有新名称。
应用程序将决定什么是一致性,并使用 BeginTransaction 和 Commit 事务方法将其计算括起来以界定这些一致的转换。事务资源管理器提供其管理的对象的一致、独立和持久的转换。MS DTC 管理涉及多个资源管理器(可能分布在多台计算机中)的事务。MS DTC 创建事务对象,跟踪资源管理器之间的事务迁移,并实施两阶段提交协议以使这些事务具有原子性和持久性。
另请参阅 http://en.wikipedia.org/wiki/Distributed_Transaction_Coordinator