不就是个TCC分布式事务,有那么难吗?

本文通过一个电商支付场景,详细解析TCC(Try-Confirm-Cancel)分布式事务的工作原理和实现步骤。从修改订单状态、扣减库存、增加积分到创建出库单,阐述了在Spring Cloud背景下,如何利用TCC确保业务操作一致性。通过Try阶段的预备操作,Confirm阶段的正式执行和Cancel阶段的回滚逻辑,确保分布式事务的完整性和原子性。并介绍了应对服务异常和事务恢复的机制,推荐了国内开源的TCC框架。
摘要由CSDN通过智能技术生成


写在前面
之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了不少文章,还是不知道分布式事务到底怎么回事,在项目里到底如何使用。
所以咱们这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是TCC分布式事务。
业务场景介绍
咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。
那对一个订单支付之后,我们需要做下面的步骤:

  • 更改订单的状态为“已支付”。
  • 扣减商品库存。
  • 给会员增加积分。
  • 创建销售出库单通知仓库发货。

这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。


进一步思考
好,业务场景有了,现在我们要更进一步,实现一个TCC分布式事务的效果。
什么意思呢?也就是说,订单服务-修改订单状态,库存服务-扣减库存,积分服务-增加积分,仓储服务-创建销售出库单。
上述这几个步骤,要么一起成功,要么一起失败,必须是一个整体性的事务。
举个例子,现在订单的状态都修改为“已支付”了,结果库存服务扣减库存失败。那个商品的库存原来是100件,现在卖掉了2件,本来应该是98件了。
结果呢?由于库存服务操作数据库异常,导致库存数量还是100。这不是在坑人么,当然不能允许这种情况发生了!
但是如果你不用TCC分布式事务方案的话,就用个Spring Cloud开发这么一个微服务系统,很有可能会干出这种事儿来。
我们来看看下面的这个图,直观的表达了上述的过程。


所以说,我们有必要使用TCC分布式事务机制来保证各个服务形成一个整体性的事务。
上面那几个步骤,要么全部成功,如果任何一个服务的操作失败了,就全部一起回滚,撤销已经完成的操作。
比如说库存服务要是扣减库存失败了,那么订单服务就得撤销那个修改订单状态的操作,然后得停止执行增加积分和通知出库两个操作。
说了那么多,老规矩,给大家上一张图,大伙儿顺着图来直观的感受一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值