大事务拆分项目应用及系统异步化处理-再看分布式事务_大事务改小事务,-程序员宅基地

技术标签: 一致性原理  MQ异步化  本地事务  分布式事务  

Case1

一、交易还款业务大事务

废话不多说,直接一个金融还款业务创建交易账单case,还款逻辑如下:
1、用户点击还款,发起还款请求
2、服务端接收还款请求,进行还款计划查询校验
3、进行其他还款验证
4、返回用户还款计划,用户接收后,执行还款(调用支付网关等)
5、支付网关通知交易还款结果成功与否
6、交易更新还款账单状态
整个交易还款操作毋庸置疑,必须保证事务一致性,故上述6步操作均包裹在一个大事务中进行。除了大事务包裹导致数据库资源占用之外,月末还款高峰,还款请求密集,db资源响应问题集中凸显。

二、解决方案

1、数据库事务异步化
简言之,将大事务拆分成小事务,小事务间通过MQ等异步机制进行通讯。这就涉及到如何进行事务拆分,事务1成功,肯定影响事务2的执行。例如如果支付网关执行还款成功为事务1,而交易更新状态拆分到事务2中,则就有可能出现,MQ经由丢消息,导致交易未接受支付成功请求从而执行换狂账单状态更新。这就是不合理的事务拆分。应当保证网关支付结果跟最终交易账单状态的原子性。也就是说这两部操作得在一个事务中。
则上面大事务可拆分为
1、用户点击还款,发起还款请求-事务外
2、服务端接收还款请求,进行还款计划查询校验-事务外
3、进行其他还款验证-事务外
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Daybreak1209/article/details/79879174

智能推荐

JSON模块的详述(dumps、loads、dump、load的用法)_json_loadf的含义-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏2次。0 前言如果要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。1 什么是JSON?JSON(JavaScript Object Notation,JS 对象简谱) 是一种轻量级的数据交换格式,易于人阅读和编写。 并且,JSON还定死了字符集必须是UTF-8,表_json_loadf的含义

[10]ESP32+气压计MS5611移植与调试_ms5611 和 esp32-程序员宅基地

文章浏览阅读1.3k次。MS5611-01BA是由压阻传感器和传感器接口组成的的集成电路,主要功能是把测得未得补偿模拟气压值经ADC转换成24位的数字值输出,同时也可以输出一个24位的数字温度值。高度测量最大分辨率10cm。MS5611支持SPI和I2C通信,可以通过上拉PS引脚( Protocol Select)选择I2C协议,下拉则选择SPI协议。MS5611-01BA的I2C地址为111011Cx,..._ms5611 和 esp32

JAVA—— Mybatis高级(进阶)_mybatis 高级-程序员宅基地

文章浏览阅读350次。文章目录一.接口代理方式实现Dao1.1 代理开发方式介绍1.2.编写StudentMapper接口1.3 测试代理方式1.4 源码分析1.5 知识小结二. 动态sql语句2.1 动态sql语句概述2.2 动态 SQL 之<**if>**2.3 动态 SQL 之<**foreach>**2.4 SQL片段抽取2.5 知识小结三. 分页插件3.1 分页插件介绍3.2 分页插件的使用3.3 分页插件的参数获取3.4 分页插件知识小结四.MyBatis的多表操作4.1 多表模型介_mybatis 高级

在.NET Core 中使用Quartz.NET-程序员宅基地

文章浏览阅读1.3k次。Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统。Quartz.NET具有三个主要概念:•job:运行的后台任务•trigger:控制后台任务运行的触..._.net core quartz

MATLAB中feval、class、'function_handle'、isa、strcmp的用法_isafunction_handle-程序员宅基地

文章浏览阅读3.4k次。MATLAB中feval、class、'function_handle'、isa、strcmp的用法strcmp(class(f),'function_handle')_isafunction_handle

SQL与T-SQL的区别-程序员宅基地

文章浏览阅读61次。SQL是Structrued Query Language的缩写,即结构化查询语言。它是负责与ANSI(美国国家标准学会)维护的数据库交互的标准。作为关系数据库的标准语言,它已被众多商用DBMS产品所采用, 使得它已成为关系数据库领域中一个主流语言,不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能. 接下来说一下T-SQL语言:T-SQL是SQL语言的一种版本,且只能..._sql和t-sql的区别是?

随便推点

java colt_高性能Java科学与技术运算库Colt-程序员宅基地

文章浏览阅读552次。在学习《Machine Learning in Action》和《NLTK Natural Language Processing with Python》的过程中,我真切地感受到Numpy库的便捷与强大,线性代数的数据结构与运算封装得浅显易懂。不过Numpy或者Python有两个很致 命的缺点:①弱类型导致我无法看到深层对象中的注释。②运行效率无法满足生产需要。我在想Java平台上是否有比较成熟..._java colt

MySQL使用函数和存储过程实现:向数据表快速插入大量测试数据_mysql用存储过程快速添加数据到表里面-程序员宅基地

文章浏览阅读1.5k次,点赞33次,收藏25次。MySQL使用函数和存储过程实现:向数据表快速插入大量测试数据_mysql用存储过程快速添加数据到表里面

RSA_PKCS1_PADDING加解密遇到的一个坑-程序员宅基地

文章浏览阅读6.2k次,点赞2次,收藏2次。RSA_PKCS1_PADDINGRSA_PKCS1_PADDINGRSA_PKCS1_PADDING是RSA的一种填充模式。在使用该模式加密明文,要求输入的明文长度比RSA密钥模长短至少11个字节。长度如下:输入明文长度:RSA_size(rsa) - 11;加密后的密文长度为:RSA(rsa);用来解密时测相反。输入密文长度:RSA_size(rsa);解密后的明文长度为:RSA(rsa) - 11;若加密输入的明文长度大于RSA_size(rsa) - 11,需要按该长度切割之后分别对_rsa_pkcs1_padding

如何排除掉maven引入的jar包里的某个类_maven排除某个类-程序员宅基地

文章浏览阅读2w次,点赞8次,收藏17次。如何排除掉maven引入的jar包里的某个类我们知道可以使用 <exclude> 来排除掉引入的jar包所依赖的jar包,但是有时候某个类并不是它引入其他jar而导致的,是这个jar本身的,你如何排除呢? 总不能把自身这个jar去掉吧,因为这个jar的其他类还是有用的。比如有如下两个GAV<dependencies> <dependency> <groupId>com.wyf.test</groupId>_maven排除某个类

前端ajax调用java后台接口的方法封装_前端调接口给javatoken-程序员宅基地

文章浏览阅读4.9k次。1、封装ajax的方法var token = window.localStorage.getItem("token") || ''; //后台是否需要token/*ajax请求回调* url:后台接口* type:请求方法* data:传递给后台的参数* async:同步异步的参数(true:异步;false:同步)* callback:成功的回调方法* errorback:失..._前端调接口给javatoken

从马文到AlphaGo AI走过了怎样的70年?-程序员宅基地

文章浏览阅读97次。(原标题:从马文·明斯基到AlphaGo,人工智能走过了怎样的70年?)【编者按】从19世纪中叶人工智能的萌芽时期,到现今人工智能的重生,从马文·明斯基到AlphaGo,历史上发生了哪些激动人心的故事?本文以此铺展人工智能发展近70年来背后发生的故事。作者@沐阳浸月,中科院自动化所复杂系统国家重点实验室研究生,主攻机器人与人工智能。前不久,在人工智能领域发生了两件大事,一个就是是伟..._从马文到alphago 人工智能走过了怎样的70年

推荐文章

热门文章

相关标签