ASP.NET は、トラフィックの多い Web アプリケーションの開発で知られています。 これらのアプリケーションの多くは、複数の地理的な場所に展開されています。 このマルチサイト展開は、ASP.NET アプリケーションをエンド ユーザーの近くに配置することで、災害復旧の目的または地域のトラフィックを処理するために行われます。
ディザスター リカバリーの場合、通常、XNUMX つのアクティブ サイトと XNUMX つのパッシブ サイトがあります。 パッシブ サイトは、アクティブ サイトが何らかの理由でダウンするとすぐにアクティブになります。 また、XNUMX つ以上のサイトがすべてアクティブであるにもかかわらず、その地域 (ニューヨーク、ロンドン、東京など) に近いトラフィックを処理している場合もあります。
NCache 詳細 NCache ドキュメント ASP.NETセッション状態プロバイダー
ASP.NET は、Web サーバー上のセッション状態オブジェクトにユーザー固有の情報を保持します。 ユーザーが初めて ASP.NET アプリケーションにアクセスすると、そのセッション状態が作成され、ユーザーがアプリケーションをアクティブに使用している限り、その状態が維持されます。 既定では、ユーザーが 20 分間操作を行わないと、ASP.NET はこのセッションを期限切れにします。
ASP.NET セッション状態オブジェクトは、Web サーバー (InProc)、任意のサーバー (StateServer)、SQL Server データベース、または SSP アーキテクチャを使用したサード パーティ ストアのメモリに格納されます。
サードパーティのオプションは通常、次のようなメモリ内分散キャッシュです NCache、セッション状態を保存するのに最適な場所です。 その理由は、セッション レプリケーションによる ASP.NET セッション状態のパフォーマンスの高速化、スケーラビリティの向上、および信頼性の向上です。 以下は、web.config ファイルでカスタム セッション ストレージ オプションを指定する方法の例です。 NCache ASP.NET セッション状態ストレージとして:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<sessionState cookieless ="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"> <providers> <add name ="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionAppId="demoApp" cacheName="demoClusteredCache" writeExceptionsToEventLog="false" asyncSession="false" enableLogs="false"/> </providers> </sessionState> |
アクティブ-パッシブマルチサイト展開
ただし、アプリケーションがマルチサイト展開で実行されている場合、対処しなければならない問題は、何をすべきかということです ASP.NETセッション ステート ストレージ。 ASP.NET アプリケーションをアクティブ/パッシブ マルチサイト構成で展開した場合、すべての ASP.NET セッション状態が作成され、アクティブ サイトに格納されます。 パッシブ サイトにはセッション データがありません。 そのため、アクティブ サイトがダウンし、すべてのトラフィックがパッシブ サイトにリダイレクトされると、すべてのユーザーが突然セッションを失い、最初からやり直す必要があります。 を使用することでこれを回避できます。 NCache ブリッジ トポロジ。
作成したら ブリッジ アクティブ サイトとパッシブ サイトの間で、アクティブ サイトは、ASP.NET セッション状態オブジェクトのすべての追加、更新、および削除をブリッジに送信し始めます。 Bridge は、それらを WAN を介してパッシブ サイトに非同期的に複製します。 Bridge アーキテクチャはアクティブなサイトの操作をブロックしないため、パフォーマンスの低下は見られません。 注意しなければならない唯一の問題は、Bridge は非同期的に複製するため、アクティブ サイトが突然シャットダウンした場合にパッシブ サイトに到達しない「複製キュー」にセッションが存在する可能性があることです。 しかし、これは通常、取るに足らない数です。 についてもっと読む NCache ブリッジトポロジ そしてそれがあなたにとって有益なすべての状況。
NCache 詳細 NCache ドキュメント ASP.NETセッション状態プロバイダーのプロパティ
アクティブ-アクティブマルチサイト展開
ASP.NET アプリケーションが XNUMX つ以上のアクティブなサイトに同時に展開されている場合は、複製を避ける必要があります。 ASP.NETセッション状態 帯域幅コストを節約するためにすべてのサイトに。 ただし、オーバーフロー状況を処理するために、一部のトラフィックを他のサイトにルーティングする機能が必要になる場合があります。
または、ユーザーの作業を中断することなく、メンテナンスのためにいずれかのサイトを停止する必要がある場合があります。 この場合、マルチサイト ASP.NET セッション状態ストレージ機能を使用できます。 NCache. この機能を使用すると、これらのケースを処理し、web.config で指定して、このセッションの「プライマリ」サイトのロケーション プレフィックスを含むセッション ID を生成できます。 次に、このセッション要求が別のサイトにルーティングされたとしても、そのサイトはこのセッションの場所を認識しています。
ユーザーが他のサイトへのルートを要求しても、セッションはプライマリ ロケーションから移動しません。 ただし、他のサイトは、その「プライマリ」サイトからこのセッションにアクセスできます。 各サイトはその「プライマリ」サイトを指定し、他のすべてのサイトを「セカンダリ」サイトとして指定します。 この目標を達成するための手順は次のとおりです。
- web.config にエントリを追加します。 すべてのサーバーとサイトで同じ方法で ASP.NET セッション ID を生成する必要があります。 で利用可能なgenmackeysユーティリティを使用できます NCache キーを生成するためのインストール。
1<machineKey validationKey ="A01D6E0D1A5D2A22E0854CA612FE5C5EC4AECF24"decryptionKey ="ACD8EBF87C4C8937" validation ="SHA1"/> - セッションIDのロケーションアフィニティを有効にするには、以下に説明する構成を追加します。
123456<configSections><section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection,Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/></configSections><ncache><sessionLocation><primaryCache id="London_Cache" sid-prefix="LDNC"/><secondaryCache id="NewYork_Cache" sid-prefix="NYKC"/><secondaryCache id="Tokyo_Cache" sid-prefix="TKYC"/></sessionLocation></ncache> - web.configのsessionState要素のsessionIDManagerType属性を使用して、カスタムセッションIDマネージャーを指定します。
12345678910111213141516171819202122232425262728293031<<sessionStatecookieless ="false"regenerateExpiredSessionId="true"mode="Custom"customProvider="NCacheSessionProvider"timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"><providers><add name ="NCacheSessionProvider"type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"sessionAppId="demoApp"cacheName="demoClusteredCache"writeExceptionsToEventLog="false"asyncSession="false"enableLogs="false"/></providers></sessionState>
上記の例では、各サイトのセクションが異なることに注意してください。つまり、各サイトには独自の「プライマリ」があり、他のすべてのサイトは「セカンダリ」と見なされます。
NCache 詳細 NCache ドキュメント ASP.NET Core セッションズ
ASP.NET は、sid プレフィックスをセッション ID の一部にできるように、特定の形式で sid (セッション ID) を生成します。 このセッション ID は、そのサイトのキャッシュにアクセスできるように、ASP.NET が ASP.NET セッション状態の起源を知るのに役立ちます。 この構成では、オーバーフローのためにあるサイトから別のサイトに要求をルーティングすると、他のサイトは元の「プライマリ」サイトから ASP.NET セッション状態を取得します。これは、場所のプレフィックスとしてセッション ID の一部であるためです。 WAN 帯域幅の消費を最小限に抑え、オーバーフロー トラフィックに対してのみ支払います。
もう XNUMX つの状況は、サイトをダウンさせたい場合です。 このサイトのキャッシュ サーバーをシャットダウンせずに、サイトのすべてのトラフィックを他のサイトにリダイレクトできます。 Web サーバーをシャットダウンできます。 次に、ユーザーがアプリケーションの使用を停止した後、既存のすべての ASP.NET セッション状態オブジェクトが期限切れになるまで待ちます。 トラフィックがリダイレクトされたら、キャッシュ サーバーをシャットダウンするだけです。 これにより、ユーザーはダウンタイムを感じなくなります。 方法を見てみましょう NCache この目標を達成するのに役立ちます。 完全に機能する60日間の試用版をダウンロードする NCache.