【发布时间】:2019-11-29 19:00:06
【问题描述】:
我想使用在 Kubernetes 上运行的 Websocket 来构建一个消息应用程序,并且想知道如何解决一些问题...
上下文
所以,假设您正在构建一个聊天应用程序......您的聊天应用程序需要经常与后端通信才能工作(例如接收发送的消息,发送消息等),所以假设后端将被构建使用 Node 并且前端是使用 Electron 构建的,我认为在这种情况下使用 Web-sockets 是有意义的。
问题 1 - 负载平衡
您的 Web-socket 服务器性能不佳,因此您想解决这个问题。在这种情况下,我认为创建多个 Web 套接字服务器实例并平等地平衡它们之间的传入流量(负载平衡器)是有意义的。对于 HTTP/HTTPS 请求,这是有道理的,请求被重定向到哪个服务器实例并不重要,因为它是一个“一次性”请求,但是 Web-sockets 是不同的,如果客户端连接到实例 3,其余的则有意义的传入请求进入实例 3(因为服务器可能会保持客户端状态(例如客户端是否经过身份验证))
问题 2 - 按关注点划分
随着聊天应用程序变得越来越大,越来越多的事情需要由 Web-socket 服务器处理...因此将其拆分为不同的关注点是有意义的...(例如消息传递、用户身份验证等.) 但是假设必须保留客户端状态,这些不同的关注点如何知道该状态? (关注点之间的共享状态)
问题 3 - 事件发射
您实现了一个事件,该事件在每次用户发送消息时为每个客户端触发。当有多个实例时,如何实现这一点? (例如,客户端 1 连接到 Web-socket 服务器实例 1,客户端 1 发送消息......客户端 2 连接到 Web-socket 服务器实例 2 并且需要为客户端触发事件......)
【问题讨论】:
标签: node.js kubernetes websocket architecture load-balancing