Seata解析-seata整体架构初探

本文基于seata 0.7.1版本

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

作为源码分析的第一篇文章,先来看一下seata的整体结构。
Seata解析-seata整体架构初探
下面依次说明每个模块的作用:

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

分布式事务解决方案中还有saga模式,不过在0.7.1版本里面没有体现。后续找其他版本在进行分析。