当前位置:网站首页>中电金信技术实践|分布式事务简说
中电金信技术实践|分布式事务简说
2022-08-04 11:22:00 【51CTO】
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。本篇文章主要是对分布式事务进行简说,与各位同仁进行探讨切磋。
传统事务
在传统单体应用架构下,我们通常会将业务数据存储在一个数据库中,应用各模块直接对数据库进行操作业务数据。由数据库提供基ACID的事务保证。
A是Atomic原子性的简称(事务作为整体来执行,要么全部执行,要么都不执行。)
C是Consistency一致性的简称(事务应确保数据从一个一致的状态转变为另一个一致的状态。)
I是Isolation隔离性的简称(多个事务并发执行时,一个事务的执行不应影响其他事务的执行。)
D是Durability持久性的简称(已提交的事务修改数据会被持久保持。)
业务拆分微服务化事务
随着微服务架构和云计算的流行,很多大型的业务流程被拆分成了多个功能单一的基础服务,大家会根据业务的诉求在这些基础服务之上编写一些组合调用服务以满足业务诉求。
为了保证微服务能够独立开发部署运行,通常我们会采用一个微服务一个数据库的架构,将内部数据经微服务封装之后,以服务方式对外暴露。
这样以往基于数据库来实现的数据操作就变成了多个对外提供服务的微服务系统的协同完成操作。因为单个微服务只知道自己的服务执行情况,为了保证分布事务的一致性,参与分布式事务的微服务通常会依托协调器完成相关的一致性协调操作。
编辑
分库分表跨库事务
随着微服务的兴起,单库的连接数和并发已经达到了瓶颈,为了解决单库性能瓶颈的问题,我们引入了数据库的垂直分库和水平分表,而分库分表后,原来在一个数据库上就能完成的写操作,可能就会跨多个数据库,这时原有的单机事务往往会变成分布式事务,出现了跨库事务问题。
编辑
分布式事务诉求
■ 跨数据库分布式事务
系统分库、分表后,跨库事务几乎无法避免,分布式事务可以让应用轻松具备跨库事务处理能力。
■ 跨服务的分布式事务
分布式事务与分布式微服务平台结合,提供跨库、跨服务的事务支持,实现业务链路级别的分布式事务。
■ 消息队列分布式事务
在多次调用消息系统的场景中,通过分布式事务应用可轻松具备消息事务的处理能力。
■ 混合的分布式事务
分布式事务可将各个资源加入事务范畴,实现同时跨服务、数据库、跨消息系统的事务处理能力。
■ 多种事务模式
提供了标准事务模式、自定义事务模式和重试模式,以供选择并应用于不同的业务场景。
分布式事务架构
编辑
分布式事务模式(SAGA事务模式)
编辑
Saga是一种补偿协议,在Saga模式下,分布式事务内有多个参与者,每一个参与者都是一个冲正补偿服务,需要用户根据业务场景实现其正向操作和逆向回滚操作。
分布式事务执行过程中,依次执行各参与者的正向操作,如果所有正向操作均执行成功,那么分布式事务提交。如果任何一个正向操作执行失败,那么分布式事务会退回去执行前面各参与者的逆向回滚操作,回滚已提交的参与者,使分布式事务回到初始状态。Saga正向服务与补偿服务也需要业务开发者实现。
分布式事务模式(TCC事务模式)
编辑
TCC(Try-Confirm-Cancel)实际上是服务化的两阶段提交协议,业务开发者需要实现这三个服务接口,第一阶段服务由业务代码编排来调用Try接口进行资源预留,所有参与者的Try接口都成功了,事务管理器会提交事务,并调用每个参与者的Confirm接口真正提交业务操作,否则调用每个参与者的Cancel接口回滚事务。
边栏推荐
- C language * Xiaobai's adventure
- The sword refers to the Great Wall Cannon?Official spy photos of Changan's new pickup
- The use of DDR3 (Naive) in Xilinx VIVADO (2) Read and write design
- 数据库对象-视图;存储过程
- 秒云成功入选《2022爱分析 · 银行数字化厂商全景报告》,智能运维能力获认可
- 临床研究方法学,到现场,到数据真实发生的地方 | 对话数智 x 张维拓
- POJ2367Genealogical tree题解
- 章节小测一
- ESP8266-Arduino编程实例-APDS-9930环境光和趋近感器驱动
- DB2查看执行过长的SQL
猜你喜欢
C#/VB.NET:在 Word 中设置文本对齐方式
Win11怎么重装显卡驱动程序?Win11显卡驱动怎么卸载重装?
Xilinx VIVADO 中 DDR3(Naive)的使用(2)读写设计
The use of DDR3 (Naive) in Xilinx VIVADO (3) simulation test
ECCV 2022 | 清华&腾讯AI Lab提出REALY: 重新思考3D人脸重建的评估方法
【目标检测】yolov2特征提取网络------Darknet19结构解析及tensorflow和pytorch实现
Leetcode——利用先序遍历特性完成114. 二叉树展开为链表
中介者模式(Mediator)
vscode插件设置——Golang开发环境配置
[Flight Control Development Advanced Course 7] Crazy Shell Open Source Formation UAV - Formation Flight
随机推荐
Learn to use the basic interface of set and map
Xilinx VIVADO 中 DDR3(Naive)的使用(2)读写设计
职责链模式(responsibilitychain)
Leetcode brush questions - binary search tree related topics (98. Verify binary search tree, 235. The nearest common ancestor of binary search tree, 1038. From binary search tree to bigger sum tree, 5
【LeetCode】1403.非递增顺序的最小子序列
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
datax oracle to oracle incremental synchronization
Camunda overall architecture and related concepts
超美星空特效,你Get了吗?
Jenkins User Manual (1) - Software Installation
热成像测温的原理是什么呢?你知道吗?
audio_policy_configuration.xml配置文件详解
SkiaSharp 之 WPF 自绘 粒子花园(案例版)
Mysql高级篇学习总结13:多表连接查询语句优化方法(带join语句)
【LeetCode】700.二叉搜索树
Win11 file types, how to change?Win11 modify the file suffix
Graphic and text hands-on tutorial--ESP32 MQTT docking EMQX local server (VSCODE+ESP-IDF)
ping的原理
北京大学,新迎3位副校长!其中一人为中科院院士!
章节小测一