分布式事务(理论+实战)
一、方法论篇
1.1刚性事务
- 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。
- 资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去访问这些资源,资源包含比如数据库、文件系统、打印机服务器等。
- 事务管理器(Transaction Manager ,简称TM):负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。
- 第一阶段,AP发起事务,TM要求所有的RM准备提交对应的事务分支,询问RM是否有能力保证成功的提交事务分支,RM根据自己的情况,如果判断自己进行的工作可以被提交,那就就对工作内容进行持久化,并给TM回执OK;否者给TM的回执NO。RM在发送了否定答复并回滚了已经的工作后,就可以丢弃这个事务分支信息了。
- 第二阶段TM根据阶段1各个RM prepare的结果,决定是提交还是回滚事务。如果所有的RM都prepare成功,那么TM通知所有的RM进行提交;如果有RM prepare回执NO的话,则TM通知所有RM回滚自己的事务分支。
1.1.1 2PC
1.1.2 3PC
1.1.3 小结
1.2柔性事务
1.2.1TCC
TCC(Try-Confirm-Cancel),期模型完全交由业务方实现,每个在业务中的子模块都需要实现Try,Confirm,Cancel三个接口,对业务入侵极大。有原来的一个接口就实现完的内容现在需要二外的多增加两个接口,开发量增加了两倍。TCC让应用程序自己定义数据库操作的粒度,使得降低锁冲突、提高吞吐量成为可能。
名词解释:
T(Try):完成业务方面的检查,预留相关的资源。假设一个业务完成需要A,B,C三个子事务完成,这时候需要调用A,B,C三个业务的Try接口。
C(Confirm):成功预占资源(A,B,C三个Try都成功),真正的执行业务;
C(Cancel):事务执行失败(A,B,C三个Try只要有一个失败),释放Try阶段的资源。
1.2.2Saga
- 每个Saga将一个大的分布式事务拆分为若干sub-transaction Ti
- 每个Ti 都有对应的补偿动作Ci,补偿动作用于撤销Ti造成的结果
- 当Saga事务中的任何一个本地事务执行失败之后,调用补偿方法恢复之前的事务,达到最终一致
- 恢复的方式
- 向后恢复:按照调用顺序倒序调用Ci-1之后的补偿方法。之所以从Ci-1开始,因为Ci执行失败,已经从本地事务进行回滚了。
- 向前恢复:一直重试执行失败的事务,知道执行成功。
- 事务特征:
- 不具有隔离性,需要业务方法控制并发,保证某个执行失败的事务,所占有的资源不会业务上影响别的事务执行,
- 一致性:追中一致性
1.2.3TCC与Saga比较
二、实战架构篇
2.1 异步事务
2.1.1 基于事务消息的异步事务
2.1.2 本地消息表架构
2.2 同步事务
2.2.1 基于TCC事务架构
TCC 分布式事务模型包括三部分:
- 主业务服务:主业务服务为整个业务活动的发起方,服务的编排者,负责发起并完成整个业务活动。
- 从业务服务:从业务服务是整个业务活动的参与方,负责提供 TCC 业务操作,实现初步操作(Try)、确认操作(Confirm)、取消操作(Cancel)三个接口,供主业务服务调用。
- 业务活动管理器:以jar包组件的形式抽离出来,控制整个业务活动,包括记录维护 TCC 全局事务的事务状态和每个从业务服务的子事务状态,并在业务活动提交时调用所有从业务服务的 Confirm 操作,在业务活动取消时调用所有从业务服务的 Cancel 操作。
2.2.2 Sage架构实战
- 微服务,是业务服务,主要处理实际业务,也是分布式事务的发起者,使用分布式事务只需要加入注解即可;
- 分布式事务Proxy组件,对事务进行追踪管理以及收集每个本地事务的入参,回滚方法,以及事务执行结果,然后将这些数据落地,共补偿事务服务调用使用;
- 分布式事务补偿服务,扫描TDB(事务数据落地的DB),执行事务失败且没有补偿成功的事务,进行补偿。
分布式事务(理论+实战)相关推荐
- LCN分布式事务框架实战
本文来写个LCN分布式事务框架实战例子 文章目录 概述 概述 lcn分布式事务教程https://www.codingapi.com/docs/txlcn-preface/
- 分布式事务与Seate框架:分布式事务理论
推荐阅读: 这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试 毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题 给跪了!这套万人期待的 SQL ...
- SpringCloud Alibaba实战第九课 分布式事务理论、DevOps运维
22 一致性挑战:微服务架构下的数据一致性解决方案 上一讲我们介绍了如何在微服务架构中设计统一的用户认证方案.本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内 ...
- 分布式事务解决方案实战
目录 1.数据库事务ACID 2.什么是分布式事务 3.单体事务和分布式事务 3.1 传统单体架构事务 3.2 微服务或者多数据源分布式事务 4.分布式事务理论基础 4.1 CAP 4.2 BASE ...
- 分布式事务理论-二阶段提交(Two-phase Commit)
1 2PC 两阶段提交协议为了保证分布在不同节点上的分布式事务的一致性,我们需要引入一个协调者来管理所有的节点,负责各个本地资源的提交和回滚,并确保这些节点正确提交操作结果,若提交失败则放弃事务. 2 ...
- 分布式事务理论(学习笔记)
转载自 https://blog.csdn.net/YardStrong/article/details/80199487 先附上笔记内容,最近喜欢用画图来记笔记^v^ [使用LCN]"LC ...
- 微服务分布式事务实战(一) 项目需求描述和实现步骤
本文通过一个具体实例如何实施springCloud 分布式事务,不对分布式事务理论做探索.由于内容较多,分多个小节来说明 案例需求: 创建2个基于springCloud的微服务,分别访问不同的数据库: ...
- 教你舞动手指速写一个Seata-AT框架解决棘手的分布式事务问题
相信大家对于事务问题都不陌生,在传统的单库环境下开发,咱们可依赖于MySQL所提供的事务机制,来确保单个事务内的一组操作,要么全部执行成功,要么全部执行失败. 例如一个下单业务中,假设由「扣减库存.新 ...
- 【重难点】【事务 03】分布式事务
[重难点][事务 03]分布式事务 文章目录 [重难点][事务 03]分布式事务 一.为什么需要分布式系统架构 二.系统架构演进 1.单体应用架构 2.垂直应用架构 3.分布式架构 4.SOA 架构 ...
最新文章
- 自学python要看哪些书籍-Python入门自学到精通需要看哪些书籍?
- 在计算机上工作用英语怎么说,“Go to work”是“去上班”,那“上夜班”用英语怎么说呢?...
- CF986A Fair
- SMO写的查看数据库信息的代码
- Python学习总结之四 -- 这就是Python的字典
- 顺丰拟发行58亿可转债:15亿投入航空运力,12亿还贷款
- SAP License:ERP项目经理需求调研的惨痛经历
- UE4之vs2019IntelliSense错误
- Gym 100703F Game of words 动态规划
- Oracle使用技巧及PL/SQL Developer配置
- Android studio xpose的使用
- error C2679: binary ‘<<‘ : no operator defined which takes a right-hand operand of type ‘class s
- UNIX环境高级编程源码
- python爬虫读取pdf_Python读取PDF内容
- SQL优化--not in和or出的问题
- 极客日报第 53 期:抖音将代替拼多多成为春晚独家红包合作伙伴;高通正研发 8cx 升级版处理器,对标苹果 M1;DuckDuckGo 日查询量首次突破 1 亿
- 老罗斯柴尔德的第一桶金
- C Primer Plus 第三章编程练习一
- 鲲鹏与天宫:从航空城驶向智能时代的万千星辰
- 开源实时消息推送系统 MPush