Очередь задач resque. Одна большая или несколько мелких?
Ситуация примерно такая.
Есть rails приложение, для очередей используется Resque.
Каждый час надо проводить некую синхронизацию, допустим по 1000 записей. По каждой обновляются данные, проводятся пересчет и тп. Это происходит через очередь.
Если делать через одну задачу, то она идет долго и если упадет синхронизация по одному из элементов, то перезапуск задачи будет не очень корректен. так как начнет обновлять сначала все записи. Если же запускать синхронизацию для каждого элемента через отдельную задачу, то перезапуск становится удобней, но нагрузка на процессор увеличивается в 3 раза.
Может кто-то сталкивался с похожим или может дать теоретический совет в какую сторону лучше копать. Возможно можно оптимизировать через настройки. Буду еще сам копать ,когда будет время, но если кто-то может дать совет, буду благодарен.
Нагрузка возрастает потому что задачи начинают обрабатываться параллельно, причем каждая в новом процессе.
Идеальный вариант, переехать на Sidekiq - он и сам по себе намного быстрее и при необходимости можно настроить количество задач, которые выполняются одновременно.
Если такой возможности нет, то можно запускать одну большую задачу, отлавливать падение синхронизации через begin rescue чтобы не нарушать общий процесс. Для всех отловленных запустить отдельную задачу. Если их не много, то нагрузка возрастет только на время их обработки
Была такая догадка, что в этом дело. Но хотелось услышать со стороны. Про Sidekiq тоже уже думал. Просто вот думаю какой вариант будет оптимальный. Что бы и нагрузкой на серваке что-то не положить и что бы ошибки можно было легко отлавливать и что бы все задачи завершались как можно быстрей. Просто если ограничивать количество, то следовательно будет обрабатываться дольше. Вопрос в том, где золотая середина? Если учесть что скорость выполнения очень важна, но и падение не допустимо.
Тут только пробовать. Ставите сайдкик, лучше 3ю версию, 4ая еще не обкатана. И смотрите как быстро выполняется и как нагружает сервер. Выбираете оптимальные настройки.
Сайдкик должен без проблем установиться, он совместим с Resque. Даже задачи очереди должен подхватить