Nacos1.x版本推送模型的现状分析
Nacos1.x版本配置中心推送模型
1、配置中心服务端通过MD5一致性对比发现客户端不是最新版本的配置
2、所以会与客户端建立短连接通过异步Servlet的方式主动推送数据给客户端
缺点
因为是短连接 30秒定期创建和销毁 所以GC压力很大
服务注册发现中心推送模型
服务端与客户端建立Http或UDP连接进行推送数据
缺点
- 丢包
因UDP存在丢包的情况 所以会有一个UDP的补偿查询
- 云架构下无法反向推送
反思改进的方向
- 因配置中心和服务注册发现中心推送通道不一致所以要统一推送通道
- 因http短连接性能压力大所以要使用长链接
场景分析
客户端和服务端之间
连接
客户端连接服务端:首先要获取服务端节点列表,然后负载均衡选择一个节点连接;连接断开时需要切换服务端重连
客户端发起
客户端基于当前可用的长链接发起配置领域或服务发现领域的RPC语意接口通信
服务端发起
服务端推送配置变更数据或服务变更数据给客户端;失败可重推;有推送ack机制,方便服务端进行metrics和重推判定
客户端断开连接
感知客户端断开连接,将连接注销,并且清空对应的上下文比如客户端连接注册的服务和订阅的服务
服务端之间
连接
服务端之间需要长连接感知对端存活状态,需要通过长连接汇报服务状态(同步RPC能力);断开连接,需要进行重连;服务端列表发生变更,需要创建新节点的长连接,销毁下线的节点长连接
数据同步
比如服务注册与发现:服务端之间进行AP Distro数据同步,需要异步RPC带ack能力
比如配置中心:配置变更信息同步、当前连接数信息、系统负载信息同步、负载调节信息同步
长链接核心诉求
功能性诉求
连接
无论客户端还是服务端都要具有连接生命周期的感知能力 包括连接的建立和连接断开
客户端角度
1、客户端调用服务端需要支持同步阻塞、异步Future、异步CallBack三种模式
2、客户端与服务端断开连接,需要具备底层切换连接的能力
3、客户端响应服务端的连接切换的请求
4、选址/服务发现
服务端角度
1、服务主动推送数据,需要客户端返回ack以保证消息的可靠推送,并且可进行失败重试
2、服务端主动推送负载调节