ASP.NET Core スケーラブルなWebアプリケーションを構築するために使用されるオープンソースフレームワークです。 クロスプラットフォーム機能を提供し、 マイクロサービス 建築。 そして、の出現で。ネット 6.0、パフォーマンスと開発経験の点でのみ改善されています。 ただし、その真の可能性を妨げる特定のボトルネックが依然として存在します。
これらのボトルネックのXNUMXつはデータベースの読み取り時間であり、このボトルネックは、アプリケーションが一度に数十万のユーザーにサービスを提供する必要がある場合に特に顕著です。 ASP.NET Core セッションストレージは、メモリ内データストレージを使用することでこのような問題を軽減するのに役立ちます。 ただし、デフォルトのセッションストレージプロバイダーにはいくつかの制限があります。 これらは:
- セッションロス: アプリケーションサーバーがダウンすると、セッションが失われます。
- メモリの制限:データはアプリケーションプロセスのメモリ空間に保存されるため。
- セッションレプリケーションなし: 何らかの理由でトラフィックが別のサーバーに再ルーティングされた場合、セッションは繰り越されません。
- スティッキーセッション: Webファーム環境では、スティッキーセッションを使用する必要があり、ロードバランシングの目的が損なわれます。
幸いなことに、 NCache これらすべての問題などを解決するためにここにあります。 次のセクションでさらに詳しく説明します。
NCache 詳細 ダウンロード NCache ASP .NET Core セッションストレージ戦略
そもそもなぜ分散セッションストレージを使用するのですか?
定義上、HTTPはステートレスプロトコルです。つまり、情報は複数のリクエスト間で保持されません。 サードパーティのメカニズムは通常、情報を引き継ぐために使用されます。 そのようなメカニズムのXNUMXつがセッションストレージです。 ASP.NET Core データをキャッシュにバックアップするセッションストレージを提供します。 したがって、アプリケーションはデータベースに直接アクセスするのではなく、最初に情報がキャッシュに保存されているかどうかを確認します。保存されている場合、アプリケーションはその情報を返し、そうでない場合にのみ、アプリケーションはデータベースにクエリを実行します。
ただし、セッションデータは一時的なデータと見なされることに注意してください。 アプリケーションは、空のセッションキャッシュに関係なく機能し続ける必要があります。 セッションデータは、パフォーマンスの最適化のニーズにのみ使用する必要があります。 ASP.NET Core セッションキャッシングにはXNUMXつのオプションがあります。
これらのオプションはどちらも非常に高速で、ほとんどの場合、作業を完了します。 ただし、デフォルトの実装には同じ欠点があります。 どちらも、単一障害点を備え、サーバーがダウンした場合のデータ複製のオプションがないスタンドアロンキャッシュを提供します。 膨大な数のユーザーが同時にリソースを要求し、セッションデータの損失がオプションではないミッションクリティカルなアプリケーションの場合、分散キャッシュが最適です。
なぜ NCache?
NCache .NETでネイティブに開発されたオープンソースのメモリ内分散キャッシュであり、 .NET Core。ローカルだけでなく、一部のサードパーティのホスティング プラットフォームでも動作するように構成できます。さらに、 NCache コードをほとんど変更せずにセッションストレージのバッキングストアとして設定できます。また、その固有の分散性により、次の問題に対処します。
- メモリの制限: キャッシュ自体は実際のWebアプリケーションとは別のプロセスにあるため、メモリの制限はなくなります。
- 信頼性の向上:キャッシュクラスターは、完全に別個のマシンセットに配置することもでき、信頼性をさらに高めることができます。
- キャッシングトポロジ: NCache 4つの異なるを提供しています キャッシングトポロジ。 スケーラビリティ、高可用性、またはデータレプリケーション(メモリ使用量を犠牲にして)を優先するかどうかにかかわらず、要件に基づいてそれらのいずれかを選択できます。
- データレプリケーション: アプリケーションサーバーが停止しても、セッションデータは安全に保たれます。
- マルチ-リージョンセッションストレージ: NCache オファー マルチリージョンセッション共有 同じように。 セッションはWAN全体にシームレスに複製されます。 そのため、ユーザーを別の場所に再ルーティングする必要がある場合でも、セッションはそのまま維持されます。
NCache セッションストレージのXNUMXつの戦略を提供します。XNUMXつは セッションストレージプロバイダー もう1つは NCacheのIDistributedCacheの実装。 次のセクションでは、その方法の技術的な詳細について説明します。 NCache ASPのセッションストレージに役立ちます.NET Core.
NCache 詳細 ASP .NET Core セッションストレージ戦略 ASP.NET Core キャッシング
を使用したセッションストレージ NCache
セットアップ NCache セッションストレージのバッキングストアとしては非常に簡単です。 によって提供されるXNUMXつのアプローチを見ていきます NCache:
方法1:セッションストアプロバイダー
このアプローチでは、をインストールする必要があります AspNetCore.Session。NCache NuGetパッケージ。 このパッケージをインストールした後、必ず Alachisoft.NCache.Web.SessionState
の名前空間 スタートアップ.cs アプリケーションのファイルを追加し、 NCache サービスコレクションのサービスとして:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
これで、セットアップは正常に完了しました NCache セッションストレージプロバイダーとして。 詳細については NCache、あなたは見ることができます NCache プログラマーガイド.
方法2:IDistributedCacheの実装
の実装をすでに使用している場合 IDistributedCache
、このアプローチで行くことができます。 インストールするだけです NCache.Microsoft.Extensions.Caching NuGetパッケージ。 また、ASPのサービスを構成する際に.NET Core アプリケーションは次のコードを追加するだけです。
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
そして出来上がり、あなたは今使うことができます NCacheの実装 IDistributedCache
.
マルチリージョンセッションストレージを使用して NCache
さまざまなキャッシングトポロジによって提供されるデータレプリケーション機能に加えて、 NCache また、個別のキャッシュクラスター間で完全なセッション共有を提供します。 これは、地域ごとにデータセンターが異なる場合に非常に役立ちます。また、やむを得ない状況が原因で、トラフィックをある地域から別の地域に再ルーティングする必要があります。
異なるリージョン間でセッション共有を簡単に設定できます。 XNUMXつのリージョンからのセッションは、WANを介して他のリージョンにシームレスに複製されます。 セッションデータは、プライマリキャッシュからXNUMXつ以上のセカンダリキャッシュに複製されます。 マルチリージョンセッション共有を使用するには、 NCache セッションストレージプロバイダーと次の変更のみが必要になります スタートアップ.cs ファイル:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
注:マルチリージョンセッション共有を使用するには、ロケーションアフィニティを有効にする必要があることに注意してください。
キャッシュ名はで指定されています configuration.CacheName
フィールドがプライマリキャッシュになりますが、で指定されている残りのすべてのキャッシュは configuration.AffinityMapping
セカンダリキャッシュになります。 The CachePrefix
このプレフィックスはセッションIDに付加されるため、重要です。 このプレフィックスは、セッションデータが保存される場所を識別します。 したがって、リクエストがキャッシュに到着し、キャッシュプレフィックスが現在のキャッシュのプレフィックスと異なる場合、セッションデータについて実際のキャッシュに接続されます(データがまだ存在しない場合)。 現在のキャッシュにセッションデータが含まれるようになったため、後続のすべてのリクエストはこのキャッシュからローカルに処理されます。
NCache 詳細 ASP .NET Core セッションストレージ戦略 マルチリージョンセッション共有
まとめ
このブログでは、セッションストレージがASPの強力な機能である理由を説明しました.NET Core そして、それがどのようにアプリケーションのパフォーマンスを劇的に改善できるか。 また、どのように調べました NCache 分散キャッシングの助けを借りてセッションストレージを大幅に改善でき、さらに優れた信頼性が必要な場合は、いつでも選択できます NCache一流のユーザーエクスペリエンスのためののマルチリージョンセッション共有機能。