2014-09-10 2 views
1

Одним из преимуществ Sidekiq over Resqueue является то, что он может запускать несколько заданий в одном процессе. Недостаток, однако, заключается в том, что я не могу понять, как заставить ряд параллельных заданий работать в разных процессах.Можно ли принудительно запускать параллельные задания в отдельных процессах Sidekiq?

Вот мой прецедент: скажем, мне нужно сгенерировать 64M строк данных, и у меня есть 8 vCPU на экземпляре EC2 Amazon. Я хотел бы выполнить задачу до 8 одновременных заданий, генерирующих по 8 М строк. Проблема в том, что если я запускаю 8 сторонних процессов, иногда sidekiq решает запустить 2 или более заданий в одном и том же процессе, и поэтому он не использует все 8 vCPU и занимает гораздо больше времени для завершения. Есть ли способ сказать sidekiq, какой рабочий использовать или заставить его распределять задания в группе равномерно между процессами?

ответ

2

Ответ: Вы не можете легко, по дизайну. Специализация - это то, что приводит к SPOF.

  1. Вы можете создать пользовательскую очередь для каждого процесса, а затем создать одно задание для каждой очереди.
  2. Вы можете использовать JRuby, который не страдает от того же недостатка.
  3. Вы можете выполнить обработку как задачу грабли, которая будет порождать один процесс на одно задание, обеспечивая равномерную нагрузку.
  4. Вы можете вырезать 64 задания вместо 8 и получить более равномерную нагрузку таким образом.

Я бы, вероятно, сделал последний, если результирующий ввод-вывод не раздавит машину.

+0

Спасибо, Майк. Первоначально я собираюсь с вариантом 1, который я проверил, работает как шарм, тем более, что я действительно использую Sidekiq для одного типа работы. – mockaroodev

Смежные вопросы