zoukankan      html  css  js  c++  java
  • 分布式事务_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)定时补偿线程,删除掉每个服务已经提交的补偿日志。

    在这里插入图片描述

    三、事务提交过程时序图

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

  • 相关阅读:
    8、Windows下卸载Pycharm
    7、如何安装下载的*.tar.gz?
    6、Windows下Anaconda2(Python2)和Anaconda3(Python3)的共存
    3、Python·Jupyter Notebook各种使用方法记录
    2、Jupyter Notebook 快速入门
    1、在指定目录下启动Jupyter Notebook
    python字符串函数
    5、Anaconda的升级与卸载、新库的安装等
    Android性能测试工具Emmagee介绍
    Fiddler抓包使用教程-安装配置
  • 原文地址:https://www.cnblogs.com/shirui/p/10751894.html
Copyright © 2011-2022 走看看