0

次のように 5 つの Resque ワーカーをセットアップしています。

QUEUE=* rake environment resque:work
QUEUE=* rake environment resque:work
QUEUE=* rake environment resque:work

このような重い仕事を実行すると:

100.times do 
Resque.enqueue(DoTheJob)
end

最初のワーカーが約 80 のジョブを取得し、他のワーカーが残りを分担します...

私の場合、40 の同時実行の非常に負荷の高いジョブ (ビデオ トランスコーディング) があるかもしれません。それらは連続してトリガーされ、ジョブを既存のワーカー (最大 30 人まで) と均等または少なくとも公平に分けたいと考えています。

オプションか何かありますか?

どうすればこれを達成できますか?

ありがとうございました

4

1 に答える 1

0

上記のコードを最も単純な Resque ワーカー クラス構造で試してみると、次のようになります。

class MyWorker 
@queue=:test

def self.perform(data)

puts "Testing...."

end

end

100.times do 
Resque.enqueue(MyWorker)
end

すべてのジョブが同じワーカーのキューに入れられます。

しかし。

ワーカーに数秒置くと、sleepジョブがかなり公平に分散されていることがわかります。

class MyWorker @queue=:test

def self.perform(data)

puts "Testing...."
sleep 3
end

end

この目的のためのResqueのアルゴリズムが何であるかはわかりませんが、問題はないようです。

于 2013-10-09T12:18:55.673 に答える