【问题标题】:Is it possible to force concurrent jobs to run in separate Sidekiq processes?是否可以强制并发作业在单独的 Sidekiq 进程中运行?
【发布时间】:2014-11-04 04:33:23
【问题描述】:

Sidekiq 相对于 Resqueue 的好处之一是它可以在同一个进程中运行多个作业。然而,缺点是我无法弄清楚如何强制一组并发作业在不同的进程中运行。

这是我的用例:假设我必须生成 6400 万行数据,并且我在一个亚马逊 EC2 实例上有 8 个 vCPU。我想将任务分成 8 个并发作业,每个作业生成 800 万行。问题是,如果我正在运行 8 个 sidekiq 进程,有时 sidekiq 会决定在同一个进程中运行 2 个或更多作业,因此它不会使用所有 8 个 vCPU,并且需要更长的时间才能完成。有没有办法告诉 sidekiq 使用哪个工作人员或强制它在一个组中平均分配工作?

【问题讨论】:

    标签: ruby-on-rails amazon-ec2 sidekiq


    【解决方案1】:

    答案是设计上你不能轻易做到。专业化是导致 SPOF 的原因。

    1. 您可以为每个进程创建一个自定义队列,然后为每个队列创建一个作业。
    2. 您可以使用没有同样缺陷的 JRuby。
    3. 您可以将处理作为 rake 任务执行,这将为每个作业生成一个进程,从而确保负载均匀。
    4. 您可以分割 64 个工作而不是 8 个工作,这样可以得到更均匀的负载。

    除非生成的 I/O 破坏机器,否则我可能会选择后者。

    【讨论】:

    • 谢谢,迈克。最初我选择选项 1,我已经验证它的工作原理就像一个魅力,特别是因为我只是将 Sidekiq 用于一种类型的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多