转载: 原文链接
有三个组成部分:
1,TC:事务协调器,是个独立的中间件,需要部署运行,维护着全局事务的运行状态,接收TM发起的全局事务的提交和回滚,负责和RM通信协调各个分支事务的提交和回滚
2,TM:事务管理器,负责开启一个全局事务
3,RM:控制分支事务,负责分支注册,并接收事务协调器TC的指令,
拿新用户注册送积分来举例,有两个微服务,一个用户服务,一个积分服务
具体的执行流程如下:
1,用户服务的TM像TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID,
2,用户服务RM向TC注册分支事务,并返回一个branchId,该分支事务在用户服务执行新增用户逻辑,并将其纳入XID对应的全局事务的管辖
3,用户服务执行分支事务,在该事务里,执行完新增用户的逻辑后,在该数据库的undo_log表插入记录,事务提交,释放锁
4,远程调用积分服务,(XID在微服务调用链路的上下文中传播),积分服务的RM向TC注册分支事务,该分支事务执行增加积分的逻辑,在该事务里执行向积分数据库的undo_log表插入记录,并将其纳入XID全局事务的管辖
5,积分服务执行完毕后,返回用户服务
6,TM向TC发起针对XID的全局事务的提交或回滚
7,TC调度XID下管辖的全部分支事务完成提交或者回滚,提交其实就是删除undo_log表的记录,因为之前在第一阶段就已经提交了,回滚就是读取undo_log表(记录操作前后的状态)执行反向sql操作
end