分布式事务之Seata框架

发布于:2024-06-25 ⋅ 阅读:(35) ⋅ 点赞:(0)

一、分布式事务

1.什么是分布式事务

传统的单体项目被拆分成多个微服务,一个完整的流程可能涉及到多个服务之间的调用,多个服务的入库操作,为了满足事务的ACID原则,提出了分布式事务。

2.分布式事务的思想

找一个统一的事务协调者,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。大多数的分布式事务框架都是基于这个理论来实现的。

二、Seata框架

1.认识Seata

解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了
https://seata.apache.org/zh-cn/docs/overview/what-is-seata/

2.事务管理三个重要角色

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    在这里插入图片描述
    其中,TM和RM可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来TM和RM就会协助微服务,实现本地分支事务与TC之间交互,实现事务的提交或回滚。
    而TC服务则是事务协调中心,是一个独立的微服务,需要单独部署。

3.事务模式

Seata支持四种不同的分布式事务解决方案:

  • XA
  • TCC
  • AT
  • SAGA

4.二阶段提交

一阶段:

  • 事务协调者通知每个事务参与者执行本地事务
  • 本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁

二阶段:

  • 事务协调者基于一阶段的报告来判断下一步操作
  • 如果一阶段都成功,则通知所有事务参与者,提交事务
  • 如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务

5.XA模式

一阶段不提交sql语句,等二阶段再提交

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

  1. TC检测各分支事务执行状态
  2. 如果都成功,通知所有RM提交事务
  3. 如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

6.AT模式

RM一阶段的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态
    二阶段提交时RM的工作:
  • 删除undo-log即可
    二阶段回滚时RM的工作:
  • 根据undo-log恢复数据到更新前

7.AT模式与XA模式的区别

  1. XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
  2. XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。(undoLog日志)
  3. XA模式强一致;AT模式最终一致

网站公告

今日签到

点亮在社区的每一天
去签到