2PC两段提交介绍

基于XA协议的两阶段提交(2PC)

两阶段提交协议(Two Phase Commitment Protocol)中,涉及到两种角色

一个事务协调者(coordinator):负责协调多个参与者进行事务投票及提交(回滚)

多个事务参与者(participants):即本地事务执行者

总共处理步骤有两个(1)投票阶段(voting phase):协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。参与者将告知协调者自己的决策:同意(事务参与者本地事务执行成功,但未提交)或取消(本地事务执行故障);(2)提交阶段(commit phase):收到参与者的通知后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚;

如果所示 1-2为第一阶段,2-3为第二阶段

2PC两段提交介绍

2PC两段提交介绍

如果任一资源管理器在第一阶段返回准备失败,那么事务管理器会要求所有资源管理器在第二阶段执行回滚操作。通过事务管理器的两阶段协调,最终所有资源管理器要么全部提交,要么全部回滚,最终状态都是一致的

官方解决方案图例如下:

2PC两段提交介绍

优点: 尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。

缺点: 牺牲了可用性,对性能影响较大,不适合高并发高性能场景,如果分布式系统跨接口调用,目前 .NET 界还没有实现方案。