に飛び込む前に クライアントキャッシュ、少しズームアウトして、キャッシングの基本を理解しましょう。 コンピューティングにおいて、キャッシュは、高価なデータ移動を回避し、単一のサーバー ノードで実行されるより単純なアプリケーションのパフォーマンスを最適化するための補助ストアとして使用される高速メモリです。 しかし、負荷分散された分散システムでは、XNUMX つの要求が複数のアプリケーション ノードによって処理されます。 これは、キャッシュがパフォーマンスの低下を引き起こす場所です。
この緊急事態に対処するために、XNUMX 秒あたりの極端なトランザクション負荷に対応し、高可用性と 線形スケーラビリティ.
開発者は、市場で入手可能な多くの一般的な分散キャッシュ オプションから選択できます。 NCache. NCache は、アプリケーション データをキャッシュしてコストのかかるデータベース トリップを削減し、応答時間を改善する、非常に高速で直線的にスケーラブルなインメモリ分散キャッシュです。 しかし、これらすべてにもかかわらず、キャッシュの上にキャッシュを追加することで可能になるパフォーマンス向上の余地がまだあります –クライアントキャッシュ。
NCache 詳細 .NETでの分散キャッシング 高可用性 NCache
クライアント キャッシュはどのように機能しますか NCache?
ほとんどの場合、分散キャッシュはネットワーク全体の一連の専用キャッシュ サーバーでホストされているため、アプリケーションはデータを取得するためにネットワークに移動する必要があります。 また、これは、ローカルおよびアプリケーション プロセス内からデータにアクセスするほど高速ではありません。
この問題に対処するには、 NCache 提供する クライアントキャッシュ. クライアント キャッシュは、アプリケーション プロセスの近くに存在する一時ストレージとして機能するため、データの取得がより簡単かつ高速になります。 Client Cache を使用すると、同じクライアント マシンで実行されている複数のアプリケーションが通信し、データを共有できるため、アプリケーションのパフォーマンスがより高いレベルに引き上げられます。 OutProc モード. クライアント キャッシュは、アプリケーションのプロセス内であっても、ホット データ セットをアプリケーションに近づけます。 InProcモード これにより、パフォーマンスが大幅に向上します。
In NCache、クライアント キャッシュの使用は非常に簡単です。 アプリケーション側でコードを変更する必要はありません。 これは単純な構成オプションです。 次の方法でクライアント キャッシュを作成できます。 NCache Webマネージャ または NCache-サポートされている PowerShell コマンドレット. クライアントが構成されると、クライアント アプリケーションは自動的にそれを使用し始めます。
E コマース アプリケーションの例を使用して、クライアント キャッシュ (第 1 レベルまたは L2 キャッシュとも呼ばれます) の動作を理解しましょう。 アプリケーションは、現在アクティブなユーザーの製品カタログとデータに頻繁にアクセスします。 このようなデータは、クライアント ボックス (アプリケーションが存在する場所) で実行されているクライアント キャッシュに保持できます。 そのため、クラスター化されたキャッシュ (第 1 レベルまたは LXNUMX キャッシュとも呼ばれます) を介したネットワーク トリップが回避され、データが LXNUMX キャッシュからはるかに高速に提供されます。
ここで、アプリケーションが常に L1 キャッシュから更新されたデータを提供されるように、XNUMX つのキャッシュ間でデータを同期する方法について考える必要があります。
L1 キャッシュと L2 キャッシュ間のデータ同期
アプリケーションが常に最新のデータを取得できるようにするために、XNUMX つのバックグラウンド スレッドがクライアント キャッシュで動作します。 クライアント キャッシュで実行されるこれら XNUMX つの強力な同期メカニズムにより、アプリケーションは常に最新のデータを取得し、パフォーマンスとスケーラビリティが向上します。 XNUMX つのバックグラウンド スレッドは次のとおりです。
通知ベースのスレッド
データが L1 キャッシュに追加されると、データ変更通知が即座に登録され、L2 キャッシュは L1 キャッシュが保持するキャッシュ項目を追跡し、データの更新/削除変更が発生したときに変更を監視します。 L2 キャッシュ内のデータが変更されると、L1 キャッシュは変更通知を受信し、それに応じて L1 キャッシュは L2 と同期します。
ポーリングベースのスレッド
これは、ネットワークの不具合や接続の切断によって L1 キャッシュと L2 キャッシュの間の通信が停止した場合にのみトリガーされるフォールバック メカニズムです。 この場合、L1 キャッシュは 10 秒間待機してから自身をポーリングし、L2 キャッシュ内のデータの変更を要求します。 変更通知を受信すると、L2 キャッシュと同期します。
クライアント キャッシュの利点を十分に活用するには、利用可能な XNUMX つのプロセス レベルの分離モードのいずれかで使用できます。
クライアント キャッシュの分離モード
クライアントキャッシュ アプリケーションが実行されているクライアント ノードで実行されます。 パフォーマンスのニーズとアプリケーション アーキテクチャに応じて、クライアント キャッシュでサポートされている次のプロセス レベルの分離モードのいずれかを選択できます。 NCache クライアント キャッシュには、InProc と OutProc の XNUMX つのモードがあります。
InProc モード:
In InProcモード、クライアント キャッシュはアプリケーション プロセス内で実行され、プロセス間の通信を排除します。 InProc モードでは、データがオブジェクト形式のままであるため、アプリケーションのパフォーマンスが最大になり、コストが削減されます。 シリアル化と逆シリアル化.
InProc モードでは、他のアプリケーション インスタンス間でデータが共有されないため、アプリケーションの各インスタンスが専用のクライアント キャッシュ インスタンスをホストし、パフォーマンスが向上します。
OutProc モード:
In OutProc モード、クライアント キャッシュは、クライアント ノードの専用プロセスで実行されます。 アプリケーションとクライアント キャッシュ間の通信は、TCP ソケットを介して行われます。 OutProc モードはデータ共有をサポートしているため、複数のアプリケーション インスタンスが同じクライアント キャッシュと通信できます。 データは複数のアプリケーション間で共有されるため、XNUMX つのアプリケーションによってロードまたは更新されたデータを他のアプリケーションが利用できるようになるため、これには大きな利点が XNUMX つあります。
InProc モードと OutProc モードのパフォーマンスに関する比較:
InProc および OutProc モードのパフォーマンスが測定される要因は複数あります。つまり、データの可用性、リソースの消費、および速度です。
データの可用性: OutProc モードでは、キャッシュの再起動によってデータが失われることはなく、データの安定性が確保されます。 一方、InProc モードでは、キャッシュを再起動するとデータが失われます。
リソース消費: InProc モードは、各クライアント キャッシュ インスタンスがデータのコピーを保持するため、メモリなどのリソースが制限されていない場合に最大のパフォーマンスを提供します。 OutProc モードは、InProc モードと比較して必要な物理リソースが少なくて済みます。
その2:シャフトスピード(回転数): Client Cache InProc モードは、ヒープ上のオブジェクトのようなものであり、デシリアライズされた方法で物事を保持し、コストを節約するため、超高速です。 シリアル化/逆シリアル化 OutProc またはキャッシュへのリモート アクセスに対して行う必要があります。
NCache 詳細 クライアントキャッシュ キャッシュ内のイベント通知
Client Cache の運用の流れ
クライアント キャッシュはアプリケーション層に近く、クライアント キャッシュはクラスター化されたキャッシュのサブセットです。 したがって、すべての操作は分散された方法で行われます。
すべてのキー ベースの読み取り操作は L1 キャッシュで直接実行されます。追加、挿入、削除などのキー ベースの書き込み操作は、最初に L2 キャッシュで実行され、次にアプリケーションに戻る前に L1 キャッシュに追加されます。
データはアプリケーションに戻る前に L1 キャッシュに返されるため、次に同じデータが要求されたときに L1 キャッシュから直接提供されます。
L2 キャッシュは L1 キャッシュのサブセットを保持するため、非キーベースの読み取りおよび書き込み操作は L2 キャッシュでのみ実行されます。
その他のクライアント キャッシュ インスタンスは、バックグラウンド データを通じて更新されます。 同期メカニズム.
クライアント キャッシュの同期モード:
クライアント キャッシュはアプリケーションに対してローカルですが、スタンドアロンではありません。 代わりに、クラスター化されたキャッシュと常に同期されます。 これにより、クライアント キャッシュ内のデータが古くなることはありません。
NCache クライアント キャッシュには、次の XNUMX つのモードがあります。 データの同期 クライアント キャッシュとクラスター化されたキャッシュの間。 クライアント キャッシュは、クラスター化されたキャッシュ データのコピーを保持します。 アプリケーション層はクライアント キャッシュと直接通信するため、クラスター化されたキャッシュで発生した変更はすべてクライアント キャッシュで同期する必要があります。 データ同期の XNUMX つのモードは楽観的と悲観的です。
楽観モード でのデータ同期のデフォルト モードです。 NCache. 同期はバックグラウンドで行われ、アプリケーションがデータを要求すると、データはクライアント キャッシュからアプリケーションに返されます。
より機密性が高く、新しいデータの使用が必要なアプリケーション 悲観モード データ同期用。 アプリケーションがデータを要求すると、L1 キャッシュは L2 キャッシュでバージョンを確認し、更新されたデータを提供します。
まとめ
NCache 分散キャッシュでクライアント キャッシュを利用できます。 クライアント キャッシュを使用する最大の利点は、ユーザー側でプログラミングを行わないことです。 これは単純な構成設定であり、クライアント キャッシュは自動的に接続されます。クライアント キャッシュは、書き込みよりも多くの読み取りを実行するアプリケーションのパフォーマンスを大幅に向上させます。 したがって、完全に機能する60日間の試用版をダウンロードしてください NCache Enterprise 自分で試してみてください。