• Seata的4种模式


    目录

    AT模式

    TCC模式

    SAGA模式

    XA模式


    AT模式

    1、事务的发起方(TM)会向事务协调器(TC)申请一个全局事务id,并保存

    2、Seata会管理事务中所有相关的参与方的数据源,将数据操作之前和之后的镜像都保存在undo_log表中,这个表是seata框架规定的,方便提交(commit)或回滚(roll back)

    3、事务的发起方(TM)会连同全局id一起通过RPC调用资源管理器(RM)中的方法

    4、资源管理器(RM)接收到全局id,并运行指定的方法,将运行的状态同步到事务协调器(TC)

    5、如果运行整体没有发生异常,发起方(TM)会通过事务协调器(TC)通知所有分支将本次事务所有对数据库的操作提交,反之如果任何一个RM运行发生异常,都会通知事务协调器(TC),由事务协调器(TC)通知所有分支,回滚数据中的数据,回滚时可以使用undo_log表中的数据来实现回滚。

    缺点:AT模式运行有一个非常明显的条件,就是事务分支都必须是操作关系型数据库,但是如果一个事务中有操作例如Redis这样的非关系型数据库时就不能使用AT模式了

    TCC模式

    这个模式简单来说就是自己编写代码进行事务的提交和回滚,我们需要在各个分支业务逻辑层代码中编写一组三个方法(prepare\commit\rollback)。

    prepare方法是无论事务成功与否都会运行的代码

    commit当整体事务运行成功时运行的方法

    rollback当整体事务运行失败是运行的方法

    优点:虽然代码是自己写的,但是事务整体提交或回滚的机制仍然可用

    缺点:每个业务都要编写3个方法来对应,代码冗余,代码侵入性强

    SAGA模式

    SAGA模式的思想是编写一个类,当指定的事务发生问题时,运行SAGA编写的回滚类,这样编写代码不影响已经编写好的业务逻辑代码,一般用于修改已经编写完成的老代码。

    缺点:是每个事务分支都要编写一个类来回滚业务,类数量多,开发量大

    XA模式

    支持XA协议的数据库分布式事务,使用比较少

  • 相关阅读:
    Redis-Bitmap位图及其常用命令详解
    Python之字符串
    Linux--进程-消息队列--键值生成&消息队列移除
    数仓中的数据对象及相关关系的解读
    Taro中添加小程序 “lazyCodeLoading“: “requiredComponents“,
    安装Hadoop以及HBase
    iview表格实现的编辑和expand功能
    七 项目管理
    存储器~Zynq book第九章
    轻量级简约仪表板Dasherr
  • 原文地址:https://blog.csdn.net/heyl163_/article/details/126326437