mysql 事务补偿_分布式事务之消息补偿解决方案
一、数据库本地事务
先看看数据库事务的定义:单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行
这个比较容易理解,操作过数据库的一般都懂,既是业务需求涉及到多个数据表操作的时候,需要用到事务
要么一起更新,要么一起不更新,不会出现只更新了部分数据表的情况,下边看看数据库事务的使用
上实例在小型项目中一般是问题不大的,因为小型项目一般是单机系统,数据库、Web服务大都在一台服务器上,甚至可能只有一个数据库文件,
这种情况下使用本地事务没有一点问题;
但是本地事务有很大的缺陷,因为开启事务一般是锁表的,事务执行期间会一直锁着,其他的操作一般都要排队等待,对性能要求比较高的系统是不能忍受的。
特别是涉及改动不同数据库的操作,这会造成跨库事务,性能更加低
如果还涉及到不在同一台服务器、甚至不同网段部署的数据库,那本地事务简直是系统运行的灾难,是首先需要丢弃的解决方案。
那如果遇到上述情况,该怎么做呢,这就涉及到分布式事务了
二、分段式事务的补偿机制
如果有海量数据需要处理、或者要求高并发请求的话,同步的事务机制已经是不现实的了,这种情况下必须采用异步事务机制,既分段式的事务
分段式事务一般做法就是把需求任务分段式地完成,通过事务补偿机制来保证业务最终执行成功,补偿机制一般可以归类为2种:
1 )定时任务补偿:
通过定时任务去跟进后续任务,根据不同的状态表确定下一步的操作,从而保证业务最终执行成功,
这种办法可能会涉及到很多的后台服务,维护起来也会比较麻烦,这是应该是早期比较流行的做法
2) 消息补偿:
通过消息中间件触发下一段任务,既通过实时消息通知下一段任务开始执行,执行完毕后的消息回发通知来保证业务最终完成;
当然这也是异步进行的,但是能保证数据最终的完整性、一致性,也是近几年比较热门的做法
定时任务补偿就不说了,这篇文章我们来讨论一下通过消息补偿来完成分布式事务的一般做法
三、分布式事务之消息补偿
0)我们以简单的产品下单场景来说明,(不要较真哈)
1)先来看看分布式异步事务处理流程示意图,APP1与APP2需要互相订阅对方消息
2)首先看数据库,2个,一个库存库,一个已下单成功的库
3)项目架构Demo
数据底层访问使用的是Dapper、使用redis作为消息中间件
4)实体层代码
5)服务接口层代码
6)库存、消息通知
7)下单、下单成功消息
8)下单减库存测试
9)下单成功及消息回发测试
10)好了,到了最后检验成果的时候了
先打开Demo.Sell.App.exe、然后打开Demo.Reserve.App.exe
mysql 事务补偿_分布式事务之消息补偿解决方案相关推荐
- java tcc事务 例子_分布式事务之TCC事务模型
正文 我们先套一个业务场景进去,如下图所示 那页面点了支付按钮,调用支付服务,那我们后台要实现下面三个步骤 [1] 订单服务-修改订单状态 [2] 账户服务-扣减金钱 [3] 库存服务-扣减库存 达到 ...
- mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)
浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下.1. WCF分布式事务例子这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...
- mysql分布式事务wcf_WCF系列_分布式事务(下)
1.WCF分布式事务例子 这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B的相应账户的资金就增加多少. 系统A机器上有数据库AccountA, ...
- 事务控制 新增后修改_分布式事务科普(初识篇)
点击上方"IT牧场",选择"设为星标" 技术干货每日送达! <分布式事务科普>是我在YQ期间整理的一篇科普型文章,内容共计两万五千字左右,应该算是涵 ...
- ole db 访问接口 sqlncli 无法启动分布式事务_分布式事务,看这篇就够了
0. 前言 1. 单数据源事务 & 多数据源事务 2. 常见分布式事务解决方案 2.1. 分布式事务模型 2.2. 二将军问题和幂等性 2.3. 两阶段提交(2PC) & 三阶段提交( ...
- 分布式系统漫谈【拾】_分布式事务一致性:阿里方案
上篇文章:分布式系统漫谈[玖]_分布式事务一致性:协议支持 其实对于生产环境的分布式事务一致,各大互联网公司都是自己实现的解决方案,总结起来无非是异步.补偿.实时查询.定期校对几种模式,大部分场景都是 ...
- xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式
原标题:分布式事务如何实现?深入解读 Seata 的 XA 模式 作者简介:煊檍,GitHub ID:sharajava,阿里巴巴中件间 GTS 研发团队负责人,SEATA 开源项目发起人,曾在 Or ...
- WCF系列_分布式事务(下)
1. WCF分布式事务例子 这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B的相应账户的资金就增加多少. 系统A机器上有数据库AccountA ...
- mysql事务并发控制_数据库 事务并发控制
事务是一个逻辑工作单元, SQLServer 2005 提供了几种自动的可以通过编程来完成的机制,包括事务日志. SQL 事务控制语句,以及事务处理运行过程中通过锁定保证数据完整性的机制.当用户对数据 ...
- 一文搞懂MySQL XA如何实现分布式事务
一文搞懂MySQL XA如何实现分布式事务 前言 XA 协议 如何通过MySQL XA实现分布式事务 前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如 ...
最新文章
- Docker 更换下载镜像源
- mstsc局域网远程 要预先做的设置
- Java9Java10 Java11新特性
- CSP2020洛谷P7076:动物园(位运算)
- 一种页面数据错误输入提示方法 【转】
- Oracle数据库安装图解
- UI基本设计素材模板|完整的线框图
- MYSQL数据库的数据完整性
- 学习笔记|Pytorch使用教程22(hook函数与CAM可视化)
- 全球最快下载工具 XDM
- AudioTrack音频播放
- 计算机网络里的DHCP是什么,路由器的DHCP是什么意思?有什么作用
- python标准数据类型叮叮叮
- 一次性删除PPT所有动画
- 生成子空间的交空间与和空间
- 192.168.49.1登录_192.168.49.1路由器登录页面打不开
- 专利评价报告是什么,流程有哪些
- libev库使用教程
- python下载文件损坏_四种方法 恢复损坏的Excel文档
- java opencv 模板匹配算法_OpenCV探索之路(九):模板匹配
热门文章
- docker网络、bridge、host
- bboss v5.5.3 发布,Elasticsearch Rest Client
- DMA内存申请--dma_alloc_coherent 及 寄存器与内存【转】
- python3+selenium入门03-操作谷歌浏览器
- Python 中的容器
- Spring配置数据源【转载】
- objective-C 数据类型转换
- Entity Framework Configuring Relationships with the Fluent API
- multiple多图选择,借助FormData通过ajax实现上传
- Eclipse is running in a JRE, but a JDK is requi...