我有两个独立的系统。在某种程度上,我希望能够进行影响两个系统的操作,我希望模拟原子性,即使这在技术上是不可能的。为了说明这个问题,假设我们想把一个对象从一个系统移动到另一个系统。
首先,因为每个操作在任何时候都可能失败,所以我向两个系统添加了一个指示意图的试探性记录。算法是:
- 将系统1中的对象设置为移除的暂定模式
- 将系统2中的对象设置为添加的暂定模式
- 将对象从系统1移动到系统2
- 从系统中删除试探性2
- 从系统1中删除试探性
缺少原子操作可能会导致两个系统中的对象根据步骤4和步骤5的顺序处于none状态,并导致它们之间的崩溃。
我的问题是,是否有一种算法可以以某种方式解决原子性的缺乏,并允许我保证它。我知道这似乎是不可能的,但我希望不是这样。
很有可能(虽然不完美)。数据库总是这样做。请参见https://en.wikipedia.org/wiki/Distributed_transaction和https://en.wikipedia.org/wiki/Two-phase_commit_protocol。
当然,这是一个简洁的主题,所以我不能在代码中提供一个快速的缩略草图。但是,是的,你可以这样做。
你的方法有一些优点。您需要的是两个系统之间更多的通信。