目前,业内解决分布式事务问题,主要采用如下两套方案:
- 基于TCC的事务框架
概念:TCC的全称是(Try-Confirm-Cancel)。TCC又可以被称为两阶段补偿事务,第一阶段try只是预留资源,第二阶段要明确的告诉服务提供者,这个资源你到底要不要,对应第二阶段的confirm/cancel,用来清除第一阶段的影响,所以叫补偿型事务。
- 消息队列
一致性:额外增加一张事件表,再起一个定时程序扫描事件表,发现一个状态为'UNFINISHED'的事件,就进行封装为消息,发送到消息中间件,然后将状态改为'FINISHED'。
关于两种方案的选型,如果是同步调用A服务、B服务,要么一起成功、要么一起失败,这时候就应该选择TCC事务框架,如果是异步调用,即调用A服务后,不管B服务的执行结果就直接返回,采用消息队列更适合。
具体可参考下面两篇博客:
利用消息队列处理分布式事务
分布式事务之TCC事务模型