【发布时间】:2018-04-24 11:15:07
【问题描述】:
我有一个 Redis 服务器和多个 Redis 客户端。每个 Redis 客户端都是一个 WebSocket+HTTP 服务器,其中包括管理 WebSocket 连接。这些 WebSocket+HTTP 服务器隐藏在负载均衡器后面。
WebSocket+HTTP 服务器提供GET /health HTTP 端点。我希望这个端点能够提供整个集群中当前 WebSocket 连接的总数。
当点击GET /health时,显然负载均衡器只会将请求分派给一个WebSocket+HTTP服务器实例。
如何让一个 WebSocket+HTTP 服务器实例向所有其他实例询问它们当前管理的 WebSocket 连接数?
我想到了以下步骤:
- 实例使用
CLIENT LIST了解当前有多少Redis 客户端(例如n); - 然后实例将
WEBSOCKET_CONNECTION_COUNT_REQUEST发布到 Redis(假设所有 Redis 客户端都订阅了此事件); - 实例最终等待
nWEBSOCKET_CONNECTION_COUNT_RESPONSEs,汇总计数,并通过HTTP返回。
您对上述方法有何看法?是不是有点太绕了?我觉得我可能有点过度设计......
我最初认为实例可以INCR/DECR Redis 存储中的计数,但我不确定如何处理被杀死的实例(因为计数应该相应减少)。我认为临时解决方案会更好。不过仍然对想法持开放态度。
【问题讨论】:
标签: redis load-balancing publish-subscribe health-monitoring horizontal-scaling