socket-mqtt对等集群负载均衡:注册中心与SLB/CLB双方案实战指南

发布时间:2026/8/24 17:11:29
socket-mqtt对等集群负载均衡:注册中心与SLB/CLB双方案实战指南 socket-mqtt对等集群负载均衡注册中心与SLB/CLB双方案实战指南【免费下载链接】socket-mqtt基于NettyMQTT的高性能推送服务框架。支持普通Socket、MQTT、MQTT web socket协议。非常方便接入上层业务实现推送业务。项目地址: https://gitcode.com/gh_mirrors/so/socket-mqttsocket-mqtt 是一个基于 Netty4.x MQTT 的高性能推送服务框架支持普通 Socket、MQTT、MQTT WebSocket 三种协议。单机可支撑数十万连接但生产环境离不开对等集群 负载均衡。本文带你实战 socket-mqtt 内置的两种负载均衡方案传统注册中心负载均衡与云厂商 SLB/CLB 负载均衡并附选型建议与验证方法。 为什么推送服务必须做集群负载均衡单台推送节点的连接数和吞吐量都有上限业务增长后你会遇到三个问题容量瓶颈单节点连接数到顶需要多节点分摊高可用单点故障会导致所有在线设备失联连接不均新连接若不挑节点容易形成热节点拖垮局部性能。socket-mqtt 在根目录的LOAD_BALANCE.md中给出了两套对等集群方案分别适配自建机房与云原生两种部署环境。️ 方案一注册中心负载均衡适合自建机房工作原理三步完成最小连接数调度tcp-serverBroker 节点启动后向tcp-center注册中心注册并持续上报自身状态IP、PORT、当前连接数等tcp-center将各节点状态信息存储到 Redis 中Client连接前先调用 GetTCPIP 接口获取 server 列表按最小连接数排序从第一个节点开始尝试建立连接。状态上报由框架内置的ServerStateReportJob完成源码见src/main/java/com/yb/socket/service/center/ServerStateReportJob.java服务端启动后每 5 秒向注册中心发送一条updateConnects消息携带节点 IP、端口和实时连接数保证注册中心始终能调度到最空闲的节点。快速上手Demo 的三种角色测试目录已内置完整带注册中心示例src/test/java/com/yb/socket/center下注册中心CenterMock1.java监听 9000 端口响应getServerInfo查询并接收状态上报Broker 节点Server1.java/Server2.java模拟集群中的多台推送节点业务客户端ClientTest.java自动通过注册中心挑选节点连接。服务端只需一行配置声明注册中心地址可配置多个实现注册中心自身的高可用Server server new Server(); server.setPort(8000); server.setCenterAddr(127.0.0.1:9000,127.0.0.1:9010); server.bind();客户端配置同样的地址connect()时会自动查询注册中心、按最小连接数挑选 BrokerClient client new Client(); client.setCenterAddr(127.0.0.1:9000,127.0.0.1:9010); client.connect();setCenterAddr同时支持 Server 与 Client 两端定义分别位于src/main/java/com/yb/socket/service/server/Server.java和src/main/java/com/yb/socket/service/client/Client.java。查看各节点负载确认均衡生效socket-mqtt 自带状态监控组件src/main/java/com/yb/socket/status包开启状态端口后默认 8001用telnet ip 8001; get status即可查询任意节点的连接数、消息量、心跳数。集群中逐台比对连接数就能直观确认负载均衡是否生效☁️ 方案二SLB/CLB 负载均衡适合云原生如果部署在云上方案更简单客户端直连云厂商的SLB/CLB实例SLB/CLB 按最小连接数策略选择一个后端 Server 建立连接无需注册中心也无需 web-server 代理。高可用、健康检查、流量分发全部交给云厂商既节省了 web-server 服务器成本也降低了客户端复杂度。代码侧只需把客户端连接地址换成 SLB 的域名或 VIPClientAPI 完全不变。⚖️ 两种方案怎么选对比维度注册中心方案SLB/CLB 方案适用场景传统自建机房云原生架构额外组件tcp-center Redis无云厂商提供客户端复杂度需先查询节点列表再连接低直连 SLB调度策略最小连接数排序最小连接数策略成本特点需自建注册中心避开 SLB 技术复杂度按 SLB 计费省 web-server 成本⚖️ 经验法则自建机房 → 注册中心方案云上部署 → SLB/CLB 方案。最终选型需结合实际业务情况决定。 验证集群效果监控与压测集群上线后用两类数据验证负载均衡效果节点级周期查看各节点connects连接数确认连接分布均匀系统级用 dstat 等工具观察负载。下图是 socket-mqtt 承载 1 万客户端下行消息推送压测时CPU 与网络负载的监控快照网络发送稳定在 120MB/s 以上CPU 使用率保持健康单机推送能力可参考项目根目录README.md中的压测报告单 Broker8核16G下行 TPS 16万、上行 TPS 17万千兆网卡流量基本打满。 关键配置速查表配置项作用说明server.setCenterAddr(ip:port,ip:port)服务端注册中心地址支持多注册中心实现注册中心高可用client.setCenterAddr(ip:port,ip:port)客户端注册中心地址连接前自动查询负载最小的节点server.setOpenStatus(true)开启状态查询端口默认 8001telnet 查看节点状态server.setCheckHeartbeat(true)心跳检测剔除死连接保证均衡统计准确server.setSocketType(SocketType.MQTT)协议类型支持 NORMAL / MQTT / MQTT_WS 总结socket-mqtt 以极低的业务侵入成本实现了推送服务的对等集群负载均衡注册中心方案服务端每 5 秒上报状态客户端按最小连接数调度接入适合自建机房SLB/CLB 方案客户端直连云负载均衡器高可用交给云厂商适合云原生部署。clone 仓库后运行src/test/java/com/yb/socket/center目录下的示例即可快速跑通完整的集群 Demogit clone https://gitcode.com/gh_mirrors/so/socket-mqtt【免费下载链接】socket-mqtt基于NettyMQTT的高性能推送服务框架。支持普通Socket、MQTT、MQTT web socket协议。非常方便接入上层业务实现推送业务。项目地址: https://gitcode.com/gh_mirrors/so/socket-mqtt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考