问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

解决分布式事务的方案 —— Seata

创作时间:
作者:
@小白创作中心

解决分布式事务的方案 —— Seata

引用
1
来源
1.
https://www.cnblogs.com/Abner-rudolf/p/18778020

解决分布式事务的方案 —— Seata

1. 认识 Seata

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

Seata 的事务管理中有三个重要的角色:

  • TC(Transaction Coordinator)事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚,相当于监控中心。

  • TM(Transaction Manager)事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

  • RM(Resource Manager)资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

2. 微服务集成 Seata

引入依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

修改配置

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.101.68:8848 # nacos地址
      namespace: "" # namespace,默认为空
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
  tx-service-group: hmall # 事务组名称
  service:
    vgroup-mapping: # 事务组与tc集群的映射关系
      hmall: "default"

3. Seata 工作模式

Seata 支持四种不同的分布式事务解决方案,Seata 默认使用的是 AT 模式:

  • AT
  • XA
  • TCC
  • SAGA

这四种方案可以满足 CP 和 AP 的需求,比如:XA 可以实现 CP 即强一致性,AT 可以实现 AP 最终一致性,四种模式中 AT 模式使用较多,本课程重点讲解AT模式。

3.1 AT 模式

工作流程图

流程说明

  1. TM 通知 TC 开启全局事务,TC 记录全局事务状态;
  2. TM 调用所有 RM,开始执行分支事务,然后 RM 向 TC 注册分支事务;
  3. RM 执行自己的 sql 并进行提交,同时记录日志到 undolog 表中;
  4. RM 向 TC 汇报自己事务执行的状态;
  5. TM 通知 TC,提交或回滚全局全局事务。TC 汇总所有 RM 的事务执行情况,并通知所有 RM 执行提交或回滚操作
  6. 提交:删除 undolog 表中的日志
  7. 回滚:RM 根据各自 undolog 表中的日志,反向操作,操作成功后删除 undolog 中的日志

3.2 XA 模式

工作流程图

流程说明

  1. TM 通知 TC 开启全局事务,TC 记录全局事务状态;
  2. TM 通知所有 RM,开始执行分支事务,然后 RM 向 TC 注册分支事务;
  3. RM 执行自己的 sql,然后向 TC 报告自己执行的事务状态;
  4. TM 通知 TC,提交或回滚全局事务。TM 汇总所有 RM 分支的事务状态,并通知所有 RM 执行提交或回滚的操作。

可见,AT 模式使用起来更加简单,无业务侵入,性能更好。因此企业 90% 的分布式事务都可以用 AT 模式来解决。

3.3 TCC 模式

工作流程图

流程:

  1. TM 通知 TC 开启全局事务,TC 记录全局事务状态;
  2. TM 通知 RM 执行分支事务,RM 向 TC 注册分支事务;
  3. RM 对将要操作的资源进行检测和预留,将要执行的资源单独分出来,并向 TC 汇报所执行的事务状态;
  4. TM 通知 TC,提交或回滚全局事务。TC 统计汇总所有 RM 分支事务状态,并通知所有 RM 执行提交或回滚的操作
  5. 提交:RM 执行 Congirm 操作,真正执行数据
  6. 回滚:RM 执行 cancel 操作,将隔离出来的资源返回

TCC 模式的每个阶段是做什么的?

  • Try:资源检查和预留
  • Confirm:业务执行和提交
  • Cancel:预留资源的释放

3.4 SAGA 模式

工作流程图

流程:

  1. TM 通知 TC 开启全局事务,TC 记录全局事务;
  2. TM 通知所有 RM 执行分支事务,RM 向 TC 注册分支事务;
  3. RM 执行自己的 sql 业务,并向 TC 汇报分支事务执行的状态;
  4. TM 通知 TC 提交或回滚全局事务。TC 汇总所有 RM 的事务状态,并通知所有 RM 执行提交或回滚
  5. 提交:RM 执行提交操作
  6. 回滚:RM 通过回滚机制和补偿机制进行回滚操作。

4. 小结

4.1 Seata 是怎么进行分布式事务控制的?

使用 Seata 的 AT 模式,AT 模式的底层使用的是 CAP 的 CP,保证数据的最终一致性。

4.2 Seata 的工作原理?

首先,Seata 是一个专门用于处理分布式事务的开源框架,它通过定义全局事务和分支事务的概念来实现分布式事务的控制,并支持多种模式,如 AT 模式、TCC 模式、SAGA 模式等。

核心概念:

  1. 事务协调器(TC):维护全局事务和分支事务的状态,并驱动全局事务的提交或回滚。
  2. 事务管理器(TM):定义全局事务的边界,即开始和结束全局事务。
  3. 资源管理器(RM):管理分支事务并报告分支事务的状态给 TC,同时也负责分支事务的提交或回滚。

工作原理:

  1. 开始全局事务:TM 通知 TC 开启一个全局事务,TC 生成一个全局唯一的 XID 用于标识这个全局事务。
  2. 执行分支事务:TM 通知 RM 执行分支事务,执行完成后向 TC 报告分支事务的状态。
  3. 提交或回滚全局事务
  • 当所有分支事务都成功完成,TM 通知 TC 提交全局事务,TC 随后指示各个 RM 提交对应的分支事务。
  • 如果任何一个分支事务失败,TM 会通知 TC 回滚全局事务,TC 会指令各 RM 回滚各自的分支事务。

分布式事务模式

  • AT 模式:一种无侵入式的分布式事务解决方案,基于数据库的 ACID 特性,自动完成数据的快照和补偿操作,适合对业务代码侵入性要求较低的场景。
  • TCC 模式:需要业务系统提供 Try、Confirm、Cancel 三个方法接口,适用于对一致性要求较高且能够接受一定程度业务侵入的场景。
  • SAGA 模式:长事务解决方案,适用于长时间运行的业务流程,通过一系列子事务及其补偿操作来保证最终一致性。

通过上述机制,Seata 实现了对分布式事务的有效管理和控制,也能够保证事务的一致性和可靠性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号