Очередь задач resque. Одна большая или несколько мелких?

Ситуация примерно такая.
Есть rails приложение, для очередей используется Resque.
Каждый час надо проводить некую синхронизацию, допустим по 1000 записей. По каждой обновляются данные, проводятся пересчет и тп. Это происходит через очередь.
Если делать через одну задачу, то она идет долго и если упадет синхронизация по одному из элементов, то перезапуск задачи будет не очень корректен. так как начнет обновлять сначала все записи. Если же запускать синхронизацию для каждого элемента через отдельную задачу, то перезапуск становится удобней, но нагрузка на процессор увеличивается в 3 раза.
Может кто-то сталкивался с похожим или может дать теоретический совет в какую сторону лучше копать. Возможно можно оптимизировать через настройки. Буду еще сам копать ,когда будет время, но если кто-то может дать совет, буду благодарен.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 1
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Нагрузка возрастает потому что задачи начинают обрабатываться параллельно, причем каждая в новом процессе.

Идеальный вариант, переехать на Sidekiq - он и сам по себе намного быстрее и при необходимости можно настроить количество задач, которые выполняются одновременно.

Если такой возможности нет, то можно запускать одну большую задачу, отлавливать падение синхронизации через begin rescue чтобы не нарушать общий процесс. Для всех отловленных запустить отдельную задачу. Если их не много, то нагрузка возрастет только на время их обработки
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы