Seata原理

1 Seata架构

Seata目前支持四种分布式方案,其整体架构有很多相似之处,这里从整体上介绍方案,具体每种方案见相关博客。

1.1 整体架构

Seata原理
注:此图来自seata官网

  • TC (Transaction Coordinator) 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • TM (Transaction Manager)事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager)
    资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

接下来看看AT、TCC、XA、Saga的的区别。

1.2 Seata-AT

Seata原理
注:此图来自seata官网。
Seata-AT模式

1.3 Seata-TCCSeata原理

注:此图来自seata官网。
Seata-TCC模式

1.4 Seata-Saga

Seata-Saga模式

1.5 Seata-XA

Seata原理
注:此图来自seata官网。
Seata-XA模式

2 源码简介

seata-server的源码见seata;如果要研究源码,可从以下几个类入手:

2.1 全局事务开启入口

  • GlobalTransactionalInterceptor:全局事务拦截器,TM中全局事务由此类开启,并由此类通知TC进行Global Commit/Rollback。主要参考以下方法:
    • public Object invoke(final MethodInvocation methodInvocation) throws Throwable;
      负责分布式事务的开启、提交、回滚。
  • StateMachineInstance:saga分布式事务状态机实例,用于saga分布式事务的管理。

2.2 RM请求受理入口

  • AbstractRMHandler:RM接受TC请求的主要入口。
    • public BranchCommitResponse handle(BranchCommitRequest request) ;
      处理分支提交请求。
    • public BranchRollbackResponse handle(BranchRollbackRequest request) ;
      处理分支回滚请求。

2.3 TC请求受理入口

  • AbstractTCInboundHandler:TC处理TM、RM请求的主要入口。
    • public GlobalBeginResponse handle(GlobalBeginRequest request, final RpcContext rpcContext) ;
      受理TM的begin请求。
    • public GlobalCommitResponse handle(GlobalCommitRequest request, final RpcContext rpcContext) ;
      受理TM的全局事务提交请求。
    • public GlobalRollbackResponse handle(GlobalRollbackRequest request, final RpcContext rpcContext) ;
      受理TM的全局事务回滚请求
    • public BranchRegisterResponse handle(BranchRegisterRequest request, final RpcContext rpcContext) ;
      受理RM的注册分支事务的请求
    • public BranchReportResponse handle(BranchReportRequest request, final RpcContext rpcContext);
      Saga事务模式下,state通过此方法向TC报告分支事务信息。
    • public GlobalReportResponse handle(GlobalReportRequest request, final RpcContext rpcContext)
      Saga事务模式下,state通过此方法向TC报告全局事务信息。

2.4 补偿

在DefaultCoordinator中有几个定时任务,用于失败重试或补偿,确保以上流程出异常或者系统被强行关机以后,依然能保证全局事务的准确性。

  • retryRollbacking:回滚失败后,尝试重新Global Rollback。
  • retryCommitting:提交失败后,尝试重新Global Commit。
  • asyncCommitting:和retryCommitting类似,不过针对异步的Global Commit。
  • timeoutCheck:检查全局事务是否超时。
  • undoLogDelete:异步删除undo log。

3 参考文档

Seata AT 模式

Seata XA 模式

Seata Saga模式

Seata TCC 模式

分布式事务如何实现?深入解读 Seata 的 XA 模式

分布式事务 Seata 及其三种模式详解 | Meetup#3 回顾

柔性事务解决方案之TCC

上一篇:libusb函数


下一篇:Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)