seata的AT、TCC、SAGA 和 XA 事务模
时间: 2023-07-10 21:10:23 浏览: 120
分布式事务之Seata XA AT实战代码
Seata支持多种分布式事务协议,其中最常用的有以下四种:
1. AT(自动补偿型):AT模式是基于数据库的存储过程实现的,它通过事务日志记录所有的数据更新操作,以便在回滚时执行相应的反向操作来达到事务回滚的目的。AT模式相对来说比较简单,但对于一些复杂的业务场景可能需要手动实现反向操作。
2. TCC(两阶段型):TCC模式是基于“预留资源”和“确认资源”的思想实现的,它将整个事务分为“Try”、“Confirm”和“Cancel”三个阶段,分别对应事务的执行、提交和回滚操作。TCC模式需要手动实现各个阶段的逻辑,相对来说比较复杂,但可以在一定程度上提高事务的并发性。
3. SAGA(补偿型):SAGA模式是基于“补偿事务”实现的,它通过记录每个事务的“补偿操作”来达到事务回滚的目的。SAGA模式相对来说比较灵活,可以适应各种复杂的业务场景,但需要手动实现每个事务的“补偿操作”,工作量比较大。
4. XA(两阶段型):XA模式是基于“两阶段提交”协议实现的,它通过协调多个事务资源的提交和回滚来达到事务一致性的目的。XA模式相对来说比较成熟,但需要支持XA协议的数据库驱动和中间件支持,同时也存在单点故障和性能瓶颈的问题。
在Seata中,可以通过配置文件来选择使用哪种分布式事务协议,例如:
```properties
# AT模式
spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.config.nacos.config-type=Nacos
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.namespace=
seata.config.nacos.groupId=SEATA_GROUP
seata.config.nacos.dataId=seata.yml
seata.enable-auto-compensate=true
# TCC模式
spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.config.nacos.config-type=Nacos
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.namespace=
seata.config.nacos.groupId=SEATA_GROUP
seata.config.nacos.dataId=seata.yml
seata.service.vgroup-mapping.my_test_tx_group=default
seata.service.default.grouplist=127.0.0.1:8091
seata.tcc.storage-mode=db
# SAGA模式
spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.config.nacos.config-type=Nacos
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.namespace=
seata.config.nacos.groupId=SEATA_GROUP
seata.config.nacos.dataId=seata.yml
seata.enable-auto-compensate=true
seata.saga.auto-proxy-target-class=true
# XA模式
spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group
seata.tx-service-group=my_test_tx_group
seata.enable-auto-data-source-proxy=true
seata.config.nacos.config-type=Nacos
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.namespace=
seata.config.nacos.groupId=SEATA_GROUP
seata.config.nacos.dataId=seata.yml
seata.tm.type=xa
```
阅读全文