1

Resque が複数のサーバーでバックグラウンド ジョブを実行する Rails アプリケーションがあります。ジョブはリソースのニーズが異なるため、各サーバーで実行できる特定の種類のジョブの量を制限したいと考えています。複数のサーバーが同じ Redis データベースにクエリを実行できるようにしたいと考えています。

シナリオは次のとおりです。Server-1 と Server-2 が同じ Redis データベースに接続されています。

1) 各サーバーは、最大 3 つの「エンコード」ジョブと 5 つの「解析」ジョブ (合計 8​​ つのジョブ) を実行する必要があります。

2) ある時点で、Redis サーバーの「エンコード」キューに 10 個のジョブ、「解析」キューに 12 個のジョブがあり、Resque ワーカーが処理できるようになります。同じデータベースにクエリを実行する 2 つのサーバーを実行しています。

質問: Server-1 が 8 つの「エンコード」ジョブを実行し、Server-2 が残りを実行しないようにするにはどうすればよいですか? つまり、Server-1 が「エンコード」キューから 3 つのジョブのみを取得し、「解析」キューから 5 つのジョブのみを取得するように制限し、Server-2 に同じことをさせる方法は?

個々の調整なしで複数のサーバーに展開できるように、コードを普遍的に保ちたい..

4

2 に答える 2

0

これは、redis レベルでできることでも、すべきことでもありません。redis インスタンスへのアプリケーション リクエストの間に介在するスーパーバイザーが必要です。私は長い間、Ruby の製品レベルで何も書いていないので、お気に入りの候補を提案することはできませんが、Ruby コミュニティには、まさに必要なことを行うための何かがあると確信しています。

于 2012-10-19T06:22:13.777 に答える
0

cantこのような単一のレーキタスクでこれを達成します(私は推測します)

rake resque:workers COUNT=8 QUEUE=encoding_queue,parsing_queue Background=yes

しかし、レーキタスクを分岐できる場合は、次のことができます

オンSERVER-1

rake resque:workers COUNT=3 QUEUE=encoding_queue BACKGROUND=yes

rake resque:workers COUNT=5 QUEUE=parsing_queue BACKGROUND=yes

ONで同じことを繰り返すSERVER-2

この助けを願っています

于 2012-10-28T17:15:50.173 に答える