12

ワーカープロセスを分散させるアプリケーションを作成する予定です。それらの1つは、他のプロセスにタスクを割り当てるリーダーになります。リーダー選出プロセスの設計は非常に簡単です。各プロセスは、同じパスにエフェメラルノードを作成しようとします。成功した人は誰でもリーダーになります。

さて、私の質問は、タスクを均等に分散するプロセスをどのように設計するかです。このためのレシピはありますか?

環境設定について少し詳しく説明します。

10人の労働者の機械があり、それぞれがプロセスを実行し、そのうちの1つがリーダーになるとします。タスクはキューに送信され、リーダーはそれらを取得してワーカーに割り当てます。タスクが送信されるたびに、ワーカープロセスに通知が送信されます。

4

3 に答える 3

8

リーダー選挙のアルゴリズムを理解しているかどうかはわかりませんが、これを実装するための推奨される方法は、シーケンシャル エフェメラル ノードを使用し、http://zookeeper.apache.org/doc/r3.3.3/recipes.html#のアルゴリズムを使用することです。 「群れ」効果を回避する方法を説明するsc_leaderElection 。

タスクの分散は単純な分散キューで行うことができ、リーダーは厳密には必要ありません。プロデューサはタスクをエンキューし、コンシューマはタスク ノードを監視します。監視がトリガーされると、コンシューマはタスクを取得し、関連する znode を削除します。失敗したコンシューマーからタスクを再キューイングする際に考慮すべき特定のエッジ条件があります。http://zookeeper.apache.org/doc/r3.3.3/recipes.html#sc_recipes_Queues

于 2011-06-17T15:00:51.233 に答える
1

Example: Master-Worker Applicationこの本のセクションをお勧めしますZooKeeper Distributed Process Coordination http://shop.oreilly.com/product/0636920028901.do

この例では、znode と一般的な Zookeeper コマンドを使用してタスクをワーカーに分散する方法を示しています。

于 2015-05-14T08:13:43.590 に答える
0

アクター シングルトン サービス パターンの使用を検討してください。たとえば、Scala には、このクラスの問題をより少ないコードで解決するAkkaがあります。

于 2012-05-23T12:35:44.367 に答える