0

多数のジョブを作成するアプリケーションがあり、これらのジョブを複数のサーバーで処理して負荷を分散できるようにしたい

各ジョブにはカテゴリがあり、カテゴリ内のすべてのジョブには特別な順序があります。したがって、カテゴリ A に関連するジョブ j1 がカテゴリ A に関連するジョブ j2 の前にある場合、j1 は j2 の前に処理する必要がありますが、ジョブ j3 はカテゴリ A に関連しています。カテゴリ B はその間に処理できます。

これを実装する方法について、次の 2 つのアイデアがあります。

  1. すべてのジョブを含む 1 つのキューを作成し、複数のワーカーがこのキューからプルするようにします。ワーカーがカテゴリ A に関連するジョブをプルする場合、カテゴリ A に関連するジョブをロックして、他の誰もそれらのジョブの処理を開始しないようにする必要があります。完了すると、ロックが解除されます。

  2. カテゴリごとにキューを用意し、ワーカーにどのキューからプルするかを伝えます。カテゴリ キューを担当するワーカーが 1 つだけの場合は、ロックする必要はありません。ワーカーは多くのキューを担当できます。

1 つのキューを使用し、ワーカーごとに特別なキューを指定する必要がないというアイデアは気に入っていますが、カテゴリごとにある種のセマフォを実装する必要があるというアイデアは好きではありません。

これまでのところ、キューイングに Redis を使用して大きな成功を収めてきましたが、役立つ可能性のあるパターンがもっとある zeromq を調べ始めました。

これを行う最善の方法と、推奨できるツール/ライブラリは何ですか?

4

1 に答える 1

0

Gearmanを使ってみることができます:

Gearman は、作業を実行するのにより適した他のマシンまたはプロセスに作業を委託するための汎用アプリケーション フレームワークを提供します。並行して作業を行い、処理の負荷を分散し、言語間で関数を呼び出すことができます。高可用性 Web サイトからデータベース複製イベントのトランスポートまで、さまざまなアプリケーションで使用できます。

これにより、サーバー間でワークロードを分散できます (ケース スタディを読むと、それが得意なようです)。また、タスクの優先度を高/低/通常に設定することもできます。大文字と小文字を正しく) して、ジョブが本来あるべき順序で処理されるようにします。

于 2012-04-16T14:03:55.840 に答える