分布式事务是面试经常被问到的一个问题,今天我们分析一下TCC事务
首先我们看一个场景,如下图
有个订单服务生成订单的时候,会调用库存服务,积分服务,仓储服务的接口,库存服务会进行扣减库存,积分服务进行增加积分...仓储服务更新出仓状态
但是,如果我们的库存服务因某种原因宕机,导致库存服务扣减成功,而其他他服务正常更新,那么数据就会有不一致的问题,因此我们在创建订单的时候,就必须保证各个系统要么都成功,要么都失败,所以就有了分布式事务的出现...,
分布式事务有很多,今天我们就说其中一个事务TCC
T(try):一般就是锁定某个资源,设定一个预备类的状态,冻结部分数据,如下图
C(commit),当try阶段都执行成功,这里就是真正进行提交完成...接口,cancel接口
先是调用所有服务的try接口
如果try都正常,TCC事务就进行Confirm接口
如果try某个的服务有异常,TCC事务就会进行回滚操作,调用cancel接口
其中我们可以发现...,如果订单服务挂了,然后重启,那么之前没有执行完的事务如何处理
其实这里TCC框架会记录分布式事务的活动日志,可在磁盘的日志文件中记录,也可以记录到数据库,保存各个事务的运行阶段和状态
还有就是当cancel