跳转至

第二章:核心概念

全局事务

全局事务定义

全局事务:
- 跨多个服务的分布式事务
- 由 TM 发起
- 由 TC 协调
- 包含多个分支事务

全局事务生命周期

全局事务生命周期:

1. TM 开启全局事务
2. TM 注册全局事务到 TC
3. RM 注册分支事务到 TC
4. RM 执行分支事务
5. TM 提交/回滚全局事务
6. TC 协调 RM 提交/回滚

分支事务

分支事务定义

分支事务:
- 全局事务的一部分
- 由 RM 管理
- 对应一个数据库操作

分支事务类型

分支事务类型:
- AT 分支:自动补偿
- TCC 分支:手动补偿
- Saga 分支:状态机编排
- XA 分支:XA 协议

全局锁

全局锁定义

全局锁:
- Seata 特有的锁机制
- 保证数据一致性
- 避免脏写

全局锁机制

全局锁机制:

1. 分支事务执行前获取全局锁
2. 执行成功后释放全局锁
3. 其他事务等待全局锁
4. 超时后回滚

undo_log

undo_log 定义

undo_log:
- AT 模式的回滚日志
- 记录数据修改前后值
- 用于自动回滚

undo_log 结构

CREATE TABLE `undo_log` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `branch_id` bigint NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB;

XID

XID 定义

XID:
- 全局事务唯一标识
- 格式:ip:port:transactionId
- 用于关联全局事务和分支事务

XID 传递

XID 传递流程:

1. TM 开启全局事务,获取 XID
2. TM 调用 RM 服务,传递 XID
3. RM 注册分支事务,关联 XID
4. TC 根据 XID 协调事务

事务隔离

全局事务隔离

全局事务隔离级别:
- 读未提交:默认
- 读已提交:支持
- 可重复读:支持(需要全局锁)
- 串行化:支持

写隔离

写隔离机制:
- 全局锁保证写隔离
- 避免脏写
- 支持并发写入

读隔离

读隔离机制:
- 默认读未提交
- 可配置读已提交
- 通过全局锁实现

小结

核心概念要点:

  • 全局事务:跨多个服务的分布式事务
  • 分支事务:全局事务的一部分
  • 全局锁:保证数据一致性
  • undo_log:AT 模式回滚日志
  • XID:全局事务唯一标识
  • 事务隔离:全局事务隔离级别

下一章我们将学习 AT 模式。