解决分布式事务有5中解决方案:
- XA方案(两阶段提交方案);
- TCC方案;
- 本地消息表;
- 可靠消息最终一致方案;
- 最大努力通知方案。
一、XA方案/两阶段提交方案
这个方案中有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问各个资源管理器准备好两吗?如果每个资源管理器都回答好了,那就开始正式提交事务;如果有一个资源管理器回答不ok,那就开始回滚事务。
这种方案比较适合简单应用,跨多个库的分布式事务,而且依赖数据库层面的复杂的事务,效率很低,绝对不适合高并发的事务。
二、TCC方案
TCC全称:Try、Confirm、Cancel。
Try阶段:这个阶段说的是对各个服务的资源做检测以及对资源进行锁定或者预留;
Confirm阶段:这个阶段是在各个服务中执行实际对操作;
Cancel阶段:如果任何一个服务的业务方法执行出错,就需要将那些已经执行成功的业务进行回滚。
这种方案的执行场景是跟支付、交易相关的,保证要么事务全部成功,要么事务全部自动回滚。
三、本地消息表
这个方案大致流程是这样的:
- A系统在本地执行一个事务的同时,插入一条数据到消息表;
- 接着将这个消息发送到MQ中去;
- B系统接到消息后,在一个事务里,