TCC分布式事务的实现原理

本文深入探讨了TCC分布式事务机制在电商项目中的应用,详细介绍了Try-Confirm-Cancel三个阶段的实现细节,以及如何利用TCC事务框架保证数据一致性。
业务场景介绍

一个电商项目,有订单系统,积分系统,库存系统,仓储系统,每一个微服务都有自己独立的数据库,并且有公共的数据库,分布式事务就是跨数据库完成事务,保证数据的ACID。
在这里插入图片描述
当订单支付之后,需要做下面的步骤:

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

根据业务场景实现一个 TCC 分布式事务的效果。
[1] 订单服务-修改订单状态,
[2] 库存服务-扣减库存,
[3] 积分服务-增加积分,
[4] 仓储服务-创建销售出库单。
上述这几个步骤,必须是一个整体性的事务,要么都成功要么都失败。
举个例子,现在订单的状态都修改为“已支付”了,结果库存服务扣减库存失败。那个商品的库存原来是 100 件,现在卖掉了 2 件,本来应该是 98 件了。但是库存异常依然是100件,这种情况是不允许发生的。
根据下图直观表达上述例子:
在这里插入图片描述
所以说,我们有必要使用 TCC 分布式事务机制来保证各个服务形成一个整体性的事务。
上面那几个步骤,要么全部成功,如果任何一个服务的操作失败了,就全部一起回滚,撤销已经完成的操作。
比如说库存服务要是扣减库存失败了,那么订单服务就得撤销那个修改订单状态的操作,然后得停止执行增加积分和通知出库两个操作。
在这里插入图片描述

落地实现 TCC 分布式事务
TCC 实现阶段一:Try

首先,订单服务那儿,它的代码大致来说应该是这样子的:

public class OrderService {
   
   

    // 库存服务
    @Autowired
    private InventoryService inventoryService;

    // 积分服务
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值