理论上,是否可以定义一个协议,其中一台机器在另一台机器(或多台机器)上进行一些远程调用,以及在该进程的任何部分中,如果任何机器(或操作)发生故障或通信中断,一切都回滚了? (就像数据库一样)是否可以通过机器边界(通过tcp-ip)进行事务处理?
我问这个问题,因为在硬件层面上,人们总是说如果没有原子处理器操作(测试和设置),就不能进行原子操作(一个非常重要的事务成分)。
但是,既然我们现在正在谈论多台机器,这不会飞。作为一个例子,这将是一个棘手的问题:假设我有一个协议在远程机器上发出一个命令,并得到一个回应。这可能是该方法被调用,但在传输响应期间,连接会死亡。这也可能是执行操作的机器认为一切正常,但接收机从未得到答案。
添加Ack's没有帮助,因为ack可能在传输中丢失。
有兴趣阅读他人的想法(并了解到一些27年前的教授已经提出了一个坚实的解决方案)。
[R
,因为我猜会有一个明确的答案,这我不盯着这是一个社区的wiki。如果事实证明情况并非如此,我总是可以改变它 – Toad 2009-12-01 12:00:18