ZeroMQ 请求和对该请求的多个异步回复

保罗

我有类似执行繁重计算的远程机器和向其发送任务的客户端机器之类的东西。输出结果非常大,从兆字节到千兆字节,并且在很长一段时间内成块出现。所以它看起来像这样:客户端发送任务,然后需要接收这些块,因为它们已经很有用(一个请求 - 多个响应)。如何在 ZeroMQ 中实现这种模式。

用户3666197

也许我读错了上面定义的问题,但就目前而言,在我看来,主要关注的是实现一种方法来容纳一对主机之间的消息流(而不是使用经典的DEALER/ROUTERScaleable将 Broker 扇出到 1+ Workers正式通信模式),
其中,
关心的重点
是,如何处理
一个客户机(发送一个大计算任务请求用于部分结果的流动和“等待”)
以一个HPC-机(接收TaskJOB,处理它并将非同步的、不受时间和大小限制的消息流传送回客户端机器)。

对于这种 1:1 的情况,使用 1-Job:many-partialJobResponses,设置可能会受益于具有多个实际套接字的联合消息传递和信令基础设施,如下所示:

信令:

clientPUSH   |-> hpcPULL    // new TaskJOB|-> |
clientPULL <-|   hpcPUSH    //              <-|ACK_BEGIN
clientPULL <-|   hpcPUSH    //              <-|KEEPALIVE_WATCHDOG + PROGRESS_%
clientPULL <-|   hpcPUSH    //              <-|KEEPALIVE_WATCHDOG + PROGRESS_%
...                         //                |...
clientPULL <-|   hpcPUSH    //              <-|KEEPALIVE_WATCHDOG + PROGRESS_%
clientPULL <-|   hpcPUSH    //              <-|KEEPALIVE_WATCHDOG + PROGRESS_%
clientPULL <-|   hpcPUSH    //              <-|ACK_FINISH         + LAST_PAYLOAD#
clientPUSH   |-> hpcPULL    // new TaskJOB|-> |
clientPULL <-|   hpcPUSH    //              <-|ACK_BEGIN
...                         //                |...
clientPULL <-|   hpcPUSH    //              <-|ACK_FINISH         + LAST_PAYLOAD#

消息:

clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#i
clientACK    |-> hpcACK     // #i POSACK'd|-> |
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#j
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#k
clientACK    |-> hpcACK     // #k POSACK'd|-> |
clientACK    |-> hpcACK     // #j   NACK'd|-> |
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#j
clientACK    |-> hpcACK     // #j POSACK'd|-> |
clientACK    |-> hpcACK     // #u   NACK'd|-> |               // after ACK_FINISH
clientACK    |-> hpcACK     // #v   NACK'd|-> |               // after ACK_FINISH
clientACK    |-> hpcACK     // #w   NACK'd|-> |               // after ACK_FINISH
clientACK    |-> hpcACK     // #x   NACK'd|-> |               // after ACK_FINISH
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#x
clientACK    |-> hpcACK     // #x POSACK'd|-> |
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#u
clientACK    |-> hpcACK     // #u POSACK'd|-> |
...                         //                | ...      
clientRECV <-|   hpcXMIT    //              <-|FRACTION_OF_A_FAT_RESULT_PAYLOAD#w
clientACK    |-> hpcACK     // #w POSACK'd|-> |

再次,使用一对PUSH/PULL套接字用于(内部)无状态消息自动机,但允许创建自己的更高级别的有限状态自动机,用于自我修复消息流,将FAT_RESULT受控碎片处理成更容易吞咽的有效载荷(记住 ZeroMQ 格言之一,使用零保证而不是构建不可扩展的乳齿象(野生生态系统的进化性质无论如何都会杀死它)并且还提供一定程度的按需重新传输。

一些更智能的多代理设置离草图不远了,以增加处理吞吐量(FAT_RESULTDataFlow Curator 代理,与 分离HPC_MAIN,卸载 HPC 平台的资源以立即开始下一个TaskJOB等)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js和zeroMQ请求和响应

来自分类Dev

Node.js和zeroMQ请求和响应

来自分类Dev

如何使用zeromq和线程处理或异步处理对python程序的多个请求?

来自分类Dev

ZeroMQ知道请求来自哪个例程

来自分类Dev

ZeroMQ(C):基本请求-答复问题

来自分类Dev

与 ZeroMQ 的双向通信异步

来自分类Dev

通过HTTP发送请求时ZeroMQ不起作用

来自分类Dev

ZeroMQ-CZMQ-Majordomo模式-发送FAST时丢失请求

来自分类Dev

如何使用ZeroMQ实现多个套接字?

来自分类Dev

zeroMQ以哪种方式读取多个连接?

来自分类Dev

如何对多个Server-Client对使用ZeroMQ?

来自分类Dev

Camel JMS 异步请求回复

来自分类Dev

了解ZeroMQ

来自分类Dev

多核ZeroMQ?

来自分类Dev

ZeroMQ功能

来自分类Dev

多核ZeroMQ?

来自分类Dev

ZeroMQ 与 OpenMPI

来自分类Dev

RestSharp-异步请求回复模式

来自分类Dev

多个异步请求

来自分类Dev

多个异步请求

来自分类Dev

使用请求和current.futures异步发送多个API发布请求

来自分类Dev

使用请求和current.futures异步发送多个API发布请求

来自分类Dev

ZMQ Python请求回复代理,用于处理异步请求

来自分类Dev

Python ZeroMQ中的异步客户端/服务器模式

来自分类Dev

Python ZeroMQ中的异步客户端/服务器模式

来自分类Dev

AngularJS的异步请求和加载按钮

来自分类Dev

WCF:简单的异步请求和响应示例

来自分类Dev

ZeroMQ / JeroMQ发布有关多个主题的一条消息

来自分类Dev

多个客户端数据的Zeromq(pyzmq)ROUTER处理和后续超时处理