目前使用较多的三种分布式事务解决方案:
一、TCC事务补偿型解决方案
TCC分为三个阶段TRYING-CONFIRMING-CANCELING。每个阶段做不同的处理。
TRYING 阶段主要是对业务系统做检测及资源预留
CONFIRMING 阶段主要是对业务系统做确认提交,TRYING阶段执行成功并开始执行CONFIRMING阶段时,默认 CONFIRMING阶段是不会出错的。即:只要TRYING成功,CONFIRMING一定成功。
CANCELING 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
以上所有的操作需要满足幂等性,幂等性的实现方式可以是:
1、通过唯一键值做处理,即每次调用的时候传入唯一键值,通过唯一键值判断业务是否被操作,如果已被操作,则不再重复操作
2、通过状态机处理,给业务数据设置状态,通过业务状态判断是否需要重复执行
二、结合MQ消息中间件实现的可靠消息最终一致性解决方案
可靠消息最终一致性,需要业务系统结合MQ消息中间件实现,在实现过程中需要保证消息的成功发送及成功消费。即需要通过业务系统控制MQ的消息状态。
三、最大努力通知型解决方案
按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对。这种方案主要用在与第三方系统通讯时,比如:调用微信或支付宝支付后的支付结果通知。这种方案也是结合MQ进行实现,例如:通过MQ发送http请求,设置最大通知次数。达到通知次数后即不再通知。