【问题标题】:Architect a message application using Websockets on Kubernetes在 Kubernetes 上使用 Websocket 构建消息应用程序
【发布时间】: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


    【解决方案1】:

    Websockets:一个请求 - 长时间运行的连接

    您关于负载平衡的问题将得到处理。客户端将负载平衡到不同的实例。使用 Websockets 时,客户端执行一个请求进行连接,然后保持与后端的 TCP 连接并在同一连接上发送多条消息。

    关注点分离

    更多的事情需要由 Web-socket 服务器处理...因此将其拆分为不同的关注点是有意义的...(例如消息传递、用户身份验证等)

    是的,您应该使用separation of concerns。例如。您可以让一个身份验证服务执行OpenID Connect 身份验证,并且用户可以在连接时使用访问令牌。 Websockets 或发送其他 API 请求。

    Web 客户端通常最多允许两个 Websocket 连接到同一个域,因此最好只有一个 Websocket 服务。但是您可以使用某种消息代理,例如MQTT over Websocket 并将消息路由到不同的服务。

    发送消息

    您实现了一个事件,该事件在每次用户发送消息时为每个客户端触发。

    如果你使用我上面描述的消息代理,所有客户端都可以订阅频道,当你发布一条消息时,它会被路由到所有订阅者。

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多