为实时目的在 zeromq 中统一

Uniform in zeromq for realtime purpose

我需要使用服务器和终端实施实时分析系统。

我使用库 ZeroMq(pub|sub 模式)向客户端发送消息(~40 字节)。

如果我连接 1 个客户端,消息会延迟(有时超过 250 毫秒)。 如果我与 100 个客户端连接,很多客户端会失去交付的一致性(超过 750 毫秒没有一条消息,在那个巨大的数据范围之后)。这对我来说非常重要。

我要发布到6000多个终端... 每30ms发布一次,最坏情况下(tcp)每个客户端大约1700bytes

也许我应该使用另一种技术来实时传递消息?

正如我在评论中所说,多播就是这种方式。最主要的问题是您的终端是否可以加入您正在发布的组 - 无论它们相距多远。

您没有说明终端如何连接到您的网络 -(例如互联网上的 vpn,专线等等..)您要求更好的技术 - 它是多播。

如果您要走 tcp 路线,现在有一些选择:

  • 建立一个负载平衡的基础设施,它位于你的面前 服务。这意味着您的终端没有连接到您的 服务,而是一组负载均衡器,然后连接到您的 服务。例如,如果你有 10 个,每个只需要处理 拥有 600 个客户。你的问题要小得多 - 你可以扩展这个 方法。不要忘记使用异步 io。
  • 购买更好的硬件 - 例如 solace 或 tervela 硬件 可以扩展到非常大数量的并发 tcp 的消息代理 连接 - 但这并不便宜。