我正在尝试为 N 个前端服务器和 M 个后端工作人员设计 ZeroMQ 架构,其中前端服务器将任务发送到后端那些。前端服务器确实有关于后端服务器的信息,但是后端服务器不知道前端服务器。我有两种类型的任务,一种类型应该使用循环并只转到一个后端服务器,而另一种类型应该广播到所有后端服务器。我不想有一个中央经纪人,因为那会是单点故障。
对于第一种类型的任务,请求/响应模式似乎是正确的,而对于第二种任务,它应该是发布者/订阅者模式。但是结合这两者的模式呢?如果我想将消息发送到所有或仅一个随机后端服务器,是否有任何模式允许我在发送时进行选择?
我提出的解决方案是使用发布者/订阅者,并在消息前添加后端服务器 ID 和一些神奇的值(如果它是针对所有人的)。但是,这会产生很多不必要的流量。有没有更清洁、更有效的方法来做到这一点?
最佳答案
我可能会使用 pub sub message envelopes - 如果你在 UDP 上使用 pub/sub 广播,我不相信它会产生不必要的网络流量,但它会产生额外的处理,但是像大多数这些东西一样,它是设计优雅和性能之间的权衡。 ØMQ 倾向于采取性能优先的路线,但我倾向于对其进行衡量并使用量化的性能结果来决定这是否可以接受。
对我来说,优雅的解决方案是使用两组套接字,因为这本身就是通过系统区分工作流——而使用单个套接字是以一种非常非 ØMQ 的方式混合事物,它们应该不同以允许用于 future 的变化和动态/不稳定的系统。
关于python - ZeroMQ 选择性发布/订阅模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144158/