首页 > 其他分享 >Seata RM模块与Seata Server之间的通信渠道设计

Seata RM模块与Seata Server之间的通信渠道设计

时间:2024-10-11 19:50:22浏览次数:8  
标签:Netty Seata 通信 Server RM 连接

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。

目录

1.Netty通信渠道的具体实现

1.1 客户端实现

1.2 服务端实现

1.3 消息处理

1.4 连接管理

2.通信基础

3.通信过程

3.1 连接建立

3.2 消息传递机制

4.关键技术和机制

5.通信内容


Seata RM(Resource Manager,资源管理器)模块与Seata Server(TC,Transaction Coordinator,事务协调者)之间的通信渠道设计,主要依赖于Netty这一高性能的异步事件驱动的网络应用程序框架。以下是详细的设计说明。

Seata选择Netty作为RMTC之间的通信框架,主要原因在于Netty提供了快速、高可靠性的网络通信能力。Netty支持TCP/IP协议,能够处理高并发连接,且具有良好的扩展性和灵活性,非常适合用于构建分布式事务系统的通信基础。

Seata中,RM作为客户端,与作为服务端的TC进行通信。RM主要负责管理分支事务处理的资源,向TC注册分支事务和报告分支事务的状态,并驱动分支事务的提交或回滚。为了实现这些功能,RMTC之间需要建立稳定的通信渠道,以确保事务状态信息的及时传递和处理。

1.Netty通信渠道的具体实现

1.1 客户端实现

(1)RM模块中,Netty通信客户端的实现通常封装在RMClient类中。RMClient会实例化一个RmNettyRemotingClient对象,该对象继承自AbstractNettyRemotingClient,是Netty客户端的具体实现类。

(2)RmNettyRemotingClient负责初始化Netty客户端,包括配置EventLoopGroupBootstrapNetty核心组件,以及设置消息处理器等。

(3)RM启动过程中,RMClient会调用RmNettyRemotingClientinit方法,完成Netty客户端的初始化,并建立与TC的连接。

1.2 服务端实现

(1)TC模块中,Netty通信服务端的实现通常封装在NettyRemotingServer类中。NettyRemotingServer继承自AbstractNettyRemotingServer,是Netty服务端的具体实现类。

(2)NettyRemotingServer负责监听指定的端口,接收来自RM的连接请求,并处理RM发送的事务状态信息。

(3)TC启动过程中,NettyRemotingServer会完成服务端的初始化工作,包括配置EventLoopGroupServerBootstrapNetty核心组件,以及注册事务状态信息的处理器等。

1.3 消息处理

(1)RMTC的通信过程中,消息的处理是关键环节。Netty提供了丰富的消息处理机制,包括ChannelPipelineChannelHandler等。

(2)RM在发送事务状态信息时,会将信息封装成特定的消息格式,并通过Netty客户端发送给TCTC接收到消息后,会交给相应的ChannelHandler进行处理。

(3)处理完成后,TC会将处理结果封装成响应消息,并通过Netty服务端发送给RMRM接收到响应消息后,也会交给相应的ChannelHandler进行处理。

1.4 连接管理

Netty提供了连接管理机制,包括连接的建立、维护和断开等。在RMTC的通信过程中,如果连接断开,Netty会触发相应的断开事件,RMTC可以根据需要进行重连等操作。

Seata RM模块与Seata Server之间的通信渠道设计,充分利用了Netty这一高性能的网络通信框架。通过Netty的异步事件驱动机制、高并发处理能力以及丰富的消息处理机制,RMTC之间能够建立稳定、高效的通信渠道,确保分布式事务状态信息的及时传递和处理。这一设计不仅提高了Seata系统的整体性能,也增强了系统的可靠性和可扩展性。

2.通信基础

(1)TCP连接:Seata RM模块与Seata Server之间的通信通常基于TCP协议建立连接。这种连接保证了数据传输的可靠性和顺序性。TCP协议通过三次握手建立连接,四次挥手断开连接,确保连接的可靠性和稳定性。

(2)Netty框架Seata利用Netty框架来实现高效的网络通信。Netty是一个高性能的异步事件驱动的网络应用程序框架,它提供了快速开发可维护的高性能协议服务器和客户端的能力。通过Netty框架,Seata能够高效地处理网络IO操作,确保通信的实时性和可靠性。

3.通信过程

3.1 连接建立

(1)Seata RM模块启动时,它会根据配置信息(如Seata Server的地址和端口)尝试与Seata Server建立TCP连接。

(2)连接建立后,Seata RM模块和Seata Server会进行身份验证和授权检查,只有通过身份验证的RM模块才会被接受连接。

(3)连接建立成功后,Seata RM模块和Seata Server会进行版本协商,以确保双方使用的版本兼容,避免因版本不一致而导致的通信问题。

3.2 消息传递机制

(1)一旦连接建立,Seata RM模块与Seata Server之间的通信主要是基于消息传递的方式。这些消息包括分支事务注册消息、分支事务状态报告消息等,用于实现分支事务的管理和协调。

(2)Seata RM模块会定期向Seata Server报告分支事务的状态(如开始、结束、提交、回滚等),这些信息有助于Seata Server协调全局事务的提交或回滚。

4.关键技术和机制

(1)长连接:为了减少连接建立和断开的开销,Seata RM模块与Seata Server之间通常会建立长连接。长连接可以保持一段时间内的持续通信状态,避免频繁的连接建立和断开,从而提升系统的性能和稳定性。

(2)心跳机制:为了保持连接的活跃状态并检测对方的存活状态,Seata RM模块会定期向Seata Server发送心跳消息。如果在一定时间内没有收到对方的心跳消息或响应消息,则可能认为对方已经断开连接或出现故障。心跳机制有助于及时发现并处理通信异常问题。

5.通信内容

(1)分支事务注册:当业务应用执行到需要分布式事务管理的部分时,Seata RM模块会向Seata Server注册分支事务。注册信息通常包括分支事务的ID、关联的全局事务ID、资源ID等。

(2)分支事务状态报告:在分支事务执行过程中,Seata RM模块会定期向Seata Server报告分支事务的状态。这些状态信息对于Seata Server协调全局事务的提交或回滚至关重要。

Seata RM模块与Seata Server之间的通信渠道设计是一个复杂而精细的过程,它涉及TCP连接、身份验证和授权、版本协商、消息传递机制以及关键技术和机制等多个方面。这些设计确保了Seata分布式事务系统的可靠性和高效性,使得分布式事务的管理和协调变得更加简单和高效。在实际应用中,开发者需要根据业务需求和环境配置相应的通信参数和策略,以实现最佳的性能和稳定性。

标签:Netty,Seata,通信,Server,RM,连接
From: https://blog.csdn.net/huxian1234/article/details/140309930

相关文章

  • 你的Mac电脑的terminal还是黑白的吗?快来设置一下吧
    更改ls显示目录的颜色进入terminal,进入~目录:cd~编辑.bash_profile文件:vim.bas_profile按i进入编辑态,添加以下三行代码 exportLS_OPTIONS='--color=auto' #如果没有指定,则自动选择颜色   exportCLICOLOR='Yes' #是否输出颜色exportLSCOLORS='gxfxaxd......
  • arm Linux中dma的cache管理
    概述前两周有人询问DMA下的cache操作和dma-coherent。以前零碎看过代码。临时找,还没有找到。这两天整理了调用流程,也找到了dma-coherent的用法。Linux的文档里没有详细说明dma-coherent的用法。根据代码,如果dma的设备树里有dma-coherent,Linux则认为硬件会维护cache一致性,不会在d......
  • Small Permutation Problem (Easy Version)
    算法考虑转化每个点\(p_i\)在一个平面直角坐标系中表示为点\((i,p_i)\)于是转化为一个棋盘问题,即每一个点不能在同一行/同一列\(a\)数组的限制相当于在左下角为\((0,0)\),右上角为\((i,i)\)中的正方形中,有\(a_i\)个棋子于是在每一次加入的时候,都只能在......
  • ARM Cortex-M3/M4内核架构:中断处理过程
    目录一、概述1.保存现场?什么是现场?现场包括什么?2.怎么处理异常?我们先来简单介绍下。3.又怎么恢复现场?4.异常进入流程(核心流程)二、保存现场三、恢复现场1、EXC_RETURN2、恢复现场四、异常处理优化1、末尾连锁2、延时到达3、出栈抢占五、总结一、概述中断......
  • crit: Microsoft.AspNetCore.Server.Kestrel[0] Unable to start Kestrel. Interop+Cr
    域名证书没有放在指定的位置错误信息crit:Microsoft.AspNetCore.Server.Kestrel[0]UnabletostartKestrel.Interop+Crypto+OpenSslCryptographicException:error:2006D080:BIOroutines:BIO_new_file:nosuchfileatInterop.Crypto.CheckValidOpenSslHandle(Saf......
  • 关于Transformer的相关问题
    ......
  • Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
    作者:元泊引言背景信息随着移动互联网技术的持续演进与全民互联网时代的深入,用户在Android、iOS应用程序、小程序、H5游戏及网页等多元化平台上的交互时长显著增长。这一趋势加剧了用户体验(UX)场景的复杂性,并对跨设备及多样网络环境下的性能监控提出了更高要求。在此背景下,深......
  • 浅谈云原生--微服务、CICD、Serverless、服务网格
    往期推荐 浅学React和JSX-CSDN博客一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】-CSDN博客一文入门大数据准流式计算引擎Spark【万字详解,全网最新】_大数据spark-CSDN博客目录1.云原生概念和特点2.常见云模式3.云对外提供服务的架构模式3.1IaaS(Infrast......
  • 在K8S中,各模块如何与APlServer通信?
    在Kubernetes(K8s)中,各个模块与APIServer的通信是集群正常运作的关键。以下详细说明了各模块如何与APIServer进行通信:1.通信方式KubernetesAPIServer提供了一个统一的RESTful接口,用于集群内所有组件之间的通信。任何想要操作集群资源(如Pods、Services、ConfigMaps等)的组件,都......
  • sqlserver将database从C盘迁移到E盘
    --备份backupdatabasehyyytodisk='E:\MicrosoftSQLServer\BackUp\hyyy.bak';--查询路径selectnameas[databaseName],physical_nameas[filePath],type_descas[filetype],state_descfromsys.master_filesWHEREdatabase_id=DB_ID('hyyy'......