私は計算量の多いローカル処理を実行するプログラムを持っています。計算パッケージには16MiBの入力バッファがあり、10KBから16MiBの出力を生成します。これはすべてマルチスレッド環境で発生します。ピアツーピアシステム用のC++クライアント/サーバーを作成するには、最適なRPCパッケージは何ですか?
私は計算に縛られている多くのユーザーがいます。ピアツーピアマルチプロセッシングのサポートを追加することに興味があります。つまり、クライアントは組織内の複数のコンピュータで実行されます。マスターは使用可能なクライアントを見つけ、16MiBのバッファを送信してから結果を取得します。
マスターには利用可能なクライアントのリストがあります。それは、それが無料であるというメッセージを各クライアントに送信します。クライアントは、それぞれのコアのスレッドを開始します。各スレッドは、マスタに作業バッファを要求し、結果を計算し、結果をマスタに送信します。マスターは、各クライアントからの結果を最終出力に組み込みます。
典型的な実験では、100〜50,000の16MiBバッファーを含む。出力は通常100MB〜10GBの範囲です。バッファ間にはデータの依存関係はありません。
私は、クライアントとサーバー間の通信を調整する最良の方法を探しています。私の計画は何らかのRPCを使うことです。私は、クライアントまたはサーバーのいずれかにWebサーバーを埋め込むことは望ましくありません。代わりに、私の計画は単純にTCPソケット上の接続を受け取り、何らかの基本RPCを持つことです。ここで
私が検討しているオプションは次のとおりです。
- 私ができる役割自分のクライアント/サーバ・システムと一緒に全部を入れて、プロトコルバッファを使用しています。
- 既存のRPC systems for potocol buffersのいずれかを使用できます。
- Webサーバーを埋め込み、XMLRPCを使用できます。
実装言語はC++です。このプログラムは、Linux、MacOS、およびWindows用のmingwでコンパイルされます。
ありがとうございました。
あなたの質問はありますか?とにかく、 'protobuf'はC++コーディングにとっては良い選択ですが、XMLは悪いものです。 RPCは(潜在的な)セキュリティホールです。リモートエンドで参照する関数名を渡す代わりに、「どのような処理を行うべきか」を表すフィールドをメッセージに含めてください。 –
また、これは転送されるデータ量が多いため、複数のスレッド間で帯域幅を分割するのではなく、残りの作業項目が転送される間に1つのスレッドが動作するように、マルチスレッドクライアントへの転送をシリアル化することができます。 –
私の質問は「ピアツーピアシステムのためのC++クライアント/サーバを書くのに最高のRPCパッケージは何ですか?」 – vy32