Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构的分布式事务解决方案

微服务架构的分布式事务解决方案

原创
作者头像
吴生
修改于 2017-08-25 01:58:00
修改于 2017-08-25 01:58:00
2.8K0
举报
文章被收录于专栏:吴生的专栏吴生的专栏

分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出!

下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!

如上图所示,假设三大参与平台(电商平台、支付平台、银行)的系统都做了分布式系统架构拆分,按上数中的流程步骤进行分析:

1、电商平台中创建订单:预留库存、预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据;

2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行,此时不会有分布式事务问题,因为还不会跨服务改数据;

3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);

4、支付平台收到银行扣款结果:更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等,此时也会有分布式事务问题;

5、电商平台收到支付平台的支付结果:更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等,系统内部各服务间调用也会遇到分布式事问题;

如上图,支付平台收到银行扣款结果后的内部处理流程:

1、支付平台的支付网关对银行通知结果进行校验,然后调用支付订单服务执行支付订单处理;

2、支付订单服务根据银行扣款结果更改支付订单状态;

3、调用资金账户服务给电商平台的商户账户加款(实际过程中可能还会有各种的成本计费;如果是余额支付,还可能是同时从用户账户扣款,给商户账户加款);

4、调用积分服务给用户积分账户增加积分;

5、调用会计服务向会计(财务)系统写进交易原始凭证生成会计分录;

6、调用通知服务将支付处理结果通知电商平台;

如上图,把支付系统中的银行扣款成功回调处理流程提取出来,对应的分布式事务问题的代码场景:

代码语言:txt
AI代码解释
复制
/** 支付订单处理 **/
@Transactional(rollbackFor = Exception.class)
public void completeOrder() {
orderDao.update();  // 订单服务本地更新订单状态
accountService.update();  // 调用资金账户服务给资金帐户加款
pointService.update();  // 调用积分服务给积分帐户增加积分
accountingService.insert();  // 调用会计服务向会计系统写入会计原始凭证
merchantNotifyService.notify();  // 调用商户通知服务向商户发送支付结果通知
}

本地事务控制还可行吗?

以上分布式事务问题,需要多种分布式事务解决方案来进行处理。

订单处理:本地事务

资金账户加款、积分账户增加积分:TCC型事务(或两阶段提交型事务),实时性要求比较高,数据必须可靠。

会计记账:异步确保型事务(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)

商户通知:最大努力通知型事务(按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)

龙果支付系统(开源版)

开源中国地址:http://www.oschina.net/p/roncoo-pay

http://git.oschina.net/roncoocom/roncoo-pay

GitHub地址:https://github.com/roncoo/roncoo-pay

在线支付演示:http://demo.pay.roncoo.com

后台运营管理:http://demo.pay.roncoo.com/boss

龙果开源支付系统业务介绍与部署

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
再论分布式事务:从理论到实践
本文补充一种分布式事务解决方法:Best Effort. Best Effort   best effort即尽最大努力交付,主要用于在这样一种场景:不同的服务平台之间的事务性保证。比如我们在电商购物,使用支付宝支付;又比如玩网游的时候,通过App Store充值。拿购物为例,电商平台与支付平台是相互独立的,隶属于不同的公司,即使是同一个公司也很可能是独立的部门。因此,这两个平台是不可能使用同一套分布式事务框架的,2PC不行,tcc也不行,异步消息也不行。   其实在上面电商平台与支付平台的例子中,涉及到
用户1263954
2018/01/30
1K0
再论分布式事务:从理论到实践
分布式事务
针对一些特定的场景、核心的流程 数据的准确性和可靠性尤其的重要如:订单、支付、入账 etc.
Freedom123
2024/03/29
1400
分布式事务
一文理解分布式事务的解决方案
单体数据库不涉及网络交互,所以在多表之间实现事务是比较简单的,这种事务称之为本地事务。
全菜工程师小辉
2021/07/23
7600
Java微服务系统分布式事务解决方案
可容忍一段时间的数据不一致,最终通过超时终止,调度补偿等方式,实现数据的最终状态一致性。
JavaEdge
2022/11/30
5670
Java微服务系统分布式事务解决方案
分布式事务如何解决?
分布式事务的由来,当两个系统一个负责扣款 ,一个负责发货,但是扣款的系统出现异常,扣款失败,货还在正常发送,这时候分布式事务就出现了。
用户9919783
2022/12/14
5150
Java微服务系统分布式事务解决方案
分布式系统数据的强一致性、弱一致性和最终一致性可以通过Quorum NRW算法分析。
JavaEdge
2019/07/12
2.3K0
Java微服务系统分布式事务解决方案
微服务架构下分布式事务解决方案
在微服务架构中,随着服务的逐步拆分,数据库私有已经成为共识,这也导致所面临的分布式事务问题成为微服务落地过程中一个非常难以逾越的障碍,但是目前尚没有一个完整通用的解决方案。
BUG弄潮儿
2021/03/04
1.1K0
聊聊微服务架构及分布式事务解决方案!
分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。
Java技术栈
2018/07/30
6480
聊聊微服务架构及分布式事务解决方案!
Java微服务下的分布式事务介绍及其解决方案
2 用户支付完成会将支付状态及订单状态保存在订单数据库中,由订单服务去维护订单数据库。而学生选课信息在学习中心数据库,由学习服务去维护学习中心数据库的信息。下图是系统结构图:
全栈程序员站长
2022/07/01
4230
Java微服务下的分布式事务介绍及其解决方案
我说分布式事务之TCC
接触分布式相关的开发已经有一段时间了,自然绕不开分布式事务。从本文开始,我将带领大家了解常见的分布式事务的解决方案,深入原理,浅出实践,让我们在今后的开发中对分布式事务不再畏惧。
程序猿DD
2018/12/28
1.4K0
分布式事务专题
完成某件事情,可能有多个参与者需要执行多个步骤,最终多个步骤要么全部成功,要么全部失败。
botkenni
2023/03/01
5700
分布式事务专题
分布式事务解决方案
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。一个大的操作由 N
ruochen
2021/11/25
4350
你还不懂分布式事务吗?
当系统是分布式系统,并且数据库有分库分表的情况下,此时会产生分布式事务相关的问题。
Liusy
2020/08/31
4310
【分布式事务】高并发下分布式事务的解决方案
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
用户5640963
2019/07/26
8870
【分布式事务】高并发下分布式事务的解决方案
关于分布式事务的理解
想象一下,当最后一张火车票同时被两个人购买,去检票口检票时被告知车票无效,这可以接受吗?
新亮
2021/08/13
4820
关于分布式事务的理解
分布式事务就是这么简单之RocketMQ解决方案
​ 现在比较流行的分布式架构而言,它虽然带来一系列好处,比如支持高并发,高可用集群。同时它也带来一系列的挑战,今天我们将的就是其中一种挑战 - 分布式事务。
yukong
2019/07/28
3.4K0
分布式事务开山之作——《深入理解分布式事务:原理与实战》草图曝光!!
今天,咱们就暂时不聊【精通高并发系列】了,今天插播一下分布式事务,为啥?因为冰河联合猫大人共同创作的分布式事务领域的开山之作——《深入理解分布式事务:原理与实战》一书正式出版了,于2021年10月20日开始在当当预售,当天即登上当当新书榜第一的位置!
冰河
2021/10/24
8330
分布式事务开山之作——《深入理解分布式事务:原理与实战》草图曝光!!
聊一聊分布式事务的解决方案
分布式事务是分布式系统中非常重要的一部分,最典型的例子是银行转账和扣款,A 和 B 的账户信息在不同的服务器上,A 给 B 转账 100 元,要完成这个操作,需要两个步骤,从 A 的账户上扣款,以及在 B 的账户上增加金额,两个步骤必须全部执行成功;否则如果有一个失败,那么另一个操作也不能执行。
小熊学Java
2023/09/06
2280
聊一聊分布式事务的解决方案
分布式事务的实现方法及替代方案
图的上半是两阶段提交成功的演示, 下半是两阶段提交失败的演示. 关于两阶段提交网上有很多经典的讲解, 这里就不细说了
java思维导图
2018/07/26
1K0
分布式事务的实现方法及替代方案
再谈分布式事务
三年前,我写了第一篇和分布式事务相关的文章再有人问你分布式事务,把这篇扔给他,后面陆续也写了一些和分布式事务相关的文章:
用户5397975
2022/02/24
4230
再谈分布式事务
相关推荐
再论分布式事务:从理论到实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档