是否可以强制并行作业在单独的Sidekiq进程中运行?

时间:2014-09-10 13:35:22

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

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. 您可以为每个进程创建自定义队列,然后为每个队列创建一个作业。
  2. 你可以使用没有相同缺陷的JRuby。
  3. 您可以将处理作为rake任务执行,该任务将为每个作业生成一个进程,确保均匀负载。
  4. 您可以分割出64个作业而不是8个作业,并以此方式获得更均匀的负载。
  5. 除非产生的I / O粉碎机器,否则我可能会做后者。