多数のジョブを作成するアプリケーションがあり、これらのジョブを複数のサーバーで処理して負荷を分散できるようにしたい
各ジョブにはカテゴリがあり、カテゴリ内のすべてのジョブには特別な順序があります。したがって、カテゴリ A に関連するジョブ j1 がカテゴリ A に関連するジョブ j2 の前にある場合、j1 は j2 の前に処理する必要がありますが、ジョブ j3 はカテゴリ A に関連しています。カテゴリ B はその間に処理できます。
これを実装する方法について、次の 2 つのアイデアがあります。
すべてのジョブを含む 1 つのキューを作成し、複数のワーカーがこのキューからプルするようにします。ワーカーがカテゴリ A に関連するジョブをプルする場合、カテゴリ A に関連するジョブをロックして、他の誰もそれらのジョブの処理を開始しないようにする必要があります。完了すると、ロックが解除されます。
カテゴリごとにキューを用意し、ワーカーにどのキューからプルするかを伝えます。カテゴリ キューを担当するワーカーが 1 つだけの場合は、ロックする必要はありません。ワーカーは多くのキューを担当できます。
1 つのキューを使用し、ワーカーごとに特別なキューを指定する必要がないというアイデアは気に入っていますが、カテゴリごとにある種のセマフォを実装する必要があるというアイデアは好きではありません。
これまでのところ、キューイングに Redis を使用して大きな成功を収めてきましたが、役立つ可能性のあるパターンがもっとある zeromq を調べ始めました。
これを行う最善の方法と、推奨できるツール/ライブラリは何ですか?