源码系列(八)-Seata源码解析
前言
-
之前项目有使用Seata中间件实现分布式事务, 最近忙里偷闲做一次总结,一方面把一些踩坑记录下来,方便自己和读者快速排错,还有就是争取做到温故而知新, 话不多说, 搞起,搞起.
-
入门知识建议参考官网: Seata官网地址
源码解析-AT模式
- 术语表
- TC (Transaction Coordinator) - 事务协调者: 维护全局和分支事务的状态,驱动全局事务提交或回滚, 就是我们启动的Seata服务端,一个单独的jvm进程
- TM (Transaction Manager) - 事务管理器: 定义全局事务的范围:开始全局事务、提交或回滚全局事务, 就是我们使用@GlobalTransactional的那个服务, 它同时也可以是RM
- RM (Resource Manager) - 资源管理器: 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚, 有异常情况需要处理的地方, 一般是被调用的服务
- 示意图, 这些知识官网上都有
- 源码下载: Seata地址,来源于全球最大同性交友网站github
- 建议先fork到自己的仓库
- 下载后的目录
- 模块作用:
- common模块: 通用的异常、工具类、线程工具、计数器、SPI、常量等
- serializer模块: 编解码相关,实现了kryo、protobuf等编解码器
- config模块: Seata中的配置中心和注册中心是分离的,实现了主流的配置中心,默认file模式,apollo,nacos,etcd3等
- core模块: 包括封装好的RPC、数据模型、通信协议、事件、认证、序列化、存储、锁等等
- discovery模块: seata-server充当的事务协调者的角色,用于管理全局事务, RM,TM通过网络通信(没错就是netty)进行事务的提交与回滚,类似与微服务这样, 所以需要一个注册中心,现在支持consul、etcd3、eureka、redis等等
- metrics模块: 统计相关的功能, 支持导出
- rm模块: resource manager相关功能的核心抽象, 上个图看一下
- rm-datasource模块: 对JDBC的扩展, 实现操作数据库相关的功能
- saga模块: 前面提到了seata是支持多种模式的, saga模式的实现
- tcc模块: 对tcc模式的支持
- tm模块: 分布式事务中事务管理者的实现, 稍后会详细介绍
- spring模块: 使用Spring注解类的功能实现
- server模块: TC的实现模块。包含不同模式的事务实现
- test模块: 单元测试
- compressor模块: 支持主流压缩模式, 像7z,zip,gzip等
- console模块: 可视化相关,整合了SpringSecurity,JWT相关