I have to write a distributed system with four processes running on four different nodes. The distributed system is supposed to work in the following way: a random number generator generates a random number at each process. The objective is to even out these values in all processes by message passing between processes. Such that process A is the server who gets the numbers from all proceses and then orders them to send a portion of their number to one or more other processes in order to even out all numbers the processes hold. For example A's count is 30, B's count is 65, C's count is 35 and D's count is 70. A computes 30+65+35+70 = 200 divided by 4 = 50. Now process A, the server, knows who has less than average and who has more than average. Now the question is how does A decide who sends what number to who? to even out the values of all processes. please note that A can't directly instruct a process to decrement or increment its count e.g. it can't send a message to B and tell it to decrement by 15 and then send another message to C and tell it to increment by 15. A must send a message to B that will tell B to decrement by 15 and then send a message to C and tell it to increment by 15 or in other words it tell B to send 15 of your count to C. Thanks in advance. Zaki.
2 に答える
私が知っていることについては、特定のレシピがないか、そのような分散システムを実装するためのパターンを明確に定義しているだけです(また、議論に関するガイドラインを提供する資料がある場合は、質問の最後のリンクを参照してください)。ここには、最終的なシステム、そのスケーラビリティ、応答性、堅牢性などを形作るさまざまな選択が含まれます。
質問に言語に依存しないタグを付けました。優れたコンセプトはテクノロジよりも重要であると確信していますが、最終的には選択を行う必要があり、このようなシステムは複雑すぎて、よく知らない言語で構築することはできません。
C# は私の主要な開発言語であり、アジャイル開発向けの手法を進めているため、C# でビルドします。
- 最初に、関与するアクターとその責任を強調して、マクロ アーキテクチャ デザインのスケッチを試みます(ただし、詳細には触れません)。
- 次に、2 つのノードを含む最初の単純なプロトタイプのコーディングを試みます。
- プロトタイプが動作したら、弱点を見つけて 4 つのノードで動作させます。
- 問題がある場合は、要件を満たすまで最後のポイントを繰り返します。
詳細に説明すると、生のソケットを使用してもビルドできます。ただし、簡単にするために、通信用のHTTP プロトコル(.NET BCL HttpListenerおよびHttpClientコンポーネントをベースとして使用するなど) でシステムを見つけたことをお勧めします。
- 事前定義されたメッセージのセットは
GET
、ピア サーバー間の同期を実行できます。 POST
message を使用して、乱数に関するデータを交換できます。
数の生成については、まったく新しい世界が開かれます。ANU Quantum Random Serverのような外部サービスに依存します(アクティブなインターネット接続をカウントできる場合)。実装するアルゴリズムがあると述べたことは知っていますが、これを代替手段として提供しました(この部分を変更できるかどうかはわかりません)。