什么是两阶段提交?
两阶段提交协议,简称2PC,全称是two-phase commit protocol,2PC意思就是1次事务分为2个阶段;是非常经典的强一致性、中心化的原子提交协议
中心化是指协议中有2种角色∶一个中心协调者和N个参与者。协调者∶ TM事务管理器,负责协调和管理事务。
参与者∶RM资源管理器,可以理解为mysql,或某个微服务(订单服务、库存服务等等)
举例∶两阶段提交-应用场景
2阶段提交的学习案例,我们采用用户下单使用余额+红包支付来2阶段提交的具体应用。
假设用户下单操作来自3个系统下单系统、资金账户系统、红包账户系统,下单成功后,支付需要同时调用资金账户服务和红包服务完成支付
假设购买商品100元,使用账户红包10元,余额90元,确认支付。
1.两阶段事务提交
2阶段提交,意识就是1次事务分为2个阶段。
如上图∶第一阶段,是事务准备
协调者TM询问所有参与者是否可以提交事务?
如果参与者的事务操作实际执行成功,则返回一个"同意"消息。如果参与者的事务操作实际执行失败,则返回一个"终止"消息。第二阶段,事务提交
协调者根据所有参与者的应答结果判定是否事务可以全局提交的决定,并通知所有参与者执行该决定如果在第一阶段所有参与者都同意提交,则协调者让所有参与者都提交事务(如上图)。如果在第一阶段其中某个参与者终止提交,则协调者让所有参与者都回滚事务。
2.两阶段事务回滚
如果任一参与者在第一阶段响应消息为"终止",或响应超时;协调者向所有参与者发送"回滚操作"的请求。然后参与者向协调者发送"回滚完成"的消息。