理论上,可以定义一个协议,其中一台机器在另一台机器(或多台机器)上进行一些远程调用,并且在该过程的任何部分中,如果任何机器(或操作)发生故障,或者通信滴,一切都回滚? (就像数据库一样)
我问这个问题,因为在硬件层面上,人们总是说如果没有原子处理器操作(测试和设置),就无法进行原子操作(事务的一个非常重要的组成部分)。
但是从现在开始我们谈论的是多台机器,但这并没有实现。
作为一个例子,这将是多么棘手:假设我有一个协议在远程机器上发出命令,并得到一个回复。可能是该方法被调用,但在响应传输期间,连接终止。那么执行操作的机器也可以认为一切正常,但接收机器从未得到答案。
添加Ack并没有帮助,因为ack也可能在传输过程中丢失。
有兴趣阅读别人的想法(并了解到27年前某位教授已经提出了坚如磐石的解决方案)。
[R
答案 0 :(得分:3)
是的,这个问题已经(或多或少)已经解决了:)
您正在寻找的是Two-Phase Commit protocol。
在事务处理中,数据库, 和计算机联网,两阶段 commit protocol(2PC)是一种类型 原子承诺协议。它是一个 分布式算法协调 所有参与的过程 分布式原子事务 是否提交或中止(回滚) 交易。该协议实现了 它的目标甚至在许多系统的情况下 失败(涉及任何一个过程, 网络节点,通信等 失败),因而广泛 使用。
答案 1 :(得分:1)
听起来像分发的标准问题。
阅读Distributed Computing: Principles, Algorithms, and Systems并再次提出问题;)