前言
我们后续解析Seata源码都是基于版本0.9.0,这个是笔者写这篇源码解析时候最新的一个tag。Seata的源码其实非常简单,后续我们会从整个服务启动、服务发现、配置加载等开始,串联起AT、TCC等事务模式,把这些过程的所有源码做一个解析。这篇文章,我们首先来了解一下Seata项目的总体概况。
项目结构
Seata包含的模块比较多,整个的模块划分比较清晰,很容易理解。
所有模块的纯代码量加起来不超过10W行,如果除去一个接口的多个实现,如:配置中心、注册中心等。真正的逻辑代码量并不多。
Seata和Dubbo一样,实现了一个简单的扩展点,用于管理一个接口下的多个实现。
下面我们先来了解一下每个模块是做什么的,在脑海里建立一个总体的大图,后续我们阅读源码的时候就不会迷糊。
codec模块
Seata的编码解码器模块,现在实现了kryo、protobuf等编解码器。
common模块
从命名就可以知道是通用模块。定义了通用的异常、工具类、线程工具、计数器等。最主要的是,这里定义了扩展点的加载类。和Dubbo很相似,Seata也使用了扩展点这种实现类的管理方式。
config模块
Seata的配置中心和注册中心是分离的,支持了市面上主流的各种配置中心。config模块主要是各种配置中心的支持源码。包括:apollo、consul、etcd3等等。其中有一个core模块,是配置的核心实现,默认提供使用 File 存储配置。
core模块
核心模块,提供了整个Seata的基础模型,包括封装好的RPC、数据模型、通信协议、事件等等。
discovery模块
Seata存在一个事务协调器(TC),用于管理全局的事务,RM、TM等模块作为SDK和业务代码在一起,但是它们现就是用的类似微服务的注册/订阅方式。因此需要一个注册中心。discovery模块就是不同注册中心的具体实现。现在支持consul、etcd3、eureka、redis等等。
metrics模块
用于统计的模块,现在的统计信息提供了对外导出的方法。
rm模块
Resource Manager的核心实现。定义了抽象实现,整个模块的代码量很少。
#####rm-datasource模块
和RM模块很像,但是它的作用是通过对 JDBC做扩展,实现了对 MySQL 等数据库的透明接入 Seata RM 的实现。代码量较多。
saga模块
对saga类型事务的实现,会在后面saga事务源码分析的时候重点介绍。
tcc模块
和saga类型,这个模块提供了TCC事务的实现。
tm模块
分布式事务中TM的实现。看过我们Seata AT模式介绍的,就会知道TM的具体作用。后面在解析具体事务源码的时候会讲到。
spring模块
Spring注解类的实现全部在这个模块
server模块
TC的实现模块。负责全局的事务协调,我们在上一篇Seata AT模式介绍中就有出现过。
test模块
Seata的Demo测试模块。
总结
Seata划分的模块很多,但是每个模块的源码很少,总共源码也不超过10W行。后续我们会在使用过程中,通过功能串联的方式,把整个过程的源码做一个详细的解析。