私はc#マルチスレッドモンテカルロシミュレーションを持っています、アプリケーションはすでに独立して実行されるタスクに分割できるように構造化されています、TaskControllerはタスクを実行し、中間結果を集約し、収束(早期終了基準)をチェックしてから最終結果を返します、これは現在ThreadPoolを使用して実装されています。
この計算を支援するために、複数のコンピューターを活用したいと思います。IISを使用するための承認またはインフラストラクチャがありません(これはポリシーは変更されません)が、たとえばNetTcpBindingエンドポイントバインディングでWCFを使用できます。サーバー間でこの通信をテストし、適切なアクセス許可と動作を持っています。
まず、1つのマスターexe(コンソールアプリ)と複数のスレーブを専用ワーカーとして他のサーバーに配置することを考えています(これらはexeですか?それともWindowsサービスですか?)、最終的にはこれを数百のワークステーションで実行するように設定できます(同様に)サーバーとして)アイドル時間中(またはスクリーンセーバーがアクティブなとき)の社内。
これは自分で書くこともできますが、コミュニケーションを処理する必要があります、1、2ウェイ?早期終了(中間コンバージェンス結果チェック)、不要になったタスクのキャンセル、作業の展開、作業の展開に使用できる準備が整ったマシンの検出、ワークステーションがアイドル状態でなくなった場合の作業の調整/一時停止?分散システムに入る他のすべて?
マスター(タスクコントローラー)がすべてのスレーブワーカーのアドレス(ip)を知っていて、作業を行うように指示する必要がありますか(使用可能な場合)、またはスレーブワーカーがマスターアドレスを知っているだけで、そうするか、コミュニケーションは双方向に流れる必要がありますか?これは24時間制で実行され、さまざまなビジネス地域をサポートするために1日あたり約9回の実行が開始されます。
この取り組みに役立つ.netグリッド/分散ライブラリの推奨事項とアーキテクチャに関するアドバイスを探しています。
アップデート
次のいずれかを使用した経験はありますか?
http://www.digipede.net/ (commercial)
http://www.gridbus.org/~alchemi/
http://ngrid.sourceforge.net/
http://www.osl.iu.edu/research/mpi.net/
または、JavaSpaces、.netのJiniを使用したか、同等の.netテクノロジーを見つけました
http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org
ありがとう