你来说说 websocket 有什么用 双向通信,服务器端可以主动 push,给客户端发送通知 那websocket多个节点有什么问题? 头条面试官的提问让我的回忆飘到了一个下午,想起了我两个同事之间的对话 引子咱有部分用户收不到通知了 通知是由ws服务控制的,它最近是有啥改动么 也没改啥,以前单个节点也没有问题 想起来了,接上面通知,把服务都从单节点改成了多节点 对,说是为了什么 HA,两位数用户的服务需要折腾吗 没事,这样出去了也有搭建高可用服务与 websocket 负载均衡的经验了 说的倒也是!不过这样确实会有 ws 分布式的问题 简单,加个 reids 就好了 多节点问题在开始思考分布式会有什么问题时,先来回答一个问题: 服务端如何与客户端交流? 在 ws 服务端,当与客户端连接成功后,会生成一个对象 那如何给所有人广播消息呢? 服务器只需要与它自身的所有连接 单节点当单节点时所有用户都能正常受到通知,流程如下 这时所有用户都能收到消息通知 多节点当多节点时,就会有部分用户无法正常受到通知,从以下流程图中可以很清楚地看到问题所在 负载到节点2的所有用户都没有收到消息通知 如何解决多节点服务器就会有分布式问题,解决分布式问题就找一个大家都能找到的地,比如说 改进后流程图如下
redis PUBSUB其中有一个细节是 pub/sub 那里,redis 的
如果我们要订阅 小结借用解决方案的图作为小结 |
|