通信链路改造sc、webserver链路改造设计.md

大纲

项目概述

现状分析

目标

困难点

技术方案

异常场景

1. 网络异常

  • 原因:客户端A/B或sc-core网络不稳定,导致消息传输失败。
  • 解决方案:实现重试机制和超时控制,确保消息能够在网络恢复后成功传输。

2. 客户端注册失败

  • 原因:客户端信息错误、sc-core服务不可用或达到连接数上限。
  • 解决方案:检查客户端信息的正确性,确保sc-core服务运行正常,并考虑扩展服务能力以支持更多客户端。

3. 消息转发失败

  • 原因:目标客户端不在线、sc-core内部错误或消息格式不兼容。
  • 解决方案:在sc-core中实现客户端在线状态检测,对内部错误进行异常捕获处理,并确保消息格式的统一和兼容性。

4. 响应超时

  • 原因:B处理请求耗时过长或sc-core到B的网络延迟。
  • 解决方案:优化B处理逻辑的性能,提高响应速度,并在A端实现超时重试机制。

5. 数据一致性问题

  • 原因:在分布式环境下,客户端状态更新可能不同步。
  • 解决方案:实现客户端心跳机制,定期同步客户端状态,确保sc-core持有的客户端信息准确。

6. 安全性问题

  • 原因:传输数据未加密,存在被截获的风险。
  • 解决方案:使用TLS加密gRPC通信,确保数据传输的安全性。

7. 资源竞争和泄漏

  • 原因:并发处理不当导致的资源竞争或未正确释放资源导致的内存泄漏。
  • 解决方案:使用锁或其他并发控制机制管理资源访问,确保goroutine安全;及时释放不再使用的资源,避免内存泄漏。

8. 服务降级与熔断

  • 原因:sc-core负载过高,无法处理更多请求。
  • 解决方案:实现服务降级策略,在系统负载过高时,暂时拒绝非关键请求;使用熔断机制,防止系统完全不可用。

9. 服务发现问题

  • 原因:客户端或服务端在动态环境下IP变化,导致无法正常通信。
  • 解决方案:引入服务注册与发现机制,客户端和服务端动态注册自己的地址信息,保证通信地址的实时更新。

项目概述

现状分析

总控、引擎、插件跨节点通信链路

graph LR
	subgraph Sc[总控]
		sc
		sv[可视化 sv]
		installer-manager[引擎安装 manager]
	end
	
	subgraph Se[流量引擎]
        subgraph Sem[流量引擎 管理节点]
            installer-agent[引擎安装 agent]
            webserver[Webserver]
            admin_dam[admin Dam]
            apiserver[Apiserver]
            admin_ha[admin HA]
			nexus_m[Nexus]
			global_plugin_server[global-plugin-server]
        end

        subgraph Sew[流量引擎 工作节点]
            data_dam[data Dam]
            nexus_w[Nexus]
            envoy[Envoy]
        end
        
        subgraph Ses[流量引擎 调度节点]
        	nexus_s[Nexus]
        	data_ha[Data HA]
        end
	end
	
	installer-manager -->|vip/nodeIP:8099|installer-agent
	installer-manager -->|vip:6898|admin_ha
	sv -->|vip:1234|admin_dam
	sv -->|vip:8899|admin_dam
	sv -->|vip:8299|webserver
	sc -->|vip:8229|webserver	
	
	installer-agent -->|nodeIP:8098|installer-manager
	data_dam -->|nodeIp:4150|sv
	
	data_ha -->|nodeIp:6443| apiserver
	webserver -->|nodeIp:9001|data_dam
	webserver -->|nodeIp:8000| nexus_m & nexus_s & nexus_w
	envoy -->|vip:7878 7978| global_plugin_server
	
	%%installer-agent -->|vip:6443|apiserver

结论: 可以看出来现有的通信链路有两个不符合设计要求的点 1. 通信建立连接方向为总控端到引擎端 2. 通信链路不规则,各个组件缺乏管制,随意建立链接。

缺点很明显,1 会导致与实际客户部署场景不吻合 2 会导致后期运维困难、系统维护困难、系统开发成本提高等。

目标

改造后总控引擎通信链路(不算引擎内部)

graph LR
	subgraph Sc[总控]
		sc[sc]
		core[core *:20111]
		sv[可视化 sv]
		installer-manager[引擎安装 manager]
	end
	
	subgraph Se[流量引擎]
        subgraph Sem[流量引擎 管理节点]
            %%installer-agent[引擎安装 agent]
            webserver[Webserver]
            admin_dam[admin Dam]
            apiserver[Apiserver]
            admin_ha[admin HA]
			nexus_m[Nexus]
			global_plugin_server[global-plugin-server]
        end

        subgraph Sew[流量引擎 工作节点]
            data_dam[data Dam]
            nexus_w[Nexus]
            envoy[Envoy]
        end
        
        subgraph Ses[流量引擎 调度节点]
        	nexus_s[Nexus]
        end
	end
	
	%%installer-manager -->|vip/nodeIP:8099|installer-agent
	%%installer-manager -->|vip:6898|admin_ha
	%%sv -->|vip:1234|admin_dam
	%%sv -->|vip:8899|admin_dam
	%%sv -->|vip:8299|webserver
	%%sc -->|vip:8229|webserver	
	sc --> core
	webserver --> core

	sv --> core
	%%admin_dam ---> webserver
	admin_dam ---> |*:29120| sv
	
	installer-manager --> core
	%%admin_ha ---> webserver
	%%installer-agent ---> core
	
	installer-manager -->|nodeIp:22 |Se
	%%installer-agent -->|nodeIP:8098|installer-manager
	%%data_dam -->|nodeIp:4150|sv
	%%data_dam -->|nodeIp:9001|webserver
	%%webserver -->|nodeIp:8000| nexus_m & nexus_s & nexus_w
	%%envoy -->|vip:7878 7978| global_plugin_server
	%%installer-agent -->|vip:6443|apiserver

改造后总控引擎通信链路(算引擎内部)

graph LR
	subgraph Sc[总控]
		sc[sc]
		core[core *:20111]
		sv[可视化 sv]
		installer-manager[引擎安装 manager]
	end
	
	subgraph Se[流量引擎]
        subgraph Sem[流量引擎 管理节点]
            %%installer-agent[引擎安装 agent]
            webserver[Webserver]
            admin_dam[admin Dam]
            apiserver[Apiserver]
            admin_ha[admin HA]
			nexus_m[Nexus]
			global_plugin_server[global-plugin-server]
        end

        subgraph Sew[流量引擎 工作节点]
            data_dam[data Dam]
            nexus_w[Nexus]
            envoy[Envoy]
        end
        
        subgraph Ses[流量引擎 调度节点]
        	nexus_s[Nexus]
        	data_ha[Data HA]
        end
	end
	
	%%installer-manager -->|vip/nodeIP:8099|installer-agent
	%%installer-manager -->|vip:6898|admin_ha
	%%sv -->|vip:1234|admin_dam
	%%sv -->|vip:8899|admin_dam
	%%sv -->|vip:8299|webserver
	%%sc -->|vip:8229|webserver	
	sc --> core
	webserver --> core

	sv --> core
	admin_dam --->|*:29120| sv
	
	installer-manager --> core
	admin_ha ---> webserver
	%%installer-agent ---> core
	data_ha -->|nodeIp:6443| apiserver
	%%installer-agent -->|nodeIP:8098|installer-manager
	%%data_dam -->|nodeIp:4150|sv
	%%data_dam -->|nodeIp:9001|webserver
	webserver -->|nodeIp:8000| nexus_m & nexus_s & nexus_w
	envoy -->|vip:7878 7978| global_plugin_server
	installer-manager -->|nodeIp:22 |Se
	%%installer-agent -->|vip:6443|apiserver
    linkStyle 0,1 stroke-width:8px;    

业务

建立连接反转

(本次改动不涉及 可视化数据传输的流,这是考虑到可视化的数据流过大,经过一次转发消耗的资源比较大)

在 core 参与的框架中,完成组件之间通信有两步:

  1. 与 core 建立通信
  2. 发送/接收、处理请求

图表标识

  • 红线表示需要完成 1 2 步编码
  • 紫线表示不需要实现
  • 橙色表示需要实现 2 步

sc 到 webserver

graph LR
	subgraph Sc[总控]
        subgraph ScApi[总控API]
            client[SCClient]

            subgraph Client
                conn_ctx[引擎连接管理]
                gw_obj[引擎服务搭建]
                node_ctx[引擎节点管理]
                auth_ctx[引擎授权管理]
                ha_ctx[调度策略管理]
            end

        end
        subgraph Core
            core_conn_ctx[各组件连接上下文管理]

            subgraph Stream
                Agent
            end
        end
	end
	
	subgraph Se
		router[Webserver]
		subgraph Router
		
            gw[网关、虚拟服务对象等接口]
            node_manage[引擎节点状态接口]
            auth_manage[引擎授权管理接口]
            ha_manage[调度策略管理接口]
		end
	end 
	
	router --> Agent
	client --> Agent
	router --> Router
	client --> Client & core_conn_ctx
	
    linkStyle 0,1,2,3,4 stroke:red,stroke-width:8px,color:black;    
	

多管理面节点主备切换场景–方案改造后流程图

通信链路改造多节点主备切换程序逻辑

主备切换场景–异常情况

  • HA 出现问题,主节点状态异常后未能及时完成主备切换操作
  • HA –> webserver 这条链路出现问题,不能及时通知 webserver 主备切换信息,导致引擎失联,会在界面中显现
  • webserver –> sc-core 被告之主备切换后未能主动连接 sc-core ,或是链路出现问题,同样表现为引擎失联
  • sc-core 不能正确处理 webserver 断线、新 webserver 重连场景,导致引擎链路出现问题,可能表现为引擎失联

通信链路规整

todo


通信链路改造sc、webserver链路改造设计.md
https://abrance.github.io/2024/02/29/mdstorage/project/sr/通信链路改造/通信链路改造sc、webserver链路改造设计/
Author
xiaoy
Posted on
February 29, 2024
Licensed under