分布式事务处理方法

4 篇文章 0 订阅

1分布式事务场景

以电商项目为例,项目初始都是单体架构,比如现在需要下单时,需要做的是1创建订单2减库存3增加用户积分,当没有分库时,可以通过本地事务控制数据的一致性,但是以现在的微服务架构时,这3个操作是通过服务调用实现的,无法通过本地事务保证事务的一致性,比如1和2执行成功,3失败了,无法通过本地的transaction回滚,如果保证事务的一致性成为关键。目前有几种流行的做法:比如阿里的seata提供了几种方式,分别为tcc模式,AT模式,sagas模式,现在分别简单记录下原理。

2seata的TCC模式

tcc模式为try confirm cancel模式,最简单的方法为在try方法里提供一种探测方法,比如针对订单模块:
在try里创建一笔不可见的订单,
在confirm里为把订单置为有效的代码段,
在cancel里写删除这条订单的代码;

针对减库存模块:
在try里创建一笔冻结的库存
在confirm里为把冻结的库存减掉
在cancel里把冻结的库存还原到原来的库存

针对用户积分模块:
在try里创建一笔带加入的积分
在confirm里为把积分加给用户
在cancel里删除带加入积分
在这种情况下,当3增加用户积分都成功时,1和2分别执行confirm里的逻辑;如果3失败了,则1和2分别执行cancel逻辑。
用阿里的seata的tcc模式,只需要提供@LocalTCC注解就行了,在接口里提供commit和rollback方法就行了,不用自己判断成功或失败调用commit或rollback,组件会自己判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值