2012-04-11 2 views
0

は、各ジョブカテゴリを持っているとし、内のすべてのジョブ、私は仕事の数を作成するアプリケーションを持っていると私は負荷を分散するためにいくつかのサーバー上でこれらのジョブを処理できるようにしたいジョブキュー

を作業負荷を分散しますカテゴリが特別な順序で来るので、カテゴリAに関連するジョブj1がカテゴリjに関連するジョブj2の前に来る場合、j1はj2の前に処理されなければならないが、カテゴリBに関連するジョブj3はその間で処理することができる。

  1. は、すべてのジョブでのキューを作成し、このキューから引っ張って、いくつかの労働者を持っている:

    は、私はこれを実装する方法の2つのアイデアを持っています。カテゴリAに関連するジョブを作業者が引っ張った場合、カテゴリAに関連するジョブをロックして、他の誰もそれらのジョブを処理しないようにする必要があります。その後、ロックが解除されます。

  2. 各カテゴリのキューを用意し、どのキューから取り出すかを作業者に伝えます。カテゴリキューを担当するワーカーが1人だけの場合は、ロックする必要はありません。作業者は多くのキューを担当する可能性があります。

私は1つのキューとの考えを好きで、各ワーカーのための特別なキューを指定する必要がありませんが、私はカテゴリごとにセマフォのいくつかの種類を実装することのアイデアを好きではありません。

これまで私は大きな成功を収めてキューイングにRedisを使用しましたが、多分私を助けることができるより多くのパターンを持っているzeromqを調べ始めました。

これを行う最善の方法と、どのツール/ライブラリをお勧めできますか?

答えて

0

あなたはGearmanを使用して試すことができます:

Gearmanは、仕事をするのにより適している 他のマシンやプロセスに仕事を外注するための一般的なアプリケーションフレームワークを提供します。 を使用すると、並列処理、負荷分散処理、言語間での関数の呼び出しが可能になります。高可用性Webサイトから データベースレプリケーションイベントの転送まで、さまざまな アプリケーションで使用できます。

それは(、ケーススタディからの読み取りと、その得意になりそうだ)あなたはサーバー間で負荷を分散することができますし、それはまた、あなたは、/高/低、通常通りの作業の優先順位を設定することができ、これはあなたが可能性ジョブが正しい順序で処理されるように(あなたのケースを正しく理解していれば)使用してください。

関連する問題