Я пытаюсь определить, какой лучший / самый эффективный способ - планировать фоновые задания на sidekiq.Мне нужно, чтобы эти задания выполнялись периодически (т.е. каждые 15 минут, каждый день и т. Д.) Для каждого пользователя.
Задания привязаны к нескольким объектам, таким как календари, публикации, блоги и т. Д. Каждый пользователь может иметь0-много таких объектов.
Я рассмотрел два варианта:
1) Иметь задание планировщика, которое, в свою очередь, планирует фонового работника для каждого из объектов выше.Рабочий будет выглядеть примерно так: `
class WorkerScheduler
def perform
CalendarWorker.perform_async
BlogWorker.perform_async
##### etc...
end
`
, и внутри каждого рабочего я буду проходить процесс для каждой доступной записи (которая может потребовать многопоточности, как обсуждалосьздесь: Как добиться максимальной производительности запросов на рельсы параллельно sidekiq worker `
class CalendarWorker
calendars = Calendar.all
calendars.each do |calendar|
#### actions for each calendar
end
### reschedule worker
CalendarWorker.perform_in(15.minutes)
end
end
`
2) Каждый раз, когда создается новая запись для календарей, публикаций, блогов,и т. д. Запланируйте фонового работника, и в рамках этого работника перенесите его на выполнение позже по желанию.То есть: `
class CalendarWorker
def perform(i)
.... complete all logic for Calendar.find(i) ...
CalendarWorker.perform_in(15.minutes, i)
end
end
`
Является ли одно из вышеперечисленного лучше другого?Я хочу убедиться, что это сделано наиболее эффективным способом, а также чтобы мой рабочий динам (Heroku) не был перегружен.Прямо сейчас я планирую запись о предложении работы, и моя память, кажется, разглядывает привет Dyno чуть менее 500 МБ, и почти нет трафика.Влияет ли количество запланированных заданий на использование памяти?
Существуют ли другие потенциальные способы сделать это как для самого задания, так и для планирования?