美文网首页
【JAVA】分布式事务

【JAVA】分布式事务

作者: Y了个J | 来源:发表于2020-07-21 10:12 被阅读0次
微信图片_20201124114812.png 微信图片_20201124114941.png 微信图片_20201124115021.png 微信图片_20201124115116.png

分布式事务的解决方案(介绍其中三种)
1.两阶段提交协议(2PC)
2.事务补偿(TCC)
3.消息队列实现最终一致

TCC (业务补偿和日志补偿)
业务补偿
try阶段预扣库存,commit阶段真正扣库存,cancel阶段恢复预扣的库存
日志补偿
先记日志,commit时删除日志,cancel时根据日志回滚

场景一:
库存数量与订单数量一致性,采用补偿型+最大努力通知型
1.先减库存,库存减成功后;
2.调用下单服务;
3.下单成功,两事务均提交完成;
4.下单失败,库存回滚,库存回滚失败,则放入消息服务(延时消息队列)分阶段定时重试,努力重试保证库存服务正常后成功回滚。

场景二:
订单信息、支付信息、充值信息三者之间的一致性,采用异步确保型的原因是,整个业务链路太长且跨不同的机房系统,网络延迟较高,业务方面恰好不需要非常高的实时性,所以采用小事务+异步通知,目前正常情况下用户从下单到完成支付到流量到账平均为1-5分钟左右:
1.下单成功即订单服务创建订单成功并发送支付请求到支付网关系统(订单状态-待支付,超过1小时未支付则流转为超时未付撤销,此处用到了RocketMQ的延时消费恰好实现定时器业务场景)。
2.返回支付页面,用户在支付交易系统完成支付业务流程,支付网关异步通知流量中心,流量中心接收到支付成功状态后修改订单状态-支付成功,并给支付网关返回成功结果。
3.流量中心修改完订单状态后,调用消息服务将直充业务放入消息队列,对直充业务进行解耦(原因是直充需要调用31省移动CRM系统,此链路过长,且部分省CRM系统耗时非常大,每个省的处理能力不同,经常出现20秒以上的超时,因此要考虑部分超时较高的省份拖垮系统,进行业务的削峰填谷);
4.当直充成功时,修改订单状态-已完成;
5.当直充失败时(移动特性,例如:直充时正好用户销户或者停机了),修改订单状态为待退款,并调用支付网关系统的退款接口,退款成功后支付网关异步通知流量中心,流量中心修改订单状态为-退款成功;
6.当直充超时时,调用定时任务服务进行超时重试机制(第一次重试在10分钟后执行、第二次在30分钟后、第三次…..),直到最大超时重试次数后还得不到直充结果,订单状态会卡在支付成功状态,依赖T+1对账稽核流程保证最终一致性,订单状态根据对账结果流转为:已完成或待退款–>退款成功。

参考:
https://blog.csdn.net/oldshaui/article/details/88743085
https://www.cnblogs.com/bluemiaomiao/p/11216380.html
https://www.skypyb.com/2019/11/jishu/1171/

相关文章

  • 分布式事务实现的几种方案

    参考[Java复习] 分布式事务 Part 2java分布式事务,及解决方案 1.两阶段提交方案/XA方案   这...

  • hibernate与mybatis的区别与联系

    JTA(java transaction API)java事务接口为j2ee提供了分布式事务服务,主要用途是为分布...

  • 分布式事务与分布式锁

    一、分布式事务 什么事分布式事务 分布式事务就是指事务的资源分别位于不同的分布式系统的不同节点之上的事务。 分布式...

  • 微服务分布式事务--破局

    微服务架构下分布式事务设计实战 商品 订单 支付 分布式事务->长事务本地事务->短事务 分布式事务: 比如 下...

  • 分布式事务

    目录 分布式事务解决方案 长事务: saga 短事务: 设计的时候尽量短事务,能不用分布式事务尽量不用,分布式事务...

  • 解决 Spring + atomikos java.lang.

    使用Atomikos构建分布式事务,部署到服务器上报错 java.lang.illegalstateexcepti...

  • 分布式系统02——分布式事务解决方案

    在上一篇文章中,我们已经了解了分布式事务的定义,本文我们将了解常用的分布式事务解决方案。关注我的公众号「Java面...

  • 【JAVA】分布式事务

    分布式事务的解决方案(介绍其中三种)1.两阶段提交协议(2PC)2.事务补偿(TCC)3.消息队列实现最终一致 T...

  • 【JAVA】分布式事务

    数据库事务要满足几个要求:ACIDAtomic(原子性) 事务必须是原子的工作单元Consistent(一...

  • ATOMIKOS+JTA分布式事务记录

    ATOMIKOS+JTA是用来分布式事务的中间件,那么什么是分布式事务呢? 事务,分为单机事务,分布式事务;单机事...

网友评论

      本文标题:【JAVA】分布式事务

      本文链接:https://www.haomeiwen.com/subject/ytnbkktx.html