【问题标题】:Round-robin CPU-bound operations from users来自用户的循环 CPU 绑定操作
【发布时间】:2019-09-27 23:44:42
【问题描述】:

我们有最终用户 API 来执行一些长时间(30 秒到 1 小时)CPU 密集型操作。 用户可以创建任务,多次轮询任务状态,最终得到结果。

在内部,我们有任务队列和一些可以处理这些任务的工人。

当用户 1 创建了很多大任务,然后用户 2 创建了一个小任务时,就会出现问题。 User2 期望快速获得结果,但所有工作人员都在处理来自 User1 的任务。来自 User1 的任务位于队列末尾。

期望以循环方式处理来自两个用户的任务。

是否有一些可用于解决此类问题的生产就绪解决方案?

(更新)发现同样的问题: What are some queuing mechanisms for implementing round-robin queues?

【问题讨论】:

  • 我假设可以在将任务分派给工作人员之前确定任务的大小。然后,您要么需要能够暂停和恢复长时间运行的任务,要么需要单独拉动工人来完成小任务。

标签: cloud message-queue distributed-computing messagebroker


【解决方案1】:

可能,一种方法是引入任务的优先级。

例如,根据估计的任务执行时间 - 区分小 (S)、中 (M) 和大 (L)。然后将具有不同优先级的任务发送到不同的队列。所以,最后,user 可以为他的特定任务轮询所有优先级队列(S、M 和 L),然后通过在单个队列中等待更快地找到结果。

这种方法可以有多种变体。比如user可以自己区分S/M/L,知道到底要轮询哪个队列(这样就省去了轮询所有队列)。或者,可以有一些dispatcher 组件/服务,它们将在全局范围内执行并通知users 他们应该轮询哪个队列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2013-11-14
    • 2019-03-05
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多