定义:在分布式系统上,保障不同服务的事务的原子性。即同时成功或失败
解决方案:
1、两阶段提交(Two-phase Commit,2PC)。
引入“第三方”,协调各事务参与者进行如下动作:首先大家分别走99步,成功了?ok,那大家再一起走最后一步。根据经验最后一步都能成功。
2、补偿性事务(try,cofirm,commit, TCC)
事务有三个参与者,ABC三个服务。A执行完B执行,B执行完C执行。如果C执行失败,则进行重试和补偿。如果重试后依旧失败,则调用B、A的回滚方法统一回滚
3、本地消息表
引入MQ第三方。ABC三个服务,A执行成功后记录在本地并生产消息给MQ,BC收到消息也进行事务执行。
1、2相比,此方案不可靠,没有回滚机制(或并没有详细说明),需要另外实现。相当于2方案的改进版。
4、MQ事务
相当于方案1的升级版,MQ进行2阶段协调提交。
总结:目前我司采用方案2,可保障最终一致性,开发复杂度低。