使用する方法を学びます NCache NHibernate の XNUMX 次キャッシュとして。 NCache web.configまたはapp.configの変更を介してプラグインできるNHibernateの第XNUMXレベルのキャッシュプロバイダーを提供します。 NCache また、これにデータベース同期機能を実装しているため、データベースと同期するクラスを指定できます。 NCache このために、SqlDependencyまたはOLEDB準拠のデータベース化された依存関係を指定できます。
NCache は、アプリケーションのスケーラビリティとパフォーマンスを目的としたエンタープライズ分散キャッシュ ソリューションです。 今日のチュートリアルでは、レベル 2 キャッシュ プロバイダーを使用して NHibernate アプリケーションをスケールアウトする方法を見ていきます。 NCache.
NHibernate はアプリケーションにとって優れた ORM ツールであり、さまざまなチーム間でのコーディング標準を簡素化します。
Hibernate では、デフォルトでインプロセス キャッシュが提供され、トランザクションごとにワーカー プロセス内にデータを一時的に保持できます。 これは単一サーバー アプリケーションでは問題なく機能しますが、エンタープライズ アプリケーションではパフォーマンスのボトルネックになります。
エンタープライズ アプリケーションでは、通常、負荷分散シナリオで複数の Web サーバーがあり、それぞれのサーバー上で複数のワーカー プロセッサが実行されます。 そのため、各ワーカー プロセスからの同じデータに対して複数の冗長なクエリがデータベースに配置されることになり、最終的にアプリケーションの速度が低下し、また各ワーカー プロセス側の独自のメモリに個別に冗長なストレージが作成されることになります。ユーザーベースを拡大する必要があるときにスケールアウトできません。
したがって、これらの制限を克服するには Hibernate はレベル 2 キャッシュ プロバイダーを提供します、ここで第 XNUMX レベル キャッシュを接続できます。
第 XNUMX レベル キャッシュは、インプロセス キャッシュと組み合わせて使用されます。 初めてデータベースからデータを取得するたびに、Hibernate はそのデータをすべてのワーカー プロセスで共有される XNUMX 次キャッシュに自動的にプッシュします。
アプリケーションのパフォーマンスを向上させるには、XNUMX 番目のレベル キャッシュをメモリ内キャッシュにするのが理想的です。 ワーカー プロセスがリサイクルされてもフラッシュされないアウトプロセス キャッシュである必要があります。 これは分散する必要があるため、異なる Web サーバー上の複数のワーカー プロセス間で共有できます。
増やすことしかできないことを忘れないでください。 アプリケーションのスケーラビリティとパフォーマンス基礎となるキャッシュ インフラストラクチャが拡張性が高く、パフォーマンス指向である場合。
したがって、ここではそのようなレベル 2 キャッシュ プロバイダーを提供します。 NCache.
これはアウトオブプロセスのインメモリ分散キャッシュ ソリューションであり、 動的クラスタリング 機能があり、複数のサーバーにまたがります。 アプリケーションからのトランザクション負荷は、実行時にすべてのキャッシュ サーバーに均等に分散されるため、パフォーマンスが向上し、 NCache キャッシュ サーバーのいずれかを失った場合に、一貫したフェイルオーバーを提供するために、クラスター全体にデータを複製したままにします。
NCache は、同期レプリケーション モードと非同期レプリケーション モードの両方をサポートします。 したがって、パフォーマンスのオーバーヘッドを発生させることなく、データの複製を維持できます。 のパフォーマンス NCache キャッシュ層にサーバーを追加すると、直線的に増加します。 キャッシュ サイズに制限がないため、データ サイズを好きなだけ増やすことができます。
また、実行時により多くのサーバーをキャッシュ クラスターに動的に組み込んで、トランザクション機能を強化し、メモリを増やすこともできます。
また、キャッシュのパフォーマンス、キャッシュ上のクライアント アプリケーションのアクティビティ、キャッシュによって消費されるさまざまなシステム リソースを一目で確認できるダッシュボード スタイルのモニタリングも提供します。
右側の図は、 パーティション-レプリカトポロジ、データがパーティション化され、複数のサーバーにレプリケートされます。 パーティション レプリカは、パーティション レプリカで最も人気のあるトポロジです。 NCache.
これが高レベルのアーキテクチャ図です。
このレベル 2 プロバイダーをプラグインすると、 NCache エンタープライズ アプリケーションでは、アプリケーションのコードを変更する必要はありません。 設定をいくつか変更するだけで済みます。 web.config or app.config、それについて話します。 したがって、前のトランザクションですでにデータをフェッチしていれば、データベースへの冗長な呼び出しは発生しません。
このような負荷分散 Web ファームでは、データベースから初めてデータを取得すると、データは NHibernate によって自動的に XNUMX 番目のレベル キャッシュにプッシュされ、このキャッシュはすべての Web サーバーで共有されます。 したがって、データベースの負荷を軽減するのに役立ちます。
したがって、構成を変更すると、XNUMX 次レベル キャッシュ プロバイダーの多くの機能を構成できるようになります。
たとえば、NHibernate リージョンを使用したり、キャッシュ オブジェクトが絶対有効期限またはアイドル時間有効期限で期限切れになるように設定したり、SQL 依存関係を構成したりできます。 データベースの同期。 同期キャッシュ操作と非同期キャッシュ操作の両方がサポートされており、キャッシュ項目の優先順位を構成することもできます。
そこで、構成するための簡単なステップバイステップの実践セッションを説明します。 NCache サンプル アプリケーションのレベル 2 キャッシュ プロバイダー。
私はあなたに提案します 無料の 30 日間エンタープライズ版をダウンロード 当社のウェブサイトから。 これは、評価段階であっても完全に機能し、機能が豊富な製品です。
あなたがインストールすると NCache、システム上では次のようになります。
大量の Visual Studio サンプルがインストールされます。 たとえば、NHibernate サンプルを Visual Studio で開いてみましょう。 Video Studio 2010 を使用している場合は、サンプルの再構築が必要になる場合があります。変換も必要になる場合があります。
次の第 XNUMX レベル キャッシュ プロバイダーの app.config に対して行う必要がある構成変更を見てみましょう。 NCache.
' という名前のセクションを定義するだけで済みます。ncache' app.config でキャッシュ プロバイダーのプロパティを追加すると、次のようにキャッシュ プロバイダーのプロパティを追加できます。
また、 NCache セクション自体を複数の領域で構成します。 これらの領域は NHibernate 領域です。 各領域は、次の異なるキャッシュ名にマップされます。 NCache.
したがって、ここには、NHibernate リージョンを指定していないすべてのエンティティに対応するデフォルトのリージョンがあり、この「Customer」リージョンのような特定の名前のリージョンがあります。 各リージョン内で、そのリージョンに属するクラスごとに複数のプロパティを指定できます。
たとえば、SQL 依存関係を設定し、キャッシュ項目の優先順位を設定し、同期または非同期を使用し、有効期限戦略を相対時間またはアイドル時間に設定します。
したがって、サンプルを実行するには、いくつかのキャッシュが必要です。 デフォルトのキャッシュと「myPartitionReplicaCache」が実行されています。 NCache マネージャー.
に行きましょう NCache マネージャー、現在、「myPartionedReplicaCache」とデフォルトのキャッシュを 2 つのサーバー設定で設定しています。 アプリケーションを実行して顧客リストを表示してみましょう。たとえば、データベースからデータを取得したら、両方のサーバーにデータをプッシュするリクエスト/秒を観察してみましょう。
したがって、これらのサーバーの両方に約 49 プラス 42 の項目があり、両方に均等に分散されており、クエリを再度実行すると、データベースにアクセスする代わりに、第 XNUMX レベル キャッシュ クラスターからこれらの結果を直接取得できるようになります。 したがって、両方のサーバーから均等に応答されたリクエスト/秒を観察してください。
信頼性試験も承ります。 キャッシュ サーバーの XNUMX つを停止しても、キャッシュ クラスターがアイテムを提供し、残りのサーバーからアイテムを回復できることがわかります。
そのためにはサーバーの 2 つを停止する必要があるので、それを実行するつもりです。 サーバー 21 と 22 の 22 台があります。クラスターから外れたかのように XNUMX を停止し、クエリを再実行します。
49 プラス 42 が表示され、91 個のアイテムはいずれかのサーバーでまだ利用可能です。 これらはもう一方のサーバーから復元されているので、クエリを再実行して顧客リストをもう一度表示すると、このサーバーまたはクラスターからすべてのアイテムを取得できるはずです。 このサーバーからのリクエスト/秒、フェッチ/秒を確認できます。
したがって、実行時にキャッシュ サーバーの XNUMX つが利用できない場合でも、信頼性の高いキャッシュが確立されます。 他のキャッシュ サーバーはデータを回復し、クエリに適切に応答できます。 同時に、データベースの負荷も軽減されます。 データベースに冗長なクエリが送信されることはなくなります。
NHibernate の統合コードは次のとおりです。 NCache、私が開いたプロジェクトでわかるように、このソース コードは、特定の NHibernate バージョンに合わせて最適化またはカスタマイズするために利用できます。
あなたが NCache インストールフォルダー、ここにコードがあります。 それでは、今日はお時間をいただきまして誠にありがとうございます。今日は、その様子をご覧いただきました。 NCache 役に立つかもしれません。 信頼性と拡張性の高さ NCache つまり、NHibernate アプリケーションのパフォーマンスを向上させるためです。 今後の最新情報をお楽しみに NCache。 今後のチュートリアルでさまざまな機能について説明します。 ご質問がございましたら、こちらまでメールでお問い合わせください support@alachisoft.com