我正在尝试为 N 前端服务器和 M 后端工作者设计ZeroMQ架构,前端服务器会将任务发送到后端那些。前端服务器确实有关于后端服务器的信息,但后端服务器不了解前端服务器。我有两种类型的任务,一种类型应该使用循环,只去一个后端服务器,而其他类型应该广播到所有后端服务器。我不想拥有一个中央经纪人,因为这将是单点故障。
对于第一类任务,请求/响应模式似乎是正确的,而对于第二类,它将是发布者/订阅者模式。但是这两种模式结合起来怎么样?如果我想向所有或仅一个随机后端服务器发送消息,是否有任何模式允许我在发送时选择?
我提出的解决方案就是使用发布者/订阅者,并使用后端服务器ID预先添加消息,如果它发送给所有人,则会提供一些魔术值。但是,这会产生很多不必要的流量。是否有更清洁,更有效的方法呢?
答案 0 :(得分:1)
我可能会使用pub sub message envelopes - 如果您通过UDP使用发布/订阅广播我不相信它会产生不必要的网络流量,但它会产生额外的处理,但是像大多数这些东西一样它是一个设计优雅与性能之间的权衡。 ØMQ倾向于首先采用性能路线,但我倾向于测量它并使用量化的性能结果来确定这是否可以接受。
对我来说,优雅的解决方案是使用两组套接字,因为这本身就是通过系统区分工作流程 - 而使用单个套接字是以非ØMQ方式混合的东西,这些应该是不同的允许对于未来的变化和动态/不稳定的系统。
答案 1 :(得分:1)
我认为唯一的可能性是使用DEALER-ROUTER组合。前端的经销商,后端的路由器。每个前端服务器应包含一个用于每个后端服务器的DEALER套接字(用于广播)和一个顶层的DEALER套接字,用于循环连接到所有后端服务器。现在让我解释原因。
希望这会有所帮助; - )