关于分布式事务

关于分布式事务

分布式事务产生的背景

在微服务环境下,因为会根据不同的业务会拆分成不同的服务,比如会员服务、订单服务、商品服务等,让专业的人做专业的事情,每个服务都有自己独立的数据库,并且是独立运行,互不影响

比如:

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

 

传统项目中:多数据源就是在一个项目中,有两个jdbc连接

 环境搭建: 分包或者注解方式

 

案例:

在电商系统中,下单和扣库存如何保持一致?   
比如:用户先下单后,扣库存失败,那么将会导致超卖;如果下单不成功,扣库存成功,那么会导致少卖。这两种情况都会导致运营成本增加,在严重情况下需要赔付。
订单服务和库存服务                                              是个RPC远程调用过程
 

订单与库存服务不在同一个JVM(分布式),相互的数据库都是独立的,每个独立的数据源中都有自己独立的事务,该事务成为本地事务。本地事务有效范围在同一个jdbc里面(同一个事务管理器 ) 

 

 

下单失败了 但是库存成功了 怎么个回滚法

同理 下单成功 库存失败了呢!这个不属于分布式事务!  拿到错误的返回结果 进行处理就ok啦

我在调用接口时候 掉完了 然后我错了   

 

 因为订单服务和库存服务不在同一个jvm中,数据库都是独立的。每个独立的数据库源都有自己独立事务,该事务成为本地事务。

 本地数据源有效范围 : 同一个jdbc连接     或者同一个事务管理器

 而多数据源 不同的 多个jdbc连接

 

每个独立的事务,核心思想 全局事务 一个协调者

 

项目中 两个不同的jdbc,连接相同的数据库。 两个jdbc事务不能相互关联!!

 上图中 的结果是 下单失败了(事务回滚)  但是库存却减少了!

 

下面这种情况:

 

 

 不是分布式事务问题, invenReduction() 出错  调用时候 会获取到错误的返回信息 执行相应的业务逻辑  不会产生分布式事务问题 这种场景 人为可控 没问题 

 

题外话: 人工补偿   自动补偿(MQ)

 

 

传统项目一般不会出现 分布式事务问题,但是多数据源情况会有可能产生!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值