ASP.NET Core は、そのクリーンで軽量なアーキテクチャとクロスプラットフォームのサポートにより、Web アプリケーションの開発で人気が高まっています。 そのようなASP.NET Core アプリケーションは高トラフィックであり、負荷分散されたマルチサーバー展開で実行されます。 実際、10 ~ 20 のサーバー Web ファームと、これよりもさらに大きな Web ファームがいくつか見られるのが一般的です。
マルチサーバーの負荷分散配置により、トランザクションの負荷が増加するにつれてサーバーを追加できるため、アプリケーション層が非常にスケーラブルになります。 これにより、ASP.NET Core 重いトランザクション負荷を簡単に処理するためのアプリケーション。 まだパフォーマンスのボトルネックが存在し、ASP の速度を低下させます。.NET Core アプリケーション。
そしてこのASP.NET Core パフォーマンスのボトルネックは、データベースとデータストレージにあり、ASPのように重い負荷を処理できません。.NET Core アプリケーション層はできます。 アプリケーション層の Web ファームにサーバーを追加することはできますが、データベース層で同じことを行うことはできません。 以下は、ASP のパフォーマンスのボトルネックとなる XNUMX 種類のデータ ストレージです。.NET Core 分野の様々なアプリケーションで使用されています。
- データベースサーバー(SQL Server)
- ASP.NET Core セッションズ
NCache 詳細 NCache ドキュメント NCache クライアントAPI
解決策:分散キャッシュ
これらのデータストレージを削除するには パフォーマンスのボトルネック、最善の策は、次のような分散キャッシュを使用することです。 NCache. NCache データベースよりもはるかに高速な .NET のオープン ソース インメモリ分散キャッシュです。 データベースとは異なり、 NCache is 線形にスケーラブル これは、キャッシュサーバーのクラスターを構築し、トランザクションの負荷が増加したときにサーバーをクラスターに追加できるためです。
NCache アプリケーション データをキャッシュできるため、コストのかかるデータベースへのアクセスをほぼ 80% 削減できます。 これにより、データベースの負荷が軽減され、読み取りと書き込みの両方をより高速に実行できるようになり、パフォーマンスのボトルネックにならなくなります。
NCache また、あなたのためのスケーラブルな分散ストアです ASP.NET Core セッション。 さらに、 NCache ASPを複製します.NET Core キャッシュサーバーがダウンした場合のデータ損失を防ぐための複数のサーバーへのセッション。 ASPの場合.NET Core セッション、これは非常に重要です。実行時にセッションを失うわけにはいかないからです。 以下は、分散キャッシュがどのように NCache アプリケーションの展開に適合します。
NCache 詳細 NCache ドキュメント NCache クライアントAPI
ASPを介したアプリデータのキャッシュ.NET Core I分散キャッシュ
ASP以前.NET Core、古いASP.NETはスタンドアロンを提供していました ASP.NETキャッシュ マルチサーバー環境のニーズを満たしていませんでした。 さて、ASP.NET Core 導入した I分散キャッシュ かなり基本的な分散キャッシング標準 API としてのインターフェイスを使用して、それに対してプログラミングし、サードパーティの分散キャッシュをシームレスにプラグインできます。
使用方法の例を次に示します IDistributedCache
インタフェース:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
IDistributedCache _cache; ... private byte[] LoadCustomer(string custId) { string key = "Customers:CustomerID:" + custId; // is the customer in the cache? byte[] customer = _cache.Get(key); if (customer == null) { // the cache doesn't have it. so load from DB customer = LoadFromDB(key); // And, cache it for next time _cache.Set(key, customer); } return customer; } |
NCache のプロバイダーも実装しています IDistributedCache
ASPにプラグインできること.NET Core アプリケーション。 このように、に固有のコードを変更する必要はありません NCache.
ここでは何です IDistributedCache
インターフェイスは次のようになります(これらの各メソッドにも非同期オーバーロードがあることに注意してください)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
namespace Microsoft.Extensions.Caching.Distributed { public interface IDistributedCache { // Each of these methods also has an “Async” overload byte[] Get(string key); void Refresh(string key); void Remove(string key); // Specify absolute & sliding expiration through options void Set(string key, byte[] value, DistributedCacheEntryOptions options); } } |
設定 NCache IDistributedCacheプロバイダーとして
設定方法は次のとおりです NCache あなたのように IDistributedCache
ASPのプロバイダー.NET Core Startup
とに提供されます。
1 2 3 4 5 6 7 8 9 10 11 |
public class Startup { ... public void ConfigureServices (IServiceCollection services) { ... services.AddNCacheDistributedCache(); ... } ... } |
NCache 詳細 ASP.NET Core キャッシング ASP.NET Core セッションプロバイダー
Entrupyを選ぶ理由 NCache IDistributedCacheを介したAPI?
キャッシングのニーズがかなり基本的で、分散キャッシング ベンダーをシームレスに変更できる柔軟性が必要な場合は、先に進んで、 I分散キャッシュ インターフェース。 これにより、キャッシング ベンダーをシームレスに変更できます。 ただし、多くの高度なキャッシュ機能がないことによるコストと比較検討してください。
もう一つの選択肢は、 NCache ASP から直接 API.NET Core アプリケーション。 NCache API は、従来の ASP.NET キャッシュ API と非常によく似ています。 これには、エンタープライズ グレードの分散キャッシュを最大限に活用できる無料の機能が多数含まれています。
キャッシュできるデータが多いほど、アプリケーションのパフォーマンスとスケーラビリティが向上することに注意してください。 また、高度なキャッシュ機能がないと、読み取り専用または単純なデータのキャッシュに制限されることがよくあります。 すべての違いについてもっと読む NCache キャッシュ機能 を使用して逃したこと IDistributedCache
プロバイダ。
ASPの保存.NET Core 分散キャッシュのセッション
ASP以前.NET Core、古いASP.NETは、サードパーティのセッションストレージプロバイダーがプラグインできるようにするASP.NETセッション状態プロバイダーフレームワークを提供していました。 ASP.NET Core セッションは、サードパーティのストレージプロバイダーを接続するための同様のメカニズムを提供します。 以下はXNUMXつの使用方法です NCache ASPとして.NET Core セッションストレージ:
NCache ASP用.NET Core IDistributedCacheを介したセッション
設定するとすぐに NCache as IDistributedCache
ASPのプロバイダー.NET Core, NCache 自動的にASPのデフォルトのストレージオプションになります.NET Core セッションとあなたは他に何もする必要はありません。 ただし、この実装は、以前の(ASPより前の)ものと比較して機能が制限されていることに注意してください。.NET Core)ASP.NETセッション状態。
デフォルトのASPのいくつかを次に示します.NET Core セッションの実装には次のものがありません。
- セッションのロック: ASP.NET Core セッションのロックは提供しません。 これは、以前の ASP.NET セッション状態でさえ提供されていたものです。
byte[]
カスタムオブジェクトの配列: ASP.NET Core をセッションに保存する前に、すべてのカスタムオブジェクトをバイト配列に変換するように強制します。 古いASP.NETセッション状態でもカスタムオブジェクトをサポートしています。
NCache ASPとして.NET Core セッションプロバイダー
デフォルトのASPを回避するには.NET Core を介したセッションの実装 IDistributedCache
プロバイダー、 NCache 独自のASPを実装しました.NET Core セッションプロバイダー。 この実装には、デフォルトの実装よりもはるかに多くの機能があります。
これがあなたの中でそれを設定する方法です Startup
とに提供されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Startup { ... public void Configure(IApplicationBuilder app, IHostingEnvironment env) { ... app.UseNCacheSession(); ... } ... } |
ASPを指定できます.NET Core 上記のセッション構成 appsettings.json
次のようにファイルします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ ... "NCacheSessions": { ... "CacheName": "demoCache", "EnableLogs": "True", "RequestTimeout": "90", "EnableDetailLogs": "False", "ExceptionsEnabled": "True", "WriteExceptionsToEventLog": "False" } ... } |
NCache 詳細 NCache ドキュメント 構成 NCache IDistributedCacheプロバイダー
まとめ
Microsoftは次のXNUMXつのオプションを提供しています IDistributedCache
プロバイダー。 XNUMXつはSQLServerで、もうXNUMXつは Redis. NCache 両方のオプションよりも優れています。 SQL Serverと比較して、 NCache はるかに高速でスケーラブルです。 また、 NCache よりも優れています Redis 次の理由から:
- ネイティブ.NET: NCache は100%ネイティブの.NETであるため、.NETアプリケーションスタックに非常にうまく適合します。 一方で、 Redis Linuxのバックグラウンドから来ており、ネイティブの.NETキャッシュではありません。
- より速い Redis: NCache より実際に高速であります Redis as NCache クライアントキャッシュ機能は NCache パフォーマンスが大幅に向上します。
- その他の機能: NCache 非常に重要な分散キャッシュ機能を多数提供します。 Redis ではない。 詳細はこちらをご覧ください Redis vs NCache.