分布式事务是指涉及操作多个数据库的事务,目的是为了保证分布式系统中的数据一致性
XA(eXtend Architecture):
由X/Open组织提出的分布式事务规范/协议,它定义了事务管理器TM(Transaction Manager,即事务协调者)、资源管理器RM(Resource Manager,可以被看作一个数据库)和应用程序
一、二阶段提交(2PC)和三阶段提交(3PC)
XA规范的具体实现
1.2PC
分为投票和执行两个阶段
(1)投票阶段/准备阶段
TM向所有参与者发送prepare请求,询问是否可以执行事务,等待各个参与者的响应
(2)执行阶段/提交阶段
事务的提交阶段,需要考虑失败的情况
缺陷:
(1)同步阻塞
事务执行过程中,所有的数据库资源都被锁定,其他来访问这些资源的请求将会被阻塞,带来性能问题
(2)TM单点问题
只有一个TM,一旦TM宕机,那么整个流程无法继续完成
(3)数据不一致
如果在执行阶段,参与者脑裂或者其他故障导致没有收到commit请求,部分提交事务,部分未提交,那么就会产生数据不一致问题
2.3PC
分为CanCommit、PreCommit和DoCommit三个步骤
(1)CanCommit
先询问数据库是否执行事务,发送一个canCommit请求去询问,若可以就返回YES,反之返回NO
(2)PreCommit 等同于2PC的投票阶段
发送preCommit命令,然后执行SQL事务,成功返回YES,反之返回NO
参与者增加了超时机制,如果参与者超时未收到doCommit命令,默认将会提交事务
(3)DoCommit 等同于2PC的执行阶段
如果上一个阶段收到的都是YES的话,那么就会发送doCommit命令去提交事务,反之则会发送abort命令去中断事务的执行
二、TCC
Try、Confirm和Cancel,实际上是2PC的一个变种。实现这种模式,一个事务接口需要拆分成3个,也就是Try预占、Confirm确认提交和Cancel回滚
Try:锁定某个资源,设置一个预备状态,冻结部分数据
Confirm:事务管理器感知到各个服务的Try操作都成功了才进入本阶段,本阶段需要对Try阶段锁住的资源进行处理
Cancel:Try阶段阶段中,如果某个服务执行出错,事务管理器感知到后,会对整个分布式事务进行回滚
三、事务状态表
四、SAGA
主要思想是将长事务拆分成多个本地短事务,如果全部成功,就正常完成,反之,则会按照相反的顺序依次调用补偿
.消息队列
五、Seata框架
阿里开源的分布式框架,提供了对TCC、XA、Saga及AT模式的支持。
主要包含以下几个核心组件:
(1)Transaction Coordinator(TC)事务协调器
维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
(2)Transaction Manager(TM)事务管理器
控制全局事务的边界,负责开启一个全局事务,并最终发起全局事务提交或全局回滚的决议
(3)Resource Manager(RM)资源管理器
控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交或回滚
框架原理:
事务开启时,TM向TC注册全局事务,并且获得全局事务XID
多个微服务接口调用时,XID就会传播到各个微服务中,每个微服务执行事务也会向TC注册分支事务
TM可以管理每个XID的事务全局提交和回滚,RM完成分支的提交和回滚