gpt4 book ai didi

php - 使用 zeromq 实现 Task Farm 消息传递模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:06 24 4
gpt4 key购买 nike

我正在使用 zeromq解决涉及数百(可能数千)个客户端请求任务的问题。每个客户端都会请求执行特定任务,完成后,结果将返回给发出该请求的客户端。

这些是我到目前为止已经确定的 Actor ,在我想出的模式中:

  • 客户:这是请求执行工作单元(或“工作”)的参与者
  • Controller :这是在可用引擎之间平衡“作业”的角色
  • 引擎:这是从 Controller 接收作业请求并将结果发布回客户端的参与者。

我还没有弄清楚引擎如何将消息返回给客户端。我猜想使用 zeromq 实现它的一种方法是:

Client:
PUSH job messages on one socket to Controller SUBscribe to completed results on PUBlished by Engine, on another socket

Controller:
PULL job messages from client on one socket PUBlish job messages to engines on another socket (clearly, this will be a forwarding device)

Engine:
SUBscribe to job messages on one socket PUBlish result to another socket

如果有人能提供一个框架/片段来展示如何使用 zeromq 框架实现这个模式的概要,那将是非常有帮助的。

代码片段可以是 C、C++、PHP、Python 或 C#

[[编辑]]

在阅读了 Task Farms 之后(正如 akappa 所建议的那样)。我认为这个问题确实可以通过 Task Farm 来建模。我相应地修改了我原来的 Actor (并更改了标题)。

如果熟悉 zeromq 的人可以勾勒出一个骨架来展示我如何使用核心组件来构建这样一个框架,那将仍然非常有用。

最佳答案

对此有多种方法,并且 IPython.parallel包括两个这样的 ZeroMQ 实现 - 一个简单且纯 zmq,另一个更复杂, Controller 在 Python 中实现。

我们将 Controller 分成两个 actor:

  1. Hub - 一个独立的进程,可以查看所有流量,跟踪集群的状态,将结果推送到数据库等,通知客户端引擎连接/断开等
  2. Scheduler - 其核心是一个简单的 ROUTER-DEALER 设备,可将请求从客户端转发到引擎,并返回回复。

只看我们拓扑中的任务管理部分:

  • Scheduler 是一个 0MQ Queue 设备,带有 ROUTER 和 DEALER 套接字,两者都绑定(bind)。
  • 客户端有 DEALER 套接字,连接到 Scheduler 的 ROUTER
  • 引擎有连接到 Scheduler 的 DEALER 的 ROUTER socket

它利用了这两个属性:

  • DEALERS LRU 跨节点负载均衡请求
  • 路由器使用身份前缀将回复发送回发出特定请求的对等方。

带有 pyzmq 的玩具负载平衡任务农场,它将回复路由回请求客户端:https://gist.github.com/1358832

另一种方法是 Ventilator-Sink pattern 将结果发送到某个地方,但不返回请求客户端。在 0MQ 指南中。

关于php - 使用 zeromq 实现 Task Farm 消息传递模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7809200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com