2014-09-10 78 views
1

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

这里是我的用例:假设我必须生成64M行数据,并且我在Amazon amazon EC2实例上有8个vCPU。我想将任务分成8个并行作业,每个作业生成8M行。问题是,如果我运行8个sidekiq进程,有时sidekiq会决定在同一进程中运行2个或更多的作业,因此它不会使用全部8个vCPU,并且需要更长的时间才能完成。有没有什么办法可以告诉sidekiq要使用哪个工人,还是强制它在工作流程中平均分配工作组中的工作?

回答

2

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

  1. 您可以为每个进程创建一个自定义队列,然后为每个队列创建一个作业。
  2. 您可以使用JRuby,它不会遭受同样的缺陷。
  3. 您可以执行处理作为rake任务,每个作业会产生一个进程,确保负载均匀。
  4. 您可以分割64个作业而不是8个,并以这种方式获得更均匀的负载。

我可能会做后者,除非产生的I/O粉碎机器。

+0

谢谢,迈克。最初我会选择1,我已经验证了它的魅力,特别是因为我只是在一种类型的工作中使用Sidekiq。 – mockaroodev 2014-09-10 16:58:36

相关问题