前言
虽然在实际工作中,由于公司与项目规模限制,实际上所谓的微服务分布式事务都不会涉及,更别提单独部署构建Seata集群。但是作为需要不断向前看的我,还是有必要记录下相关的分布式事务理论与Seate框架,甚至Seate框架的源码分析,先从分布式事务理论开始吧,下一部分将介绍对Seata的应用,最后再对核心的源码进行跟踪分析并学习!
主要参考《Spring Cloud Alibaba 微服务原理与实战》中分布式事务章节,有需要资源的朋友可以评论我!(文中的截图均来自此,由于相对好理解所以没有自己画图)
一、分布式事务理论模型
在介绍相应的分布式事务理论模式前,先放出如下图,对分布式事务常见的解决方案作对比:
最主要的区别就是对一致性的要求:是强一致性还是最终一致性,根据这个核心展开来介绍相关的几种理论介绍
1.X/Open分布式事务模型
X/Open DTP是由X/Open组织提出的一套分布式事务的标准,这个标准提出使用了2PC(Two-Phase-Commit)来保证分布式事务的完整性。
X/Open DTP包含三种角色:
- AP: Application 表示应用程序
- RM: Resource Manager 资源管理器,比如数据库
- TM: Transaction Manager 表示事务管理器,协调事务和管理资源,类似于Spring的Transaction
Manager。
在分布式环境下,RM代表数据库,可能有多个,所以TM需要管理多个数据库的事务,也就是说TM就是一个全局事务管理器。步骤如下:
- 配置TM,多个RM注册到TM上,相当于TM注册RM作为数据源;
- AP从TM管理中的RM获取连接,如果RM是数据库则获取JDBC连接;
- AP向TM发起一个全局事务,生成全局事务ID(XID),XID通知各个RM;
- AP获取到连接后直接操作RM,此时AP每次操作时会把XID传递给RM;
- AP结束全局事务,TM会通知各个RM全局事务结束;
- 根据各个RM的事务执行结果,执行提交或者回滚操作。
需要注意的是:TM与多个RM之间的事务控制,是基于XA协议来完成的,XA协议是X/Open提出分布式事务处理规范。
2.两阶段提交协议
根据上图可知,2PC具体步骤:
- 准备阶段:TM通知RM准备分支事务,记录事务日志,并告诉事务管理器的准备结果。
- 提交/回滚阶段:如果所有的资源管理器RM在准备阶段明确返回成功,则TM向所有的资源管理器PM发起事务提交完成数据的变更,反之如果有任何一个资源管理器RM明确返回失败,则TM会向所以RM发送事务回滚指令。
但也有如下的缺点:
- 同步阻塞:所有的RM都需要及时反馈&#x