Seata解析-seata整体架构初探

x33g5p2x  于2021-12-21 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(662)

本文基于seata 1.3.0版本

从本文开始,我计划分析seata的源代码,学习一下分布式事务的几种实现方式。我分析的版本是基于seata 1.3.0。
下图显示的是seata整体的代码量,我们看到java文件有1205个,行数有130701。分析的整体工作量相对来说还是比较大的。

作为源码分析的第一篇文章,先来看一下seata的整体结构。

下面依次说明每个模块的作用:

  • all:里面只有一个pom文件,表示seata的依赖包
  • bom:也是只有一个pom文件,all模块的pom文件指定了依赖了哪些包,bom模块的pom文件指定了seata依赖管理的包,也就是pom文件的<dependencyManagement>节点内容。
  • common:通用模块。定义了通用的异常、工具类、线程工具、计数器等。最主要的是,这里定义了扩展点的加载类。和Dubbo很相似,seata也使用了扩展点这种实现类的管理方式。
  • compressor:压缩模块,该模块定义多种压缩格式,比如7z,bzip2等。可以对消息压缩。
  • config:用于连接和操作配置中心,seata支持目前市面上主流的配置中心,包括apollo,consul,zk等。每种配置中心在config模块下创建了对应的子模块。配置文件的解析在本模块的core子模块中完成。
  • core:从名字上也能看出这个seata的核心模块,定义了事件,协议,Netty启动等。很多模块都要依赖该模块。
  • discovery:定义了连接注册中心的客户端,在《Seata解析-seata部署启动初体验》提到了TC、TM、RM,TC是事务的协调者,与TM、RM是分开部署的,所以他们之间是用过注册中心互相发现的。
  • distribution:只有一个pom文件,用于对seata-server模块打包使用。
  • integation:integation只是一个目录,下面分了几个模块,每个模块都是一个RPC通讯工具。
  • metrics:统计模块,从名字上就可以看出,这个模块用于统计seata的一些信息,包括访问等。
  • rm:资源管理器。与业务代码部署在一起。
  • rm-datasource:seata需要保存每次的数据库更新记录,该模块会解析SQL,并保存更新前的数据和更新后的数据,以及事务回滚时数据的还原。数据源代理类DataSourceProxy就在该模块。
  • saga:saga模式的实现。
  • script:该模块定义了seata需要的脚本和配置文件。
  • seata-spring-boot-starter:用于与spring-boot结合。
  • serializer:序列化模块,同于将发送的消息序列化和反序列化。
  • server:TC模块的实现。用于维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • spring:seata使用的注解,在该模块下。
  • tcc:TCC是分布式事务的一种解决方案,该模块提供了TCC事务的实现机制。
  • test:测试模块。
  • tm:定义全局事务的范围:开始全局事务、提交或回滚全局事务。与rm在一起部署。

相关文章