分布式事务_03_2PC框架raincat源码解析-事务提交过程

2022-03-10 16:47:50 浏览数 (2)

一、前言

前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程。

这一节,我们来看下raincat的事务提交过程。

二、事务提交过程概览

1.二阶段对应图

raincat是一个二阶段分布式事务处理框架,在事务的提交过程中,对应的二阶段如下:

  • 第一阶段(准备阶段)

记录事务信息,准备提交。

  • 第二阶段(提交阶段)

协调者发送提交通知,各参与者分别提交事务。

2.事务提交过程概览

整个事务的提交过程,如下:

(1)切面开始,拦截 @TxTransaction 注解 (2)协调者为发起者创建事务组信息(入Redis) (3)发起者开启本地事务,并执行业务方法,等待业务方法返回结果 (4)参与者另起线程B,并阻塞主线程A。 线程B中,开启本地事务,让协调者将参与者的事务加入到(2)中的事务组中,然后执行本地业务方法。 以下异步执行 (5)唤醒线程A,参与者业务方法执行完毕。(3)中得到返回结果。 同时,在线程B中去保存补偿日志。并阻塞线程B。 (6)发起者的业务方法执行完毕,去保存补偿日志(入库),并发起预提交请求。 (7)协调者收到请求后,通知发起者提交事务。协调者更新事务组状态为提交,并判断是否能提交。然后通知参与者提交事务,接着通知其他TM提交事务。 (8)发起者提交本地事务,通知协调者完成事务,并删除补偿日志。 (9)参与者提交本地事务,通知协调者完成事务。并删除补偿日志。 (10)定时补偿线程,删除掉每个服务已经提交的补偿日志。

三、事务提交过程时序图

下图主要是以事务发起者的角度分析整个事务提交流程

0 人点赞