当前位置: 首页 > news >正文

seata原理源码分析(二)事务模式-TCC(一) 织入拦截器,rpc,资源分析

简介

        SEATA是阿里巴巴开源的分布式事务解决方案,用于解决分布式系统中的数据一致性问题。分布式系统,数据存储在不同的资源管理器(数据库),需要保证分布式事务的原子性,业界比较常用xa,数据库标准实现,严格的一致性,但性能差,不符合当前互联网系统高吞吐,高并发的要求。Seata提供最终一致性的分布式事务解决方案,牺牲严格一致性,允许一定时间的不一致,获得高性能。

         seata支持tcc,saga,at,xa ,本文分析seata的tcc事务模式,based seata v2.0.0,

分3篇:1 织入拦截器, rpc,资源分析

             2 事务流程,包括tm启动全局事务,rm注册事务分支,执行业务逻辑,rm报告分支状态,tm结束事务,tc通知rm结束事务,rm结束事务

             3 健壮性 fence组件,幂等、悬挂和空回滚

关键词

分布式事务

严格一致性

最终一致性

Transaction Coordinator(TC):负责全局事务的生命周期管理和协调,保证所有分支事务的一致性。

Transaction Manager(TM):负责分支事务的提交和回滚,接受TC的指令并执行相应的全局事务操作。

Resource Manager(RM):负责本地事务的提交和回滚,与TM进行通信,执行相应的分支事务操作。

参考资料

seata官方网站 https://seata.apache.org/

技术架构

上图是seata的技术架构,分4个内容部分,事务框架流程,应用端组件(左侧),服务组件(右侧),功能组件

事务框架流程

技术架构图展示事务框架流程,

1、开启全局事务,使用@GlobalTransactional方法调起执行切面,向TC注册全局事务,TC生成XID,返回给TM

2、分支事务注册,通过切面向业务服务置入逻辑,业务服务调用前执行,注册分支事务,从TC获得分支事务ID,TC根据XID将分支事务与全局事务关联

3、分支事务报告,业务服务执行自身业务逻辑,例如执行sql,写入数据库,若成功,通知TC分支事务成功

步骤3,4通常多个业务服务

4、全局提交事务或回滚,分支服务全部成功,TM通知TC全局事务成功;否则,通知TC全局事务失败;

5、分支事务提交或回滚, TC收到全局事务的结果,若成功,则通知RM成功,RM收到通知后执行清理工作;如果失败了,则RM进行回滚。

总述,seata的框架流程是通用分布式事务流程,各模式”塞”进框架内,为了维持表面上的“团结”,seata内部使用了很多的设计,下面及后面章节详细分析。

TCC

本节分析tcc模式的原理和源码

织入tcc拦截器

织入tcc拦截器是seata初始化的核心工作,seata使用aop机制,无侵入方式安插自身的事务逻辑到用户的业务

上图是织入拦截器相关用例,大致两个事情

  1. 分析资源(bean,方法),返回合适切面,织入切面
  2. 向tc注册

类图

下图织入拦截器的类图

GlobalTransactionScanner 继承AbstractAutoProxyCreator,该类是spring aop包的成员,主要方法wrapIfNecessary,继承类覆盖该方法,按自身需要,通常类类型或注解,对类型织入切面,seata使用该机制织入切面

@GlobalTransactional@TwoPhaseBusinessAction  tcc相关的两个注解,前者织入全局事务的拦截器GlobalTransactionalInterceptorHandler;后者插入分支事务的拦截器TccActionInterceptorHandler

AdapterSpringSeataInterceptor  spring aop的拦截器适配实现,适配seata自身机制的handler,这样设计可以让seata自身的handler使用其他织入框架,如,google juice

GlobalTransactionalInterceptorHandler 处理事务全局的拦截器,后面章节详细分析

TccActionInterceptorHandler  tcc分支事务的拦截器

InterfaceParser分析bean的类型信息,注解信息,选择适当的拦截器,tcc模式的InterfaceParser实现是TccActionInterceptorParser,该分析器还负责资源注册

rpc框架

本节简单介绍rpc框架,研读过阿里系组件源码的都知道,阿里的开源组件的rpc设计很类似,如之前研究过的raft组件dledger,sentinel,flink,总体来说3要素,NettyRemotingClient,NettyRemotingServer,处理器

Seata,tc是rpc的server端, tm,rm是client

TC侧

tc处理器处理来自tm,rm的消息

NettyRemotingServer

上图是tc处理tm,rm远程请求的处理器的注册点,也是分析tc端关键入口,从消息类型(MessageType) 知道消息的用途,

ServerOnRequestProcessor只是门面,实际处理交给TransactionMessageHandler处理,该类的实现类DefaultCoordinator,消息处理代码有点绕,主要是适配几种模式,获取上下文,这里不深入分析。

TM侧

相应地,tm侧处理器注册,可以看到消息类型大部分带“RESULT”,处理tc返回的消息

TmNettyRemotingClient

RM侧

rm 资源管理器,消息处理器处理来自tc的指令或者处理结果

RmNettyRemotingClient

资源分析

本节介绍资源分析,资源分析是配合aop机制,分析spring管理的bean,筛选出目标bean,获取 seata注解,方法类型信息,决定哪种事务模式,使用哪个拦截器

上图资源分析的类图,分析器主要作用是返回织入的拦截器

GlobalTransactionScanner前面介绍过,负责检测spring管理对象是否参与分布式事务,织入seata逻辑,检测工具是资源(对象)分析器,InterfaceParser

DefaultInterfaceParser使用spi机制聚合分析器实现,遍历探测,直到解释成功。

GlobalTransactionalInterceptorParser 分析全局事务,查看方法是否有@GlobalTransactional,返回全局事务拦截器GlobalTransactionalInterceptorHandler,负责处理全局事务,全局锁

TccActionInterceptorParse 检查方法是否有@TwoPhaseBusinessAction,该注解带tcc的commit/rollback方法名称的属性,返回TccActionInterceptorHandler,tcc的拦截器

GlobalTransactionalInterceptorHandler是全局事务拦截器,所有事务模式都使用到,TccActionInterceptorHandler是tcc拦截器

*xa/at没有分支的切面,而是使用jdbc代理织入分支逻辑

> 注册资源

tcc资源是资源管理器服务,注册资源是注册资源管理器服务,tcc模式注册资源在分析资源里,

*xa/at是在数据源代理注册,tcc是服务型的模式,不需要代理数据源,因此放在分析资源方法。

tcc注册资源做两个事情,

1 本地缓存tcc注解定义的commit/rollback方法,后续分支的commit和rollback使用到

2 注册到tc,后续tc与rm通讯

!注意区分,资源注册和分支注册,资源是参与事务的角色,但此时并不涉及事务,而分支注册已是事务中,参与者是资源

系列

  1. 事务框架流程 分析参与框架流程的组件,tm,rm,协调core  完成
  2. 事务模式 tcc 本文
  3. 事务模式at  NEXT
  4. 事务模式xa  NEXT
  5. 事务模式saga  saga是处理超长事务模式,事务分成多段,执行中记录执行路径,执行过程遇到异常,根据策略可向前重试,或向后回滚,需要辅助记录,seata的解决方案是预置长事务流程,本人觉得可用性不强,本系列不作分析
http://www.dtcms.com/a/474829.html

相关文章:

  • 网站建设创意广告苏州北京网站建设
  • TwinCAT3配置OPC UA Server过程总结
  • 做网站需要用什么软件百度商店应用市场
  • 以Copilot重构CRUD流程为例
  • 网站备案证书放到哪里网站需要服务器
  • 【网络工程师】企业网络骨干链路冗余与环路避免实践
  • MATLAB双缝干涉实验模拟程序
  • 做网站现在用什么语言长沙seo网络优化
  • 创建对象内存分析
  • linux学习——总结
  • 上海网站搜索引擎优化如何搭建网站建设环境
  • 词根学习笔记 | Ag系列
  • IMX6ULL学习笔记_Boot和裸机篇(6)--- IMX6ULL简单SHELL以及SEGGER ES的Printf和字节对齐问题
  • 《C++二叉引擎:STL风格搜索树实现与算法优化》
  • 营销网站售后调查百度竞价调价软件
  • 给网站设置关键词重庆建网站一般多少钱
  • Seo建设网站的步骤郑州外贸网站建设及维护
  • Java内部类:全面解析与实践指南
  • 建设银行乾县支行网站网络游戏美术设计专业
  • 织梦怎么修改网站模板自己怎么做关键词优化
  • 赵奢的军事才能、谋略分析及对当世的影响
  • windows应用商店手动安装应用
  • 字体排版设计网站公司网站搜索优化
  • 未来做那些网站致富官方网站下载免费软件
  • 公司建立自己的网站吗wordpress文章状态
  • Python子类属性扩展指南:从基础到高级实践
  • 阜阳市城乡建设 档案馆网站多渠道营销平台与crm
  • 力扣138随机链表复制(最本质问题解决:random指针)
  • 手机网站开发还是调用个人作品网站策划书
  • 工程经济对折现率选择的理论、方法与行业实践研究