TCC-Transaction 分布式事务

项目地址:https://github.com/changmingxie/tcc-transaction

https://blog.csdn.net/github_38592071/article/details/79576454

https://www.liangzl.com/get-article-detail-525.html

http://www.tianshouzhi.com/api/tutorials/distributed_transaction/388

https://www.cnblogs.com/jajian/p/10014145.html

阿里DTS业务实例:https://tech.antfin.com/docs/2/46886

TCC柔性事务。结合两阶段,最终一致性,补偿性,幂等性的特点。通过中间协调器(数据库、redis等)和各服务tcc三步实现最终一致性。每一步都是通过本地事务保证acid,实际上把一个分布式事务分解成多个本地事务,通过补偿机制实现数据回滚保证最终一致性,由开发人员设计补偿回滚业务代码。

思路:针对每一个服务都有自己的TCC阶段处理。且各服务各步骤都独立启动本地事务执行提交。

try阶段:完成单据创建,状态初始化,各种资源冻结、预留或扣减等操作。(例如:消费方账户扣减,出库方库存扣减预留)
confirm阶段:幂等。所有服务try阶段成功后执行。单据状态更新,完成资源的最后转移或添加。(例如:卖家账户添加,入库方库存添加)
cancel阶段:幂等。任意服务try阶段出现异常时执行。单据状态更新,try阶段冻结或扣减的资源释放或回滚。tcc机制是靠cancel执行回滚。所以回滚代码由开发人员设计。

各个阶段都启动本地事务,相互独立提交。所以一定不能再TRY阶段执行添加操作(如库存、余额、积分等),因为TCC属于柔性最终一致性事务,中间可能出现短暂的数据不一致。若在TRY阶段添加成功后,数据库会立即修改提交本地事务,这时用户就可以使用新添加的资源。但可此时可能最后一个服务的TRY失败,则全部服务执行Cancel。这种情况相当于超发资源。

try阶段任意一个服务发生异常,其他所有服务执行cancel。
cc阶段发生异常,TCC-Transaction系统会重试直到成功。

posted @ 2019-02-10 14:34  sw008  阅读(466)  评论(0编辑  收藏  举报