1

在 2 Phase Commit 中,在所有参与事务的组件都投票“是”之后,事务协调器发出“提交”命令。然后每个参与者提交自己的事务。

如果任何参与者在“提交”步骤失败会发生什么?虽然这个组件失败了,但其他组件可能已经提交了他们的事务。如果发生这种情况,事务协调器是否能够向所有参与者发出回滚命令。

谢谢。

4

1 回答 1

3

第一阶段的全部目的是确保在提交阶段没有任何失败。至少由于数据完整性或业务流程的观点。因此,如果提交的准备阶段很好,那么可以假设提交将起作用,但网络/通信失败除外。

所有参与系统必须就处理情况的一种或另一种方式达成一致

1.自动提交。如果协调器没有显式调用回滚,(在给定时间内)事务将被视为由相应的参与系统提交。

2.Transaction Coordinator 为每个失败的组件重试。在网络故障的情况下,重试可能仍然有效。

3.补偿。在指定次数的重试之后,事务协调器假定事务已经以不一致的状态结束。然后它可以尝试补偿。(注意:这不一定是回滚,这就像事务失败时要采取的行动)。

现在想想这个。补偿本身可能不会在所有资源管理器中都成功。

一些业务流程可能也需要人工补偿!因此,您需要记录、发出警报,并且可能需要手动补偿才能使系统恢复到原始状态。

于 2012-12-03T16:51:25.427 回答