gpt4 book ai didi

transactions - 分布式事务如何工作(例如 MSDTC)?

转载 作者:行者123 更新时间:2023-12-03 23:57:14 24 4
gpt4 key购买 nike

我以一种模糊的方式了解常规 ACID 事务的工作原理。您在数据库上执行一些工作,直到设置了某种提交标志才确认工作。提交部分基于一些基本假设(例如单个磁盘 block 写入是原子的)。如果发生灾难性错误,您可以在恢复阶段清除未提交的数据。

分布式事务如何工作?在我读过的一些 MS 文档中,您可以以某种方式跨数据库和文件系统(除其他外)执行事务。

这项技术可以(并且可能)用于安装程序,您希望程序完全安装或完全不存在。您只需在安装程序启动时开始事务。接下来,您可以连接到注册表和文件系统,进行定义安装的更改。工作完成后,只需提交,如果由于某种原因安装失败,则回滚。这个神奇的分布式事务协调器会自动为您清理注册表和文件系统。

两个不同的系统怎么可能以这种方式进行交易?在我看来,总是有可能使系统处于不一致的状态,即文件系统已提交其更改而注册表没有。我认为在 MSDTC 中甚至可以通过网络执行事务。

我已阅读 http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx ,但感觉只是解释的开始,步骤4应该大大扩展。

编辑:从我收集到的 http://en.wikipedia.org/wiki/Distributed_transaction ,它可以通过两阶段提交( http://en.wikipedia.org/wiki/Two-phase_commit )来完成。读完后,我仍然没有 100% 理解该方法,似乎步骤之间有很大的错误空间。

最佳答案

关于“第4步”:

The transaction manager coordinates with the resource managers to ensure that all succeed to do the requested work or none of the work if done, thus maintaining the ACID properties.



这当然需要所有参与者提供正确的接口(interface)和(无错误的)实现。界面看起来像这样:
public interface ITransactionParticipant {
bool WouldCommitWork();
void Commit();
void Rollback();
}

事务管理器在提交时询问所有参与者是否愿意提交事务。只有当参与者能够在所有允许的错误条件(验证、系统错误等)下提交此事务时,参与者才能断言这一点。在所有参与者都声明了提交事务的能力后,管理器发送 Commit()给所有参与者的消息。如果任何参与者引发错误或超时,则整个事务将中止,并且个别成员将回滚。

该协议(protocol)要求参与者在断言他们的提交能力之前记录他们的整个交易内容。当然,这必须在特殊的本地事务日志结构中才能从各种故障中恢复。

关于transactions - 分布式事务如何工作(例如 MSDTC)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com