2009-12-01 68 views
1

理论上,是否可以定义一个协议,其中一台机器在另一台机器(或多台机器)上进行一些远程调用,以及在该进程的任何部分中,如果任何机器(或操作)发生故障或通信中断,一切都回滚了? (就像数据库一样)是否可以通过机器边界(通过tcp-ip)进行事务处理?

我问这个问题,因为在硬件层面上,人们总是说如果没有原子处理器操作(测试和设置),就不能进行原子操作(一个非常重要的事务成分)。

但是,既然我们现在正在谈论多台机器,这不会飞。作为一个例子,这将是一个棘手的问题:假设我有一个协议在远程机器上发出一个命令,并得到一个回应。这可能是该方法被调用,但在传输响应期间,连接会死亡。这也可能是执行操作的机器认为一切正常,但接收机从未得到答案。

添加Ack's没有帮助,因为ack可能在传输中丢失。

有兴趣阅读他人的想法(并了解到一些27年前的教授已经提出了一个坚实的解决方案)。

[R

+0

,因为我猜会有一个明确的答案,这我不盯着这是一个社区的wiki。如果事实证明情况并非如此,我总是可以改变它 – Toad 2009-12-01 12:00:18

回答

3

是的,这个问题已经(或多或少)已经解决了:)

什么你要找的是Two-Phase Commit protocol

在事务处理,数据库, 和计算机网络,所述两阶段 提交协议(2PC)是一种类型的 原子提交协议。它是一个 分布式算法,它协调 参与 分布式原子事务处理的所有进程是否提交或中止(回滚) 事务。该协议甚至在许多情况下系统 失败(涉及任一进程, 网络节点,通信等, 失败),并因此广泛地使用 ,其目标达到 。

+0

正是我在找的东西。谢谢 – Toad 2009-12-01 12:23:53

相关问题