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


    一、前言

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

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

    二、事务提交过程概览

    1.二阶段对应图

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

    • 第一阶段(准备阶段)

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

    • 第二阶段(提交阶段)

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

    raincat二阶段对应图

    2.事务提交过程概览

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

    (1)切面开始,拦截 @TxTransaction 注解
    (2)协调者为发起者创建事务组信息(入Redis)
    (3)发起者开启本地事务,并执行业务方法,等待业务方法返回结果
    (4)参与者另起线程B,并阻塞主线程A。
    线程B中,开启本地事务,让协调者将参与者的事务加入到(2)中的事务组中,然后执行本地业务方法。
    以下异步执行

    (5)唤醒线程A,参与者业务方法执行完毕。(3)中得到返回结果。
    同时,在线程B中去保存补偿日志。并阻塞线程B。
    (6)发起者的业务方法执行完毕,去保存补偿日志(入库),并发起预提交请求。
    (7)协调者收到请求后,通知发起者提交事务。协调者更新事务组状态为提交,并判断是否能提交。然后通知参与者提交事务,接着通知其他TM提交事务。
    (8)发起者提交本地事务,通知协调者完成事务,并删除补偿日志。
    (9)参与者提交本地事务,通知协调者完成事务。并删除补偿日志。
    (10)定时补偿线程,删除掉每个服务已经提交的补偿日志。

    在这里插入图片描述

    三、事务提交过程时序图

    下图主要是以事务发起者的角度分析整个事务提交流程
    在这里插入图片描述

  • 相关阅读:
    C#泛型
    Chrome 中调试Javascript
    Oracle分页查询语句
    WordCount2.2
    第一周博客作业
    WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
    PHP数据库操作
    PHP安全函数
    PHP基础
    用户/目录操作
  • 原文地址:https://www.cnblogs.com/shirui/p/10751894.html
Copyright © 2020-2023  润新知