計算負荷の高いローカル処理を実行するプログラムがあります。計算パッケージには 16MiB の入力バッファーがあり、10KB から 16MiB の出力を生成します。これはすべて、マルチスレッド環境で発生します。
コンピューティング バウンドのユーザーが多数います。ピアツーピア マルチプロセッシングのサポートを追加することに関心があります。つまり、クライアントは組織内の複数のコンピューターで実行されます。マスターは利用可能なクライアントを見つけて、16MiB のバッファを送信し、結果を取得します。
マスターには、利用可能なクライアントのリストがあります。次に、各クライアントに無料であるというメッセージを送信します。クライアントは、所有するコアごとにスレッドを開始します。各スレッドは、マスターに作業バッファーを要求し、結果を計算してから、結果をマスターに送信します。マスターは、各クライアントからの結果を最終出力に組み込みます。
典型的な実行には、100 ~ 50,000 の 16MiB バッファーの処理が含まれます。通常、出力は 100MB から 10GB の範囲です。バッファ間にデータの依存関係はありません。
クライアントとサーバー間の通信を調整する最良の方法を探しています。私の計画は、ある種の RPC を使用することです。クライアントにもサーバーにも Web サーバーを組み込みたくありません。代わりに、私の計画は、単純に TCP ソケットで接続を受信し、ある種の基本的な RPC を持つことです。
私が検討しているオプションは次のとおりです。
- 独自のクライアント/サーバー システムの役割を果たし、プロトコル バッファーを使用して全体をまとめることができます。
- 既存のRPC システムの 1 つを potocol バッファーに使用できます。
- Web サーバーを組み込み、XMLRPC を使用することができました。
実装言語は C++ です。このプログラムは、Linux、MacOS 用にコンパイルされ、Windows 用の mingw でコンパイルされます。
ありがとう。