在2阶段提交中,在参与交易的所有组件都投票为“是”之后,交易协调员发出“提交”命令。然后每个参与者都进行自己的交易。
如果任何参与者在“提交”步骤失败,会发生什么?虽然此组件已失败,但其他组件可能已提交其事务。 如果发生这种情况,事务协调器是否能够向所有参与者发出回滚命令。
感谢。
答案 0 :(得分:2)
第一阶段的全部目的是确保在提交阶段没有任何失败。至少由于数据完整性或业务流程的观点。因此,如果提交的准备阶段很好,那么可以假设提交将起作用,网络/通信失败除外。
所有参与系统必须就处理情况的一种或另一种方式达成一致
1.Auto提交。如果协调器未明确调用回滚,(在给定时间内)事务将被视为由相应的参与系统提交。
2.Transaction Coordinator重试每个失败的组件。如果网络出现故障,重试可能仍然有效。
3.Compensation。在指定次数的重试之后,事务协调器假定事务以不一致的状态结束。然后它可以尝试补偿。 (注意:这不一定是回滚,这就像事务失败时要采取的行动)。
现在想一想。在所有资源管理器中,补偿本身可能不会成功。
某些业务流程也可能需要手动补偿!因此,您需要记录,发出警报,并且可能需要手动补偿才能使系统恢复到原始状态。