带有 zmq 的 pub-sub 的动态主题,可以吗?

dynamic topics with pub-sub with zmq, will that be fine?

我已经阅读了我的文档,大多数示例都是针对基本用例的。

只要一个进程发布 X 事件,另一个进程订阅 X 事件。

但在我的应用程序中,X 是一种变量。所以假设我有 X 表示我的用户。

所以我可以从一个服务器事件发布,例如 user-ID 意味着如果我有 1000 多个用户连接到服务器那么可以发布和订阅这么多动态主题,然后再订阅 20 个服务器订阅了该服务器上的 1000 多个主题。

让我们看例子。

我有 10 台服务器。每个服务器连接 1000 个用户。所以总共有 10k 用户。 我需要将每个用户的 X 数据发送给另一个用户。

所以我做到了。

X服务器发布user-ID数据(1个发布用户的连接,1K发布)

Y 服务器订阅 user-ID 数据(每个服务器发送 10k 订阅请求)

使用动态主题发布订阅的最佳方式应该是什么,从而减少服务器之间使用的带宽?

通知::

user-ID只是一个例子,ID是动态数字,它发布了一些无法存储在任何地方的实时数据。

据我所知在 pyzmq API 发布者可以向任何主题发送消息

socket.send("%d %d" % (topic, messagedata))

并且订阅者使用 setsockopt

为他们感兴趣的主题设置过滤器
topicfilter = "10001"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

所以我认为你可以完全执行你的计划。

在 ZeroMQ 中,订阅匹配是在带有前缀匹配的 PUB 套接字中实现的 trie。这是一个非常高效的数据结构,我希望 10K 订阅和 10K msg/sec 完全没有问题。

PUB 套接字只发送匹配订阅的消息(所以没有"waste")。如果消息与任何订阅都不匹配,则 PUB 套接字将丢弃它。匹配的消息只发送到订阅了它们的 SUB 套接字。

当您添加或删除订阅时,SUB 套接字将向其连接的 PUB 套接字发送一条消息。然后每个 PUB 套接字将更新其主题树。

我的猜测是 10k 订阅和 10k msgs/s 没问题,但最好的办法是编写一些测试代码并尝试一下。 ZeroMQ 的一个优点是测试不同的架构并不需要太多工作。