• seata框架


    Seata简介:(Seata | Seata(官方网站))

    Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

    相关术语:

    TC (Transaction Coordinator) - 事务协调者

    维护全局和分支事务的状态,驱动全局事务提交或回滚。

    TM (Transaction Manager) - 事务管理器

    定义全局事务的范围:开始全局事务、提交或回滚全局事务。

    RM (Resource Manager) - 资源管理器

    管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

    分类:

    AT模式:

    该模式下数据库中有undo-log表来记录每次修改操作。若执行完成,未发生异常,则直接清空undo-log表,并提交全局事务。否则通过undo-log表来进行回滚操作。

    局限性:由于回滚操作依赖于undo-log表,所以只能在mysql数据库中使用,其他数据库就只能采用TCC模式。

    undo-log.sql文件(官网摘取) 

    1. -- 注意此处0.7.0+ 增加字段 context
    2. CREATE TABLE `undo_log` (
    3. `id` bigint(20) NOT NULL AUTO_INCREMENT,
    4. `branch_id` bigint(20) NOT NULL,
    5. `xid` varchar(100) NOT NULL,
    6. `context` varchar(128) NOT NULL,
    7. `rollback_info` longblob NOT NULL,
    8. `log_status` int(11) NOT NULL,
    9. `log_created` datetime NOT NULL,
    10. `log_modified` datetime NOT NULL,
    11. PRIMARY KEY (`id`),
    12. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
    13. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    TCC模式:

    TCC异常情况:
    1:未执行try,直接执行cancel操作。

    原因:Try超时导致还未执行发生异常执行cancel操作。

    解决:增加事务日志表,若TYR执行完成,在日志表里插入一条记录,可以执行cancel操作,否则执行空回滚操作。

    2:幂等(多次执行confirm,cancel操作)

    原因: 网络原因,服务宕机

    解决:做幂等性操作,在事务日志表中增加一个字段用来记录操作状态(初始化,已提交,已回滚),根据状态执行对应操作。

    3:防悬挂(未执行完TRY,执行cancel操作)

    原因:TRY执行中超时导致发生异常

    解决:执行cancel时添加事务日志记录,后续执行try时就无法插入记录(主键约束)。

  • 相关阅读:
    【刷题笔记9.24】LeetCode:对称二叉树
    力扣刷题-链表-环形链表
    计算机毕业设计Java汉服服装租赁系统(源码+系统+mysql数据库+lw文档)
    Python 图像处理库PIL ImageOps笔记
    AE& VAE 代码和结果记录
    渗透测试之BurpSuite工具的使用介绍(三)
    Go 微服务开发框架 DMicro 的设计思路
    海贝造音强势登陆深圳 助力本土原创音乐升阶
    JavaEE开发之SpringMVC框架整合1
    Linux-Hadoop集群配置
  • 原文地址:https://blog.csdn.net/vgfvgf/article/details/133647770