asp.netアプリケーションに多くのシングルトン実装があり、パフォーマンス上の理由から、アプリケーションをIISWebGarden環境に移動したいと考えています。
CMIIW、n個のワーカープロセスを使用してIIS Web Gardenに移動すると、各ワーカープロセスで1つのシングルトンオブジェクトが作成されます。これにより、 n > 1であるため、単一のオブジェクトではなくなります。
これらすべてのシングルトンオブジェクトをIISWebGardenで再びシングルトンにすることはできますか?
asp.netアプリケーションに多くのシングルトン実装があり、パフォーマンス上の理由から、アプリケーションをIISWebGarden環境に移動したいと考えています。
CMIIW、n個のワーカープロセスを使用してIIS Web Gardenに移動すると、各ワーカープロセスで1つのシングルトンオブジェクトが作成されます。これにより、 n > 1であるため、単一のオブジェクトではなくなります。
これらすべてのシングルトンオブジェクトをIISWebGardenで再びシングルトンにすることはできますか?
私はあなたができるとは思いません(それらのIISワーカーに共有メモリ内のオブジェクトを何らかの方法で使用させることができない限り)。
これはスコープの問題です。シングルトンインスタンスは、スコープとしてプロセススペースを使用します。そして、あなたが言ったように、あなたの実装は今や複数のプロセスにまたがっています。 定義上、ほとんどのオペレーティングシステムでは、シングルトンは単一のクラスインスタンスまたはオブジェクトに関連付けられているため、特定のプロセススペースに関連付けられます。
本当にシングルトンが必要ですか?これは、そのパターンを使用する前に尋ねる非常に重要な質問です。ウィキペディアが言うように、それをアンチパターン(またはコードの臭いなど)と考える人もいます。
動作する可能性のある代替設計の例には、次のものがあります...
大規模なWebサイトのオプション3が好きです。コンパニオンWindowsサービスは、一般的に大規模なWebサイトで非常に役立ちます。メールの送信やバッチジョブなどの多くのものは、フロントエンドの処理ワーカープロセスからすでに切り離されている必要があります。シングルトンサーバーオブジェクトをそのプロセスにプッシュし、IISワーカープロセスでクライアントオブジェクトを使用できます。
シングルトンクラスが状態を共有する、または初期状態を共有するだけの複数のオブジェクトで機能する場合は、オプション1と2がそれぞれ機能するはずです。
編集
あなたのコメントから、分散キャッシュの形の最初のオプションがあなたのために働くはずだと思われます。
そこには多くの分散キャッシュの実装があります。
PS。あなたは特にチャットを調べているので。Comet(ASP.NETのComet実装?、WebSyncなど)を調査することを強くお勧めします