关注性能与架构公众号,了解更多相关信息。
1. Seata 概述
Seata(Simple Extensible Autonomous Transaction Architecture)是一个由feascar重命名而来的分布式事务框架,由阿里开源。它采用二阶段提交模式,已在GitHub上获得了12267颗星的认可,且项目非常活跃,最新提交记录频繁。
在单体应用中,业务调用多个模块使用同一数据源时,本地事务保障了事务的一致性。但在微服务架构中,各个模块拥有独立的数据源和微服务,Seata如何处理这种情况呢?
2. Seata 工作原理
Business作为业务,通过注解标识自己为一个全局事务,即TM(事务管理者)。它向TC(事务协调器,一个独立运行的服务)请求开启全局事务,TC会生成一个全局事务ID(XID)并返回给Business。
Business获得XID后,开始调用微服务,如Storage。Storage接收到XID,知道自己的事务属于这个全局事务。它执行业务逻辑并操作本地数据库,同时将自己的事务注册到TC作为这个XID下的一个分支事务,并上报自己的事务执行结果。
当各个微服务都执行完成后,TC能够知道XID下各个分支事务的执行结果。Business根据结果决定是提交还是回滚全局事务。
重要机制
(2)RM与TC的交互:RM通过监控拦截JDBC实现与TC的自动交互,例如在开启本地事务时自动向TC注册、生成回滚日志并上报执行结果。
(3)二阶段回滚失败的处理:若某个RM在回滚时挂掉,TC会记录该失败并等待该微服务重新正常运行后再次执行全局回滚。
3. Seata 核心组件
回顾一下Seata的核心组件:
- 事务协调器TC:维护全局和分支事务的状态,指示全局提交或回滚。
- 事务管理者TM:开启、提交或回滚一个全局事务。
- 资源管理者RM:管理执行分支事务的资源,向TC注册分支事务、上报分支事务状态、控制分支事务的提交或回滚。
4. Seata 工作流程示例
以一个分支事务的执行过程为例,详细梳理Seata的工作流程。包括一阶段的解析SQL、查询前镜像、执行业务SQL、查询后镜像、插入回滚日志、向TC注册分支等步骤,以及二阶段的回滚和提交过程。
在使用Seata的AT模式时,其操作简便且对业务代码无侵入性。但需要注意的是,目前Seata的文档相对较少,网上相关资料也不多,因此在使用过程中遇到问题可能需要查看源码和分析原理。
虽然Seata主要支持AT模式,但同时也提供了TCC和Saga模式。
5. 小结
Seata是一个功能强大的分布式事务框架,通过简单的操作就能实现微服务架构下的跨服务事务管理。其AT模式自动化程度高,使用方便。由于文档相对较少,使用过程中可能需要额外的学习和探索。