任何人都可以告诉我,为什么2PC在协调器失败时会阻塞?是因为同组群在2PC中没有使用超时概念吗?
好参考:Analysis and Verification of Two-Phase Commit & Three-Phase Commit Protocols, by Muhammad Atif,
答案 0 :(得分:1)
两阶段是阻止协议,因为当参与者进入准备阶段时,他们必须等待协调员决定下一步处理的步骤。当协调员失败时,他们必须等到它复活。 无法启动另一个协调员来达成结果。参与者在被命令这样做之前不得改变他们的状态。
我能理解你比较3PC和2PC。因此,3PC协议(据我所知)是一系列协议,其中很少存在。 3PC解决了阻塞2PC性质的问题。 重点是只有知道"环境"才能始终如一地完成事务(提交或回滚)。它预计会启动一个新的协调员(备份)(可能从参与者中选择)并且可以完成交易。有一段时间可以包括超时以中止参与者。即使新启动的协调员应该能够始终如一地完成整个事务(可能在这种情况下通过回滚)。
答案 1 :(得分:0)
2PC不会在协调器发生故障时始终阻塞,使用2PC的系统仅在任何人读出已准备好的(不确定的)资源时,在协调器发生故障时才阻塞。
如果丢失了向参与者的(第2阶段)提交消息,则参与者的资源保持在准备状态,则必须参考协调器以检查资源的确切状态。参与者无法确定已准备好的资源本身的确切状态。