带有 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 的一个优点是测试不同的架构并不需要太多工作。
我已经阅读了我的文档,大多数示例都是针对基本用例的。
只要一个进程发布 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 的一个优点是测试不同的架构并不需要太多工作。