一、AT 模式概述
AT (Automatic Transaction) 模式是 Seata 中最常用的分布式事务模式,它通过自动生成反向 SQL 来实现事务的回滚,对业务代码侵入性极小。
二、核心配置详解
1. 全局配置 (registry.conf)
# 注册中心配置
registry {
type = "nacos" # 支持 nacos、eureka、redis、zk、consul、etcd3、sofa
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
# 配置中心
config {
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
dataId = "seata-server.properties"
}
}
2. 客户端配置 (application.yml)
seata:
enabled: true
application-id: order-service # 应用唯一标识
tx-service-group: my_test_tx_group # 事务组名称
# 自动数据源代理
enable-auto-data-source-proxy: true
data-source-proxy-mode: AT # AT 模式
# 客户端配置
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: ""
data-id: seata-client.properties
# 注册中心配置
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: ""
cluster: default
# 客户端详细配置
client:
rm:
# 异步提交缓存队列长度
async-commit-buffer-limit: 10000
# 一阶段结果上报 TC 重试次数
report-retry-count: 5
# 自动刷新缓存中的表结构
table-meta-check-enable: true
# 分支事务与其它全局回滚事务冲突时锁策略
report-success-enable: false
# 是否上报一阶段成功
saga-branch-register-enable: false
# saga json parser
saga-json-parser: fastjson
# 一阶段全局提交结果上报 TC 重试次数
saga-retry-persist-mode-update: false
# 默认false,ture会提升性能
saga-compensate-persist-mode-update: false
# TCC 资源自动清理时间(小时)
tcc-action-interceptor-order: -2147482648
tm:
# 一阶段全局提交结果上报 TC 重试次数
commit-retry-count: 5
# 一阶段全局回滚结果上报 TC 重试次数
rollback-retry-count: 5
# 默认全局事务超时时间(毫秒)
default-global-transaction-timeout: 60000
# 降级开关,默认 false
degrade-check: false
# 服务自检周期(毫秒)
degrade-check-period: 2000
# 允许降级检查的最小业务并发数
degrade-check-allow-times: 10
# 自检失败后开启降级的持续时间(毫秒)
interceptor-order: -2147482648
undo:
# 是否开启二阶段回滚镜像校验
data-validation: true
# 二阶段回滚镜像校验失败的处理方式
log-serialization: jackson
# undo 序列化方式:jackson、fastjson、kryo
log-table: undo_log
# 自定义 undo 表名
only-care-update-columns: true
# 是否只生成被更新字段的镜像
compress:
enable: true
# 是否压缩 undo_log
type: zip
# 压缩类型
threshold: 64k
# 压缩阈值
# 负载均衡配置
load-balance:
type: RandomLoadBalance # 负载均衡类型
virtual-nodes: 10 # 虚拟节点数
3. 服务端配置 (Seata Server)
# 存储模式
store.mode=db # file、db、redis
# 数据库存储配置
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useSSL=false
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事务、日志存储配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
三、使用示例
1. 数据库准备
每个业务库都需要创建 undo_log 表:
CodeBlock Loading...
2. 业务代码
CodeBlock Loading...
四、底层实现原理
1. 核心组件架构
TC (Transaction Coordinator) - 事务协调器
├── 全局事务管理
├── 分支事务管理
└── 全局锁管理
TM (Transaction Manager) - 事务管理器
├── 全局事务开启
├── 全局事务提交
└── 全局事务回滚
RM (Resource Manager) - 资源管理器
├── 分支事务注册
├── 分支事务上报
└── 分支事务提交/回滚
2. AT 模式执行流程
第一阶段(执行业务 SQL)
CodeBlock Loading...
核心数据结构
CodeBlock Loading...
第二阶段(提交或回滚)
提交流程:
CodeBlock Loading...
回滚流程:
CodeBlock Loading...
反向 SQL 生成逻辑
CodeBlock Loading...
3. 全局锁机制
CodeBlock Loading...
五、性能优化配置
CodeBlock Loading...
六、常见问题
- 脏写问题:通过全局锁和数据校验解决
- 性能问题:使用异步提交、undo_log 压缩
- undo_log 膨胀:定期清理历史数据
CodeBlock Loading...
AT 模式通过自动生成前后镜像和反向 SQL,实现了对业务代码零侵入的分布式事务解决方案,是 Seata 最推荐使用的模式。