通信链路改造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 参与的框架中,完成组件之间通信有两步:
- 与 core 建立通信
- 发送/接收、处理请求
图表标识
- 红线表示需要完成 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/project/sr/通信链路改造/通信链路改造sc、webserver链路改造设计/