Sidekiq工人重复工作的最佳做​​法

时间:2019-06-17 17:49:50

标签: ruby-on-rails sidekiq

我正在尝试定义最好/最有效的方法是在sidekiq上安排后台作业。我需要让每个用户定期运行此作业(即每15分钟,每天等等)。

作业与多个对象相关联,例如日历,发布,博客等。每个用户可以拥有0个对象。

我考虑了两种选择:

1)拥有一个调度程序作业,该作业又为上述每个对象调度一个后台工作人员。工人看起来像这样:

class WorkerScheduler
    def perform
      CalendarWorker.perform_async
      BlogWorker.perform_async
      ##### etc...
    end

`

在每个工作人员内部,我将对每个可用记录进行遍历(可能需要进行线程处理,如此处所述:How get best performance rails requests parallel 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

`

以上两种方法中的一种优于另一种吗?我希望确保以最有效的方式完成此操作,并且确保我的工作人员dyno(Heroku)不会过载。现在,我一直在计划一份工作机会记录,而我的记忆似乎正在使Dyno的内存不足500 MB,几乎没有流量。计划作业的数量是否对内存使用有很大影响?

对于工作本身的运行和计划,是否还有其他可能的方法?

0 个答案:

没有答案