分布式事务是面试经常被问到的一个问题,今天我们分析一下TCC事务
首先我们看一个场景,如下图
有个订单服务生成订单的时候,会调用库存服务,积分服务,仓储服务的接口,库存服务会进行扣减库存,积分服务进行增加积分...导致库存服务扣减成功,而其他他服务正常更新,那么数据就会有不一致的问题,因此我们在创建订单的时候,就必须保证各个系统要么都成功,要么都失败,所以就有了分布式事务的出现,
分布式事务有很多,今天我们就说其中一个事务TCC...事务的基本操作, 事务中的每一个接口由原来的一个接口,变成了三个接口,分别是try接口,comfirm接口,cancel接口
先是调用所有服务的try接口
如果try都正常,TCC事务就进行Confirm...接口
如果try某个的服务有异常,TCC事务就会进行回滚操作,调用cancel接口
其中我们可以发现,如果订单服务挂了,然后重启,那么之前没有执行完的事务如何处理
其实这里TCC框架会记录分布式事务的活动日志...,可在磁盘的日志文件中记录,也可以记录到数据库,保存各个事务的运行阶段和状态
还有就是当cancel和comfirm执行失败,TCC框架也会根据日志记录和状态进行不断尝试,直到成功.