2阶段提交 - 失败提交步骤

时间:2012-07-22 11:31:49

标签: transactions distributed-transactions

在2阶段提交中,在参与交易的所有组件都投票为“是”之后,交易协调员发出“提交”命令。然后每个参与者都进行自己的交易。

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

1.Auto提交。如果协调器未明确调用回滚,(在给定时间内)事务将被视为由相应的参与系统提交。

2.Transaction Coordinator重试每个失败的组件。如果网络出现故障,重试可能仍然有效。

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

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

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