Лучшие практики Sidekiq для постоянных рабочих мест - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь определить, какой лучший / самый эффективный способ - планировать фоновые задания на 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 МБ, и почти нет трафика.Влияет ли количество запланированных заданий на использование памяти?

Существуют ли другие потенциальные способы сделать это как для самого задания, так и для планирования?

...