连续将数据一次发布到10000个客户端

时间:2018-02-20 21:21:52

标签: java spring-boot websocket redis apache-kafka

我正在构建一个项目,服务器每秒生成一次数据,这些数据必须达到可变数量的客户端(按数千个顺序)。服务器端没有进程。它从第三方WebSocket接收数据并将其转发给客户端。

我能想到三种方式。

  1. 客户每秒轮询一次。
  2. 使用WebSockets
  3. 使用某种分布式队列。
  4. 我想使用springboot2实现它。 主要关注点是

    1. 所有客户都应该收到特定秒的数据 在生成下一秒的数据之前。这意味着数据应该在不到一秒的时间内发布给所有数据。
    2. 客户可能会在中间掉落。如果重新连接他们 将立即获得差异数据的快照,并开始增量数据 从下一秒流过。
    3. 我对此有一些疑问。由于硬件限制,我无法模拟超过200个并发客户端,所以我无法得出结论。

      • 是否存在客户端可以订阅的分布式队列 收到数据?像卡夫卡这样的东西,但它应该能够处理 100000个客户,谁动态来来去去?
      • 生成的数据非常小,可以存储在内存中。应该 我将它存储在内存(一些map或redis缓存)中,客户端使用他们收到的最后一个id继续轮询,以便我可以从内存中发送数据?它会扩展吗?
      • 如果我们使用WebSockets,服务器可以同时处理10000个客户端吗?如果 它可能如何解决丢失的数据问题?

      请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

该用例是JMS服务器的用途,因此您可以自己查看这些服务器,而不是自己实现所有内容。 Apache AMQP。

您可以尝试的另一个解决方案是使用MultiCast,其中数据的分发由网络层本身完成,但也可能会将您带回使用此技术的JMS服务器,已经隐藏了您必须小心处理的所有内容获得安全的数据传输。