0

私は一連の Web サービスの作成を任されています。私たちはマイクロソフトのショップなので、このプロジェクトでは WCF を使用します。まだ解決策を見つけられていない興味深い設計上の考慮事項があります。例を挙げて説明します。

私の WCF サービスは、Foo() という名前のメソッドを公開しています。

10 人の異なるユーザーがほぼ同時に Foo() を呼び出します。

R1、R2、R3、R4、R5 という 5 つの特別なリソースがあります。特定のリソースは、一度に 1 つの呼び出し元だけが使用できるという事実を除けば、リソースが何であるかを実際に知る必要はありません。

Foo() は、これらの特別なリソースの 1 つを使用してアクションを実行する責任があります。したがって、ラウンドロビン方式で、Foo() は使用されていないリソースを見つける必要があります。使用可能なリソースがない場合は、リソースが解放されるまで待機する必要があります。

最初は、これは簡単な作業のように思えます。現在使用中のリソースを追跡するシングルトンを作成することもできます。大きな問題は、このソリューションを Web ファームのシナリオで実行可能にする必要があるという事実です。

この問題には良い解決策があると確信していますが、これまでこのシナリオに遭遇したことはありません。複数の WCF ホスト間で共有できるある種のリソース トラッカー/プロバイダーが必要です。

そこにいる建築家からのアイデアは大歓迎です!

4

3 に答える 3

3

Web サービスのみが認識する別の中央サービスを作成します。このサービスは、リソース マネージャーの役​​割を果たします。

ファーム内のすべての Web サービスは、この中央サービスと通信して、リソースの可用性を照会し、リソースを "チェックアウト" および "チェックイン" します。

于 2010-05-20T03:40:49.177 に答える
0

ファーム上のすべてのサーバーがアクセスできるデータベース テーブルで、リソースの使用状況を追跡できます。

各リソースは、データベースにレコードがあり、使用されているかどうか (またはいつから使用されているか) を示すフィールドがあります。気を取り直して、タイムアウト機能を実装することもできます。

トラブルシューティングの目的で、誰がリソースを使用しているかを記録することもできます。

各リソースがいつ使用されているかを (別の表に) 記録すると、ラウンドロビンが期待どおりに機能していることを確認したり、リソースのコピーを追加する必要があるかどうかを判断したりできます。

于 2010-05-20T17:59:39.327 に答える
0

この問題を解決する方法はいくつもあり、それぞれに独自のコストと利点があります。例えば:

  • MSMQ を使用してすべての要求をキューに入れ、ワーカー プロセスはキューからメッセージを取り出し、Rn に渡し、応答を応答キューにポストして、Foo が適切な呼び出し元にディスパッチできるようにします。
  • メモリ内またはローカルに永続化されたメッセージ ディスパッチャーを使用して、選択した分散アルゴリズムに基づいて、オンボックス サービスに次の要求を送信します (たとえば、perf の名前付きパイプを介して)。

残念ながら、リクエストが停電に耐えなければならないかどうか、リクエストがトランザクションを認識する必要があるかどうか、呼び出し元も WCF であるかどうか、これらの呼び出しがどれくらい速く受信されるか、Rn が結果を返すのにかかる時間、等

どちらのソリューションを選択する場合でも、Foo() への呼び出しを RequestFoo() と GetFooResponse() のペアに分割するか、呼び出し元がホストする WCF コールバックを実装して結果を非同期に受け取ることを強くお勧めします。

これを行わないと、2 番目のトラフィックがワークロードを満たすリソースの能力を超えて、システム全体が停止する可能性があります。

于 2010-05-20T21:34:16.593 に答える