我正在使用zeromq来解决涉及数百个(可能是数千个)客户端请求执行任务的问题。每个客户端都会请求执行特定任务,并且结果在完成后将返回给发出该请求的客户端。
这些是我到目前为止所确定的演员,按照我提出的模式:
我还没有弄清楚引擎如何将消息传回客户端。我猜测使用zeromq实现这一目标的一种方法是:
客户端:
将一个套接字上的作业消息发送到控制器会在另一个套接字上创建由PUBlished完成的结果 插座控制器:
从一个套接字上的客户端获取作业消息PUBlish作业消息到另一个套接字上的引擎(显然,这将是一个转发设备)发动机:
订阅一个套接字上的作业消息PUBlish结果到另一个套接字
如果有人提供了一个骨架/片段,它将使用zeromq框架显示如何实现此模式的大纲,这将是最有帮助的。
代码段可以是C,C ++,PHP,Python或C#
[[编辑]]
阅读任务农场(由阿尔法提出)。我认为这个问题确实可以通过任务农场建模。我相应地修改了我的原始演员(并且也更改了标题)。
如果熟悉zeromq的人可以勾画出一个能够展示我如何使用核心组件来构建这样一个框架的骨架,那将是非常有用的。
答案 0 :(得分:5)
有很多方法,IPython.parallel包括ZeroMQ的两个这样的实现 - 一个简单和纯zmq,另一个更精细,使用Python实现Controller。
我们将Controller分成两个角色:
仅查看拓扑的任务耕作部分:
利用这两个属性:
带有pyzmq的玩具负载均衡任务服务器场,它将回复路由回请求客户端:https://gist.github.com/1358832
结果在某处,但不是备份到请求客户端的替代方案是0MQ指南中的Ventilator-Sink pattern。
答案 1 :(得分:3)
这是一种经典的主/从并行模式(也称为“农场”或“任务农场”)。
有十亿种方法可以实现它。 Here有一种方法可以使用MPI实现它,也许它可以鼓舞你在zeromq中实现它。