2009-04-22 20 views
0

大きな画像ファイルを小さな画像ファイルに処理する必要があります。私は多くの "スレーブ"サーバーに仕事を配布したいと思います。私はWindows Server 2005/2008、C#、およびASP.NETを使用しています。 Webアプリケーション開発経験は豊富ですが、分散システムを開発していません。私は次のようにこれを設計することができるという考えを持っていた:画像処理を複数のWindowsサーバに配布するファイルロックQ

1)ファイル共有ネットワークドライブに配置されるだろう

2)スレーブサーバ定期的に新しいコンテンツ

3)スレーブのドライブをポーリングします新しいファイルの名前をUNPROCESSED_appIDXXXX_jidXXXXX_photoidXXXXX.tifに変更し、そのファイルの処理を開始します。

4)他のスレーブサーバーは、ファイル名を調べることによって処理中のファイルを処理しようとしません。つまり、何かが "UNPROCESSED"と名前を付けられた場合、処理しようとしません。 2台のスレーブサーバが一度にファイル名を変更「グラブ」するとしようと

1)はあります問題、またはWindows Serverは、自動的にファイルをロックします:

は、私はいくつかのことを疑問に思って?

2)新しいコンテンツを通知するための最良のメカニズムは、どのようなものとすべきでしょうか? 1つの簡単な考え方は、各スレーブシステムに基本的なaspxページを書き、それをタイマーで実行させることです。もっと良いアイデアは、SystemFileWatcherを利用するWindowsサービスを作成し、各スレーブシステム上で実行させることです。 3番目のアイデアは、セントラルサーバーに何らかのスレーブサーバーに処理ジョブを試みるための命令を送ってもらうことです。しかし、マスターサーバーにマスターサーバーを通過させる非常にハッキングのアプローチを超えて、そのような通信を呼び出す方法はわかりません。 HTTP経由のメッセージ。

ご提供いただいたガイダンスは大変ありがとうございます。

乾杯、 -KF

答えて

0

あなたはcompute cluster type solutionにすべての道を行くしたくない場合。あなたは仕事を分け与えるどこかで走っている仕事マネージャーを持つことを考慮する必要があります。このようにして、サーバーは作業を行うことができるようになったときに、作業マネージャーに新しい作業を依頼します。次に、ジョブマネージャーにジョブが完了したことを伝え、ジョブマネージャーはジョブ全体の作業が完了したら "クライアント"に通知することができます。そうすれば、仕事を登録するのは簡単ですし、仕事のマネージャーはファイルの名前変更に関する競争条件の心配なしに仕事を分けることができます。 :)

+0

いいアイデア、ありがとう。 「クライアント」と「ジョブマネージャー」とのコミュニケーション方法に関する提案されたコミュニケーションメカニズムはありますか? これを行うには、デカップリングされたソリューションを保証する一方で、すべての情報を単一のデータベースに保存することもあります。必要に応じてジョブの割り当てが外に出る可能性があります。おそらく、複数の「ジョブマネージャー」がデータを参照し、必要に応じてジョブを割り当てることができます。 – kendor

+0

ジョブマネージャのdbは、ジョブとトレーサビリティの耐久性を可能にする良いアイデアです。ワーカは、例えば、WCFウェブサービスを介してジョブマネージャと通信することができる。しかし、http://ngrid.sourceforge.net/のような他のグリッドソリューションもチェックしてください。 –