2

我正在使用 Resque、Resque-Status 和 Resque-Retry 来处理 bkg 作业。以下是一个示例作业。它对 4​​-5 个模型执行查询。现在我想尝试使用Sidekiq,它的速度超过了 Resque。

但在此之前,我想在我的 rails 应用程序中对我的以下工作进行基准测试,以便稍后验证哪个表现最佳。

class BkgJob < Resque::JobWithStatus
  extend Resque::Plugins::Retry
  @retry_limit = 3
  @retry_delay = 60

  @queue = :critical

  def perform
    worker_id, station_id, ids = options['worker_id'], options['station_id'], options['ids']
    human_worker = Worker.find(human_worker_id)
    station = Station.find(station_id)
    .....
    .....
  end
end

那么,问题是如何对上述工作类或执行方法进行基准测试?我真的是基准测试的新手。

4

1 回答 1

0

对于 Resque 或 Sidekiq,您在后台运行的作业的性能几乎相同。但是,Sidekiq 从队列中挑选作业的速度要快得多,并且与 Resque 相比内存效率要高得多。

对后台作业进行基准测试仍然是一个好主意,但我想说您应该只对 perform 方法本身进行基准测试,而不是对排队和执行作业的整个过程进行基准测试。您可以执行以下操作(RSpec 示例):

require 'benchmark'

describe 'performance' do
  it 'takes time' do
    options = {'worker_id': 123, 'station_id': 456, 'ids': [1,2,3]}
    puts Benchmark.realtime do
       100.times { BkgJob.new(options).perform }
    end
  end
end
于 2012-05-17T08:44:06.740 回答