1

我发现许多读物说 2PC 是安全的,这意味着它要么提交事务,要么回滚。更具体地说,[如果有人提交,没有人会中止;如果一个人中止,没有人提交]。(http://www0.cs.ucl.ac.uk/staff/B.Karp/gz03/f2010/gz03-lecture6-2PC.pdf

Wikipedia,我知道在提交阶段,所有进程都会做以下事情:

  1. 协调者向所有参与者发送提交消息。
  2. 每个参与者完成操作并释放事务期间持有的所有锁和资源。
  3. 每个参与者向协调器发送一个确认。
  4. 协调器在收到所有确认后完成事务。

我想知道在第 1 阶段,协调器是否在向多个参与者发送消息后失败,这意味着一些参与者会收到提交消息,而其他参与者不会。然后那些收到的人将提交,而其他人仍将被阻止。所以我认为2PC在这里不能保证安全?

4

1 回答 1

2

正如维基百科的文章所说:

如果协调者永久失败,一些参与者将永远无法解决他们的事务:参与者向协调者发送协议消息后,它将阻塞,直到收到提交或回滚。

这里的关键词是“永久”。在您的第一个链接中,2PC 算法也被标记为安全,仅用于控制器重启而不是永久死亡。

因此 2PC 是安全的,而其组件可以交互(即使重启、连接丢失和其他临时问题)。

于 2019-12-21T09:23:14.010 回答