ZMQ 路由器/经销商对消息代理的用处
Posted
技术标签:
【中文标题】ZMQ 路由器/经销商对消息代理的用处【英文标题】:ZMQ Router/Dealer usefulness over message broker 【发布时间】:2022-01-01 17:37:13 【问题描述】:当使用消息队列时,我习惯了消息代理模型,例如RabbitMQ 或者 Redis pub/sub,所以 zeromq 的 brokerless 模型感觉有点“不自然”。
路由器/经销商模型和routing envelopes 概念在我看来是典型的消息代理元素,例如在 RabbitMQ 中。
有人可以提供一个在消息代理上使用 zmq 路由器/经销商的真实示例(除了我不需要设置代理的明显示例)?
顺便说一句,这个问题也适用于 zeromq pub/sub 模式。
【问题讨论】:
【参考方案1】:您可能希望通过非常快速的通道(例如:Unix 套接字)将工作分配给多个工作人员,而无需代理引入的额外开销。我们的一个用例:我们将视频文件拆分为图像,然后发送给一组工作人员,每个工作人员都绑定到一个 GPU。
我们不需要持久性,我们不需要安全性,我们不需要消息转换,我们不需要协议和传输转换......所有功能通常由消息代理提供,但需要付费。我们只想尽快分配工作。使用 zmq,我们只需更改协议/连接字符串就可以在多台机器上分配工作。然后,我们必须在 N 个 GPU 上本地完成所有工作或在具有 N x X 个 GPU 的多台机器上分配工作之间找到平衡。
将 zmq 视为“代理构建工具包”,可让您轻松构建适合您特定需求的轻量级代理。
【讨论】:
但是“将工作分配给多个工人”听起来像是 zeromq 中的推/拉模式 是的。这就是 zmq 的优势:您可以结合所需的模式来构建满足您确切需求的代理。 对于习惯于代理概念的人,我一直在问为什么。例如,就像我在问题中所说的那样,zeromq pub/sub 模式是另一个原因。 但似乎答案都归结为您所说的“没有真正经纪人的经纪人构建工具包”。 没错。根据某些路由,在存在大量连接的“节点”(线程、进程或盒子)的大多数现实场景中,需要位于网络上并正确存储/路由/过滤/包装消息的集中式中介/过滤/包装算法/策略。在这种情况下,您必须自己编写代理,使用 ZeroMQ 提供的构建块。以上是关于ZMQ 路由器/经销商对消息代理的用处的主要内容,如果未能解决你的问题,请参考以下文章