当前位置:网站首页>分布式事务解决方案之2PC
分布式事务解决方案之2PC
2022-07-06 23:41:00 【勤天】
目录
XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。
一、什么是2PC
2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。
- 准备阶段(Prepare phase): 事务管理器给每个参与者发送Prepare消息 ,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。(Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数据文件);
- 提交阶段(commit phase):如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的锁资源。
注意:必须在最后阶段释放锁资源。
成功情况:
失败情况:
二、2pc解决方案之XA
2PC即两阶段提交,又叫做 XA Transactions,MySQL从5.5版本开始支持,SQL Server 2005 开始支持,Oracle 7 开始支持,它的优点是一致性,缺点则是降低了可用性。
2PC的 传统方案是在数据库层面 实现的,如Oracle、MySQL都支持2PC协议,为了统一标准减少行业内不必要的对接成本,需要制定标准化的处理模型及接口标准,国际开放标准组织Open Group定义了分布式事务处理模型DTP(Distributed Transaction Processing Reference Model)。
整个2PC的事务流程涉及到三个角色AP、RM、TM。
AP指的是使用2PC分布式事务的应用程序;
RM指的是 资源管理器 ,它控制着分支事务;
TM指的是 事务管理器 ,它控制着整个全局事务。
1、在 准备阶段 RM执行实际的业务操作,但不提交事务,资源锁定;
2、在 提交阶段 TM会接受RM在准备阶段的执行回复,只要有任一个RM执行失败,TM会通知所有RM执行回滚操作,否则,TM将会通知所有RM提交该事务。提交阶段结束资源锁释放。
XA方案的问题 :
- 需要本地数据库支持XA协议。
- 资源锁需要等到两个阶段结束才释放,性能较差。
三、2pc解决方案之Seata
1、seata的设计思想
Seata的设计目标其一是对业务无侵入,因此从业务无侵入的2PC方案着手,在传统2PC的基础上演进,并解决2PC方案面临的问题。
Seata把 一个分布式事务理解成一个包含了若干分支事务的全局事务 。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本身就是一个关系数据库的本地事务,下图是全局事务与分支事务的关系图:
与传统2PC 的模型类似,Seata定义了3个组件来协议分布式事务的处理过程:
- ransaction Coordinator (TC): 事务协调器 ,它是独立的中间件,需要 独立部署 运行,它维护全局事务的运行状态,接收TM指令发起全局事务的提交与回滚,负责与RM通信协调各个分支事务的提交或回滚。
- Transaction Manager (TM): 事务管理器 ,TM需要嵌入应用程序中工作,它负责 开启一个全局事务 ,并最终向TC发起全局提交或全局回滚的指令。
- Resource Manager (RM): 控制分支事务 ,负责分支注册、状态汇报,并接收事务协调器TC的指令,驱动分支(本地)事务的提交和回滚。
2、Seata的执行流程
(1) 用户服务的 TM 向 TC 申请开启一个全局事务 ,全局事务创建成功并 生成一个全局唯一的XID。
(2) 用户服务的 RM 向 TC 注册 分支事务 ,该分支事务在用户服务执行新增用户逻辑,并将其纳入 XID 对应全局事务的管辖 。
(3) 用户服务执行分支事务,向用户表插入一条记录。
(4) 逻辑执行到远程调用积分服务时( XID 在微服务调用链路的上下文中传播 )。积分服务的RM 向 TC 注册分支事务,该分支事务执行增加积分的逻辑,并将其纳入 XID 对应全局事务的管辖。
(5) 积分服务执行分支事务,向积分记录表插入一条记录,执行完毕后,返回用户服务。
(6) 用户服务分支事务执行完毕。
(7) TM 向 TC 发起针对 XID 的全局提交或回滚决议 。
(8) TC 调度 XID 下管辖的全部分支事务 完成提交或回滚请求 。
四、Seata与传统2PC区别
1、架构层次方面, 传统2PC 方案的 RM 实际上是在 数据库层 ,RM 本质上就是数据库自身,通过 XA 协议实现,而 Seata的 RM 是以jar包的形式作为中间件层部署 在应用程序这一侧的。
2、两阶段提交方面,传统2PC无论第二阶段的决议是commit还是rollback, 事务性资源的锁都要保持到Phase2完成才释放 。而 Seata的做法是在Phase1 就将本地事务提交 ,这样就可以省去Phase2持锁的时间,整体 提高效率 。
边栏推荐
- How can professional people find background music materials when doing we media video clips?
- Flink SQL 实现读写redis,并动态生成Hset key
- Addressable pre Download
- Talk about mvcc multi version concurrency controller?
- Vector and class copy constructors
- 1. AVL tree: left-right rotation -bite
- When deleting a file, the prompt "the length of the source file name is greater than the length supported by the system" cannot be deleted. Solution
- JHOK-ZBL1漏电继电器
- 什么是依赖注入(DI)
- [Oracle] simple date and time formatting and sorting problem
猜你喜欢
Is the human body sensor easy to use? How to use it? Which do you buy between aqara green rice and Xiaomi
Use, configuration and points for attention of network layer protocol (taking QoS as an example) when using OPNET for network simulation
Leetcode (46) - Full Permutation
漏电继电器LLJ-100FS
MySQL数据库学习(8) -- mysql 内容补充
【js组件】自定义select
基于 hugging face 预训练模型的实体识别智能标注方案:生成doccano要求json格式
DJ-ZBS2漏电继电器
Photo selector collectionview
K6EL-100漏电继电器
随机推荐
Two person game based on bevy game engine and FPGA
np. random. Shuffle and np Use swapaxis or transfer with caution
Getting started with DES encryption
Make web content editable
Dj-zbs2 leakage relay
Record a pressure measurement experience summary
Educational Codeforces Round 22 B. The Golden Age
[binary tree] binary tree path finding
[PHP SPL notes]
[论文阅读] Semi-supervised Left Atrium Segmentation with Mutual Consistency Training
The navigation bar changes colors according to the route
删除文件时提示‘源文件名长度大于系统支持的长度’无法删除解决办法
What changes will PMP certification bring?
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
Initial experience of annotation
DOM-节点对象+时间节点 综合案例
Creation and use of thread pool
论文阅读【Semantic Tag Augmented XlanV Model for Video Captioning】
Wonderful express | Tencent cloud database June issue
Mybaits之多表查询(联合查询、嵌套查询)