业务场景介绍
一个电商项目,有订单系统,积分系统,库存系统,仓储系统,每一个微服务都有自己独立的数据库,并且有公共的数据库,分布式事务就是跨数据库完成事务,保证数据的ACID。

当订单支付之后,需要做下面的步骤:
- 更改订单的状态为“已支付”
- 扣减商品库存
- 给会员增加积分
- 创建销售出库单通知仓库发货
进一步思考
根据业务场景实现一个 TCC 分布式事务的效果。
[1] 订单服务-修改订单状态,
[2] 库存服务-扣减库存,
[3] 积分服务-增加积分,
[4] 仓储服务-创建销售出库单。
上述这几个步骤,必须是一个整体性的事务,要么都成功要么都失败。
举个例子,现在订单的状态都修改为“已支付”了,结果库存服务扣减库存失败。那个商品的库存原来是 100 件,现在卖掉了 2 件,本来应该是 98 件了。但是库存异常依然是100件,这种情况是不允许发生的。
根据下图直观表达上述例子:

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

落地实现 TCC 分布式事务
TCC 实现阶段一:Try
首先,订单服务那儿,它的代码大致来说应该是这样子的:
public class OrderService {
// 库存服务
@Autowired
private InventoryService inventoryService;
// 积分服务

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

被折叠的 条评论
为什么被折叠?



