2017-04-12 27 views
1

SQLServerとしてSessionStateModeを使用するセッション変数の永続記憶域を持つことができます。アプリケーション変数に柔軟性が必要なのはなぜですか?そのサイズは非常に小さいはずです(すべてのユーザーに共通)。Webファーム環境でサーバー間でAsp.Netアプリケーション変数を共有する方法

私たちが.net Webファームを考えている場合、これらのアプリケーション変数を一貫性のあるものにする必要があるかもしれません。 SessionStateModeはアプリケーション変数も格納できますか?テーブルが表示されますが、列にはAppIdAppNameしかありません。

+0

アプリケーション変数とはどういう意味ですか? 'Global.asax'の中にあるpublic static変数?あるいは 'Application [" Foo "] =" Bar ";'? – Alisson

+0

Application ["Foo"] = "Bar"のようなアプリケーション状態変数 – anveshtummala

+1

私は両方のサーバーにRedisをインストールし、フェールオーバーで複製を構成しました。しかし、あなたが尋ねたように使用することができれば、それが可能かどうかを知りたいと思っています。 +1 – Alisson

答えて

0

@Alisson

これで良いアプリケーションの状態を使用している場合

アプリケーションの状態の考慮事項 は、次の重要な考慮事項に注意する必要があります読み:それはですので :

リソースメモリに格納されているため、ディスクやデータベースにデータを保存する場合と比べて、アプリケーションの状態は非常に高速です。ただし、大量のデータブロックをアプリケーションの状態で保存すると、サーバーのメモリがいっぱいになり、サーバーがメモリをディスクにページングする可能性があります。アプリケーション状態を使用する代わりに、大量のアプリケーションデータを格納するためにASP.NETキャッシュメカニズムを使用できます。 ASP.NETキャッシュはデータをメモリに格納するため、非常に高速です。ただし、ASP.NETは積極的にキャッシュを管理し、メモリが不足するとアイテムを削除します。詳細については、「ASP.NETキャッシュの概要」を参照してください。

ボラティリティ:アプリケーション状態はサーバーメモリに格納されているため、アプリケーションが停止または再起動されるたびに失われます。たとえば、アプリケーション状態値がデータベースなどの不揮発性記憶媒体に書き込まれない限り、Web.configファイルが変更されると、アプリケーションが再起動され、すべてのアプリケーション状態が失われます。

スケーラビリティ:アプリケーションの状態は、Webガーデンのように、Webファームのように、あるいは同じサーバー上の同じアプリケーションを提供する複数のワーカープロセスの中で、同じアプリケーションにサービスを提供する複数のサーバ間で共有されていません。したがって、アプリケーションは、異なるサーバーまたはプロセスにわたってアプリケーション状態の同じデータを含むアプリケーション状態に依存することはできません。 アプリケーションをマルチプロセッサ環境またはマルチサーバー環境で実行する場合は、アプリケーション全体で忠実度を維持する必要があるデータに対して、データベースなどのよりスケーラブルなオプションを使用することを検討してください。

同時実行性:アプリケーション状態はフリースレッドです。つまり、アプリケーション状態データには多くのスレッドが同時にアクセスできます。したがって、アプリケーションの状態データを更新するときは、組み込みの同期サポートを組み込むことで、スレッドセーフな方法でデータを確実に更新することが重要です。 LockメソッドとUnLockメソッドを使用すると、一度に1つのソースのみで書き込み用のデータをロックすることで、データの整合性を確保できます。また、Global.asaxファイルのApplication_Startメソッドでアプリケーションの状態値を初期化することで、並行性の問題の可能性を減らすこともできます。

関連する問題