Nacos2.2.3-SDK注册临时实例/AP同步过程
2024-04-12 18:00:19 0 举报
登录查看完整内容
整理了nacos2.2.3与服务端建立rpc连接/注册服务/服务端AP同步的大致流程
作者其他创作
大纲/内容
客户端连接信息监听器(ClientConnectionEventListenerRegistry)
自动装配
InstanceRequestHandler存储服务到对应的客户端管理器中;
其中监听者之一用于管理客户端连接的存储和删除(ConnectionBasedClientManager)
startVerifyTask
订阅者(Subscriber)提供事件订阅、事件处理等方法
添加到延迟定时任务中:(启动时初始化每0.1秒执行一次)并根据事件类型不同推送不同的协议请求类型到服务端节点
是否正常
发布订阅-事件通知机制
有
项目启动
客户端版本为0或者验证版本和本地版本一致
发送事件:Connection
ClientChangedEvent - CHANGEClientDisconnectEvent - DELETEClientVerifyFailedEvent - ADD
是
启动时加载两个发布rpc服务的类,GrpcSdkServer用于与客户端的rpc交互,GrpcClusterServer用于服务端集群各节点间的rpc交互
服务端处理部分AP全量pull/全量验证
RPC
监听容器启动完成事件
注册请求处理器:连接重置请求处理器(ConnectResetReqestHandler)客户端探测处理器(暂无实际用途)(ClientDetectionRequest)
否,发送事件:ClientEvent.ClientVerifyFailedEvent
查询本服务管理的客户端信息(即协议数据);查询集群其他节点服务列表;异步+循环+rpc+回调,发送DistroDataRequest请求,每次推送一个协议数据到服务节点上进行验证;回调方法里面记录失败次数;
读取配置1、初始化NacosNamingMaintainService: 1.1、读取注册列表serverList,从list随机选取一个index作为当前客户端连接地址; 1.2、鉴权检查;2、初始化NacosNamingService: 2.1、与服务端建立rpc连接; 2.2、健康检查与重连;
请求:HealthCheckRequest
启动协议数据验证定时任务,每5秒执行一次
startLoadTask
发布事件:ClientEvent.ClientDisconnectEvent
结束
客户端建连过程
服务端处理部分AP增量同步
DistroDataRequestHandler某服务节点接收到数据,根据操作类型进行逻辑处理:ADD/CHANGE:同步协议数据(客户端连接信息)到本服务节点上;DELETE:删除本服务节点上的客户端连接信息,推送客户端断连事件;VERIFY:验证协议数据和本节点维护的客户端数据进行版本比较
rpc请求建立连接
异步线程 + while循环
启动时监听Spring上下文刷新事件
否
处理:DistroDataRequest
处理:InstanceRequest
发送事件:ClientEvent.ClientChangedEventClientOperationEvent.ClientRegisterServiceEventMetadataEvent.InstanceMetadataEvent
调用NacosNamingService.registerInstance完成自动注册
反射加载所有的ReusgtHandler(请求处理器)
处理:HealthCheckRequest
处理:DistroDataRequest(VERIFY)
被请求服务节点返回的客户端连接信息
发送:DistroDataRequest(VERIFY)
选取当前index+1的地址进行rpc连接
发布者(EventPublisher)提供注册监听者、发布事件等方法
查询集群其他节点服务列表;循环+异步+rpc,发送DistroDataRequest请求到每个服务节点上,获取客户端快照数据(仅临时实例);把获取到的数据同步到本服务的客户端连接信息中;
为rpc服务绑定requestAcceptor(服务请求接收器)
发送:DistroDataRequest(CHANGE/DELETED/ADD)
GrpcBiStreamRequestAcceptor如果请求类型是ConnectionSetupRequest,则发起建立连接的逻辑;并存储连接信息到客户端管理器中
服务端启动
启动异步线程,全量同步一次数据(只执行一次,失败接着执行直到成功)
客户端注册过程
是否到了健康检查时间
2.1 同步
发送:DistroDataRequest(SNAPSHOT)
每个请求都有一个请求处理器去处理请求 -> 请求对应的处理器HealthCheckRequest -> HealthCheckRequestHandlerInstanceRequest -> InstanceRequestHandlerDistroDataRequest -> DistroDataRequestHandler......ConnectionSetupRequest 比较特殊,由GrpcBiStreamRequestAcceptor去接收处理
是否成功
无
AP大致过程:节点服务启动后:1、全量pull同步:从其他节点获取一次全量客户端信息同步到本地,只成功执行一次,失败则一直尝试直到成功;2、全量push验证:定时任务不断地把本地节点的客户端信息,全量推送到其他服务节点进行验证,验证失败则发送事件;3、增量push同步:当监听到【新客户端连进来】、【客户端断连】、【验证失败(说明客户端版本在各节点可能不一致)】三个事件,则主动push本地客户端到其他节点进行同步;
监听事件
发布rpc服务(BaseRpcServer)
发送重连消息
发送:InstanceRequest
处理:DistroDataRequest(SNAPSHOT)
通过index+1的方式轮训选取新地址 或 使用重连消息指定的地址
启动AP协议(DistroProtocol)
2.2 异步
是否有重连消息
处理:ConnectionSetupRequest
是否非集群;是否非临时实例;是否不是本服务管理的客户端;
举例:A类为订阅了S事件的订阅者;B类为S事件的发布者;项目启动后发布者会加载所有订阅者,注册到订阅集合中;当业务逻辑执行到B需要发布事件S,发布者会根据事件类型给对应的订阅者A推送事件S,A类拿到事件后进行相应处理;
HealthCheckRequestHandler健康检查,服务端简单返回一个应答;通过切面记录切点,并检查tpc连接;
请求:ConnectionSetupRequest
接收器会根据请求类型获取不同的请求处理器进行处理
监听器(DistroClientDataProcessor)监听事件:客户端连接变更事件(ClientEvent.ClientChangedEvent)客户端断连事件(ClientEvent.ClientDisconnectEvent)与其他服务端验证数据失败事件(ClientEvent.ClientVerifyFailedEvent)
注册客户端连接事件监听器(ClientConnectionEventListener)
回调判断是否成功
发送健康检查请求,判断当前连接是否正常
收藏
0 条评论
回复 删除
下一页