前言
我们在之前所介绍的一些分布式事务的理论,是需要通过具体的框架工程化的,这样才能在我们日常工作中使用。
常见的开源分布式事务框架很多,比如: Seata、EasyTransaction等等。我们在这篇文章将会介绍阿里开源的分布式事务框架Seata。
Seata这个分布式事务框架支持有多种模式,如: AT、TCC、SAGA、XA。除了AT,后面三种分布式事务模式的大致流程,我们在之前的文章中有介绍过。
Seata的模块组成
1)TM:事务发起者。定义事务的边界,负责告知 TC,分布式事务的开始,提交,回滚。
2)RM:资源管理者。管理每个分支事务的资源,每一个 RM 都会作为一个分支事务注册在 TC。
3)TC :事务协调者。负责我们的事务ID的生成,事务注册、提交、回滚等。
在Seata的AT模式中,TM和RM都作为SDK的一部分和业务服务在一起,我们可以认为是Client。TC是一个独立的服务,通过服务的注册、发现将自己暴露给Client们。
工作流程
我们用一个比较简单的业务场景来描述一下Seata AT模式的工作过程。
有个充值业务,现在有两个服务,一个负责管理用户的余额,另外一个负责管理用户的积分。
当用户充值的时候,首先增加用户账户上的余额,然后增加用户的积分。
AT流程分为两阶段,主要逻辑全部在第一阶段,第二阶段主要做回滚或日志清理的工作。其中,第一阶段流程如下: