は、私は次のプロパティを持つシステムを持っている:アルゴリズム
仕事に取り組む労働者があります。労働者を追加または削除することができます。各ワーカーは複数のジョブを同時に実行できます。
ジョブがあります。これらのジョブは永遠に(無期限に)実行され、ワーカーに割り当てられます。ジョブは追加または削除できます。
開始時に作業者にジョブを割り当てるためにラウンドロビンを使用していますが、この作業はかなりうまく機能します。
しかし、私は、ワーカーを追加したり削除したり、ジョブを追加したり削除したりするときに、ワーカーに割り当てられたジョブを再バランスしたいと考えています。
上記の変更のいずれかが発生した場合、ラウンドロビンアルゴリズムを使用してすべてを再割り当てすることは可能ですが、必要以上に変更を加えることになります。
つまり、ラウンドロビンのリバランスアルゴリズムがあるため、割り当ての差分や変更が最小限に抑えられますか?
同じ時間に複数のジョブで作業するにはどうすればいいですか?あなたの記述には、仕事で仕事を中断することができ、この中断された仕事を他の従業員が再開できるという暗黙の前提もあります。それは解決された問題か、この問題を解決するためにあなたの質問に対する答えを期待していますか? – fjardon
各ジョブはgoルーチンとして起動されるため、ワーカーは複数のジョブを同時に処理できます。つまり、各ジョブはスレッドとして考えることができます(ただし、実行ルーチンはスレッドではありません)。ジョブは比較的シンプルです。データベースからメッセージバスにメッセージをプッシュするので、ジョブを別のワーカーに切り替えるのは簡単です。 – F21
1つの作業を複数の作業者に同時に割り当てることはできますか? –