【问题标题】:Working of websocket services in clustered deployment集群部署中 websocket 服务的工作
【发布时间】:2021-08-01 22:16:16
【问题描述】:

假设我在 springboot 中实现了一个 websocket。架构是微服务。我已经在 kubernetes 集群中部署了该服务,并且我有 2 个正在运行的服务实例,套接字实现使用 stomp 和 redis 作为代理。

  1. 现在在客户端和其中一个服务之间创建了第一个连接。所有数据流是否都通过客户端和连接的服务发生?其他服务也会有连接吗?如果当前服务出现故障,其他服务会打开连接吗?

  2. 现在假设我正在通过 kafka 主题将一些数据发送回客户端。任一服务之一都可以读取它。如果那样的话,他们中的任何一个都能够将数据发送回客户端吗?

谁能帮我理解这些场景?

【问题讨论】:

    标签: spring-boot kubernetes websocket redis microservices


    【解决方案1】:

    websocket 是一个永久连接。打开后会通过kubernetes路由到一个固定的pod。没有其他 pod 将接收连接。 如果 pod 出现故障,连接将终止。

    如果创建了一个新连接,例如由不同的用户创建,它可能会被路由到不同的 pod。

    传输什么数据,例如以 kafka 作为源,在这种情况下是不相关的。可以是任何东西。

    【讨论】:

    • 这里传输的数据意味着socket正在监听pod,除了一些响应发回。由于只有一个 pod 将具有连接并且多个实例运行意味着任何服务中的侦听器都可以从 kafka 主题中读取数据。如果当前没有会话的服务接收到数据,那么我们可以做些什么来将数据发送到所需的套接字。
    • 你可以使用另一个kafka topic来广播从websocket接收到的数据。
    • 我不是试图广播,而是发送给单个用户。
    • 这与 websocket 和 kubernetes 无关。如有必要,请接受答案并针对您的业务需求提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2016-09-09
    • 2021-06-15
    • 1970-01-01
    • 2017-03-29
    • 2014-12-19
    相关资源
    最近更新 更多