Seata AT模式:技术细节与最佳实践
2024-01-25 21:50:13
在分布式系统中,跨多个服务的业务事务需要保持原子性,即要么所有服务都成功完成事务,要么所有服务都回滚事务,不能出现部分成功、部分失败的情况。为了实现这种原子性,Seata 提供了四种事务模式:AT、XA、TCC 和 Saga。其中,AT 事务模式是阿里体系独创的事务模式,对业务无侵入,也是 Seata 用户最多的一种事务模式,兼具易用性与高性能。
在本文中,我们将深入剖析 Seata AT 模式的运作原理,涵盖核心技术细节、配置要点和最佳实践,帮助您充分理解和掌握 AT 模式的应用,以实现分布式事务的可靠与高效。
1. Seata AT 模式原理
AT 模式是 Seata 独创的事务模式,它结合了 XA 和 TCC 的优点,对业务代码无侵入,同时兼顾了性能和易用性。AT 模式的核心思想是将业务代码划分为两部分:业务逻辑代码和事务协调代码。业务逻辑代码负责执行具体的业务操作,而事务协调代码负责管理事务的开始、提交和回滚。
AT 模式的运作流程如下:
- 客户端向 TC (Transaction Coordinator) 发起一个事务请求,TC 为该事务分配一个全局事务 ID (XID)。
- TC 将 XID 传递给客户端,客户端将 XID 存储在本地。
- 客户端执行业务逻辑代码,并在每个操作之前将 XID 传递给参与的事务资源管理器 (RM)。
- RM 收到 XID 后,将在本地创建一个分支事务,并将 XID 存储在分支事务中。
- 客户端执行完所有业务逻辑代码后,向 TC 发起提交事务请求。
- TC 收到提交事务请求后,向所有参与的 RM 发送提交分支事务请求。
- RM 收到提交分支事务请求后,将提交本地分支事务,并向 TC 发送提交成功或失败的消息。
- TC 收到所有参与 RM 的提交成功消息后,提交全局事务。
如果在执行业务逻辑代码的过程中发生异常,客户端将向 TC 发起回滚事务请求。TC 收到回滚事务请求后,向所有参与的 RM 发送回滚分支事务请求。RM 收到回滚分支事务请求后,将回滚本地分支事务,并向 TC 发送回滚成功或失败的消息。TC 收到所有参与 RM 的回滚成功消息后,回滚全局事务。
2. Seata AT 模式配置
要使用 Seata AT 模式,需要在应用程序中配置 Seata 客户端和 TC。Seata 客户端负责与 TC 通信,并管理本地事务。TC 负责协调全局事务。
Seata 客户端的配置项如下:
- service.vgroup_mapping.my_test_tx_group=default :指定事务组的名称,用于区分不同的业务场景的事务。
- tx_service_group=my_test_tx_group :指定当前服务的名称,用于标识当前服务属于哪个事务组。
- transport.mode=mq :指定 TC 与 Seata 客户端之间的通信方式,默认为 MQ。
- mq.msg.producer.group=seata-group :指定 MQ 的生产者组,用于区分不同的业务场景的事务消息。
- mq.msg.consumer.group=seata-group :指定 MQ 的消费者组,用于区分不同的业务场景的事务消息。
- mq.rocketmq.nameServerAddr=127.0.0.1:9876 :指定 RocketMQ 的 Name Server 地址。
TC 的配置项如下:
- server.port=8091 :指定 TC 监听的端口。
- transport.shutdown.timeout=60000 :指定 TC 关闭时的超时时间。
- datakeeper.dataFileMaxSize=50 :指定 TC 数据文件的大小限制,单位为 MB。
- undo.dataFileMaxSize=50 :指定 TC 回滚日志文件的大小限制,单位为 MB。
- registry.redis.address=127.0.0.1:6379 :指定 TC 与 Redis 的连接地址。
3. Seata AT 模式最佳实践
在使用 Seata AT 模式时,可以遵循以下最佳实践:
- 将业务逻辑代码和事务协调代码分开,以提高代码的可维护性和可扩展性。
- 使用 Seata 提供的事务注解,如
@GlobalTransactional
和@Transactional
,以简化事务管理。 - 将事务资源管理器 (RM) 与 Seata 集成,以支持分布式事务。
- 在分布式事务中使用幂等操作,以避免出现数据不一致的情况。
- 定期清理 TC 和 RM 中的数据,以防止数据堆积。
4. 总结
Seata AT 模式是一种易用且高性能的分布式事务模式,对业务代码无侵入,适用于各种业务场景。通过遵循本文介绍的原理、配置要点和最佳实践,您可以充分理解和掌握 AT 模式的应用,并将其应用到您的分布式系统中,以实现分布式事务的可靠与高效。