gpt4 book ai didi

c++ - 如何设置 ZERO-MQ 架构来应对不同速度的 worker

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:16 26 4
gpt4 key购买 nike

[作为一个小型上下文提供者:我是网络和 ZERO-MQ 的新手,但我确实在指南和示例上花了很多时间]

我有以下挑战(用 C++ 完成,但与问题无关)。我有一个生成任务的单一来源。我有多个引擎需要处理这些任务,并发回结果。

第一次尝试:我创建了一个带有 ZMQ_PUSH 套接字的客户端。引擎有一个 ZMQ_PULL 套接字。为了将答案返回给客户端,我创建了相反的过程:在工作人员上创建一个 ZMQ_PUSH,在客户端上创建一个 ZMQ_PULL。它开箱即用。只是发现一段时间后客户端内存不足,因为我推送的请求比工作人员可以处理的多得多。我需要一些背压。

第二次尝试:我在客户端上添加了一个计数器,它只在不超过 1000 个任务“正在进行”时负责推送。内存不足的问题已解决,因为我从来没有超过 1000 个“进行中”的任务。但是......有些 worker 比其他 worker 慢。由于 PUSH/PULL 使用公平排队,慢速 worker 的工作量不断增加……直到最慢的 worker 将所有 1000 个请求都排队,而其他人都饿死了。我没有有效地使用我的员工。

现在,我可以使用什么架构来解决“工作速度不同”的问题? “计算正在进行的任务的数量”方法是平衡推送请求数量的好方法吗?或者有没有一种方法可以将任务推送给工作人员,并在预定义的点上推送 block ?我可以用 HWM 做到这一点吗?

我确信这个问题具有如此普遍的性质,我应该能够轻松处理它。谁能指出我正确的方向?

谢谢!

最佳答案

我们使用了 Paranoid Pirate Protocol http://rfc.zeromq.org/spec:6 ,

但在许多非常小的作业中,通信开销可能很高,基于信用的流量控制模式可能更有效。 http://unprotocols.org/blog:15

在这两种情况下,请求者都需要直接将工作分配给各个 worker 。这当然是抽象出来的,并且根据用例,可以作为同步调用提供,它会在所有任务都已处理后返回。

关于c++ - 如何设置 ZERO-MQ 架构来应对不同速度的 worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11017424/

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