分布式分布式

分布式事务之TCC

2019-06-02  本文已影响124人  康俊1024

业务场景介绍

假设现在有一个电商系统,里面有一个支付订单的场景。对一个订单支付之后,我们需要做下面的步骤:

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


    订单支付业务.png

业务场景分析

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

落地实现TCC分布式事务

TCC实现阶段一:Try

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


    订单服务业务逻辑.jpg
  2. 增加Try逻辑

TCC实现阶段二:Confirm

TCC实现阶段三:Cancel

举个例子:在Try阶段,比如积分服务吧,他执行出错了,此时会怎么样?

总结与思考

总结一下,你要玩儿TCC分布式事务的话:

  1. 首先需要选择某种TCC分布式事务框架,各个服务里就会有这个TCC分布式事务框架在运行。
  2. 然后你原本的一个接口,要改造为3个逻辑,Try-Confirm-Cancel。
  1. 某个服务的数据库宕机了
  2. 某个服务自己挂了
  3. 那个服务的redis、elasticsearch、MQ等基础设施故障了
  4. 某些资源不足了,比如说库存不够这些

终极大招

上一篇 下一篇

猜你喜欢

热点阅读