分布式事务的产生

产生原因

在微服务环境下,因为会根据不同的业务会拆分成不同的服务,比如会员服务,订单服务等,每个服务都有自己独立的数据库,互不影响。

服务与服务之间通讯采用rpc远程调用技术,但是每个服务中都有自己独立的数据源,即自己独立的本地事务。两个服务通讯的时候,两个本地事务互不影响,从而出现分布式事务产生的原因。

 

传统项目一般不会产生分布式事务,但是在项目中如果应用了多数据源方式,也会产生分布式事务。

 

 

例子

用户先下单后,扣库存失败,那么将会导致超卖;如果下单不成功,扣库存成功,那么会导致少卖。这两种情况都会导致运营成本增加,在严重情况下需要赔付。

                        下单和扣库存

订单服务------------------------------------>库存服务

下列是伪代码

订单服务添加订单

订单服务调用库存服务减库存

int i = 1/0;     程序报错

这种情况下订单服务事务回滚,将添加的订单回滚了,但是由于库存服务是另一个独立的事务,是回滚不了的,此时就导致了超卖。

 

另一种情况是订单服务程序没报错,库存服务程序报错了,这种情况下库存服务会返回给订单服务一个错误码,订单服务可以根据这个错误码进行手动抛异常进行回滚,不属于分布式事务问题。

下列是伪代码

int i = stock.inventReduce();   //订单服务调用库存服务减库存,此时库存服务出错了,返回0,代表执行失败

if(i==0){

      throw new Exception();   //手动抛出异常进行事务回滚

}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值