微服务架构的分布式事务解决方案
分布式系统架构中,分布式事务问题是一个绕不过去的挑战。而微服务架构的流行,让分布式事问题日益突出!
下面我们以电商购物支付流程中,在各大参与者系统中可能会遇到分布式事务问题的场景进行详细的分析!
如上图所示,假设三大参与平台(电商平台、支付平台、银行)的系统都做了分布式系统架构拆分,按上数中的流程步骤进行分析:
1、电商平台中创建订单:预留库存、预扣减积分、锁定优惠券,此时电商平台内各服务间会有分布式事务问题,因为此时已经要跨多个内部服务修改数据;
2、支付平台中创建支付订单(选银行卡支付):查询账户、查询限制规则,符合条件的就创建支付订单并跳转银行,此时不会有分布式事务问题,因为还不会跨服务改数据;
3、银行平台中创建交易订单:查找账户、创建交易记录、判断账户余额并扣款、增加积分、通知支付平台,此时也会有分布式事务问题(如果是服务化架构的话);
4、支付平台收到银行扣款结果:更改订单状态、给账户加款、给积分帐户增加积分、生成会计分录、通知电商平台等,此时也会有分布式事务问题;
5、电商平台收到支付平台的支付结果:更改订单状态、扣减库存、扣减积分、使用优惠券、增加消费积分等,系统内部各服务间调用也会遇到分布式事问题;
如上图,支付平台收到银行扣款结果后的内部处理流程:
1、支付平台的支付网关对银行通知结果进行校验,然后调用支付订单服务执行支付订单处理;
2、支付订单服务根据银行扣款结果更改支付订单状态;
3、调用资金账户服务给电商平台的商户账户加款(实际过程中可能还会有各种的成本计费;如果是余额支付,还可能是同时从用户账户扣款,给商户账户加款);
4、调用积分服务给用户积分账户增加积分;
5、调用会计服务向会计(财务)系统写进交易原始凭证生成会计分录;
6、调用通知服务将支付处理结果通知电商平台;
如上图,把支付系统中的银行扣款成功回调处理流程提取出来,对应的分布式事务问题的代码场景:
/ 支付订单处理 /
@Transactional(rollbackFor = Exception.class)
public void completeOrder() {
orderDao.update(); // 订单服务本地更新订单状态
accountService.update(); // 调用资金账户服务给资金帐户加款
pointService.update(); // 调用积分服务给积分帐户增加积分
accountingService.insert(); // 调用会计服务向会计系统写入会计原始凭证
merchantNotifyService.notify(); // 调用商户通知服务向商户发送支付结果通知
}
本地事务控制还可行吗?
以上分布式事务问题,需要多种分布式事务解决方案来进行处理。
订单处理:本地事务
资金账户加款、积分账户增加积分:TCC型事务(或两阶段提交型事务),实时性要求比较高,数据必须可靠。
会计记账:异步确保型事务(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)
商户通知:最大努力通知型事务(按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大数据对网络运维意味着什么?
2016年对于SDN来说无疑是利好的一年,在金融、电信、互联网等行业SDN产品和解决方案开始规模化部署,许多传统行业对于SDN的需求也初现端倪。《2016~2017年中国SDN市场发展状况白皮书》显示,2016年中国SDN软件市场(主要指SDN控制器及相关的软件解决方案与服务)规模达到了7.2亿元,比2015年增长30.9%,预计到2021年,市场规模将达到46.7亿元。同时,白皮书也指出了企业传统网络架构面临的四大难题。 难以满足业务灵活部署的需求 难以满足业务资源整合的需求 难以满足场景化的需求 难以满足新的运维需求 在讨论运维难题的时候,分析师认为传统运维方式无法对整个网络的流量、设备以及业务实现集中管控、统一编排。造成这个问题的原因除了网络架构的变迁,不容忽视的一点是,现在网络中的数据量实在是太大了。软件技术的发展支撑了更多智能设备的接入。今天我们不断地从各种源头搜集和存储网络交易、社交媒体动态、移动设备以及各类不知道名字的自动化传感器产生的数据。 在这种情况下,爆炸式增长的数据的存储和计算需求促使存储硬件、网络基础设施以及处理海量数据的计算方法不断改进。传统运维从只对网络基础...
- 下一篇
数据中心IT技术的五大发展趋势
种种迹象表明,2016年将是数据中心IT技术面临许多挑战的一年。数据中心将引进颠覆性技术,计算能力将继续呈指数增长,而企业将需要迅速响应快速变化的需求,与此同时,还要求资源和高效率保持不变。 而面对这些挑战,可以预测数据中心的IT技术将在2016年出现这些变化: (1)物联网技术 通过将智能技术应用到数据中心,数据中心设施管理人员可以监测和跟踪组件和环境测量的实时状态,以保持操作顺畅。用于测量温度、湿度和电力的传感器将与网络设备的监控相结合,可以帮助数据中心的正常运行时间保持一个较高的水平,并降低资本和运营支出。数据中心将提供更多的平台,包括从物联网中整合的来自许多不同来源的数据,以保持数据中心的计算设施的最佳运作能力。 (2)Hyperconvergence系统 Hyperconverged系统将关键IT系统组件(如存储、网络和计算)汇集在一个盒子中,或在一个系统中。这是通过一个软件层管理,使数据中心基础设施发挥更大的作用的系统。业务需求推动基础设施的发展,并简化IT部门流程。而虚拟化将成为hyperconvergence发展的驱动力,特别是SAN存储虚拟化需要虚拟化存储层和网络层,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主