模拟独立系统中的原子操作

时间:2015-08-18 18:12:12

标签: algorithm atomicity

我有两个独立的系统。在某些时候,我希望能够进行影响两个系统的操作,并且我想模拟原子性,即使这在技术上是不可能的。为了说明这个问题,我们可以说我们想将一个对象从一个系统移动到另一个系统。

首先,因为每次操作都可能在任何时候失败,我会向两个系统添加一个指示意图的暂定记录。算法是:

  1. 将系统1中的对象设置为暂定模式以删除
  2. 将系统2中的对象设置为暂定模式以添加
  3. 将对象从系统1移至系统2
  4. 从系统2中删除暂定性
  5. 从系统1中删除暂定性
  6. 缺乏原子操作虽然可能导致两个系统中的对象都没有,这取决于步骤4和5的顺序,以及它们之间的崩溃。

    我的问题是,是否有一种算法可以某种方式解决缺乏原子性并允许我保证它。我有点看到它似乎不可能,但我希望不是。

1 个答案:

答案 0 :(得分:0)

很可能(虽然不完美)。数据库一直这样做。有关简介,请参阅https://en.wikipedia.org/wiki/Distributed_transactionhttps://en.wikipedia.org/wiki/Two-phase_commit_protocol

当然,这是一个简洁的主题,所以我无法在代码中提供快速缩略图。但是,你可以这样做。

你的方法有一些优点。您需要的是两个系统之间的更多通信。