クライアントキャッシュ
NCache クライアントキャッシュは、アプリケーションノード上のローカル同期L1キャッシュであり、ネットワーク遅延を回避するために最もアクセスされるデータを保持します。したがって、アプリケーションとクラスタ化されたL2キャッシュの間のパフォーマンス最適化レイヤーとして機能します。InProcおよびOutProc分離モードの両方をサポートします。 NCache 2つの異なる構成で動作します。 レギュラー (NAIST) と フルデータ クライアント キャッシュ。
通常のクライアントキャッシュ
レギュラークライアントキャッシュは、クライアントマシン上のローカルキャッシュ(L1キャッシュ)として機能します。頻繁にアクセスされるデータのサブセットをクラスターキャッシュから読み込み、アプリケーションの近くに保存します。これにより、類似データを取得するためにサーバーへのネットワーク接続が頻繁に発生することが少なくなります。データの整合性を確保するため、クライアントキャッシュはクラスターキャッシュ(L2キャッシュ)からの変更通知をポーリングすることで、L2キャッシュと同期します。ただし、L1キャッシュは通常クライアントキャッシュ内のデータの完全性を保証するものではないため、クエリは常にクラスターキャッシュ(L2キャッシュ)に対して実行されます。
次のようなキーベースの書き込み操作はすべて、 追加, インサート, 削除しますは、まずクラスタ化されたキャッシュに対して実行されます。正常に完了すると、データは通常のクライアントキャッシュ内のクライアントキャッシュに追加されます。読み取り操作の場合、クライアントキャッシュにデータが見つからない場合は、クラスタ化されたキャッシュからデータが取得され、その後クライアントキャッシュに格納されます。
フルデータクライアントキャッシュ
フルデータ・クライアント・キャッシュは、キャッシュ開始時にクラスターキャッシュ(L1キャッシュ)から完全なデータセットを読み込むことで、キャッシュされたデータへの迅速なアクセスを提供します。メモリ使用量を最適化するために、ユーザーは参照データの種類を設定できます。ただし、フルデータ・クライアント・キャッシュの設定には、クライアントマシンで通常よりも多くのメモリが必要になります。デフォルトでは、設定されたデータの種類から要求されたキーがフルデータ・クライアント・キャッシュ(L1)に見つからない場合、読み取り操作は自動的にクラスターキャッシュ(L2)にフォールバックされます。 クエリ未構成の参照データ型の場合、クエリはクラスター化キャッシュで実行されます。ただし、構成済みの参照データ型の場合、クエリはまずクライアントキャッシュで実行され、データが部分的にロードされた場合にのみクラスター化キャッシュにフォールバックされます。
重要
作成できません フルデータクライアントキャッシュ 少なくとも 1 つの参照データ型を構成しない場合。
ただし、構成された参照データ型の場合、クラスタ化されたキャッシュへのフォールバックなしでローカルデータに厳密に依存する必要があるユースケースでは、 厳密なローカル読み取り (NAIST) と 厳格なクエリ強制 提供される設定オプションを通じて NCache 管理センターこれらの機能については以下で詳しく説明します。
お願い
フルデータクライアントキャッシュは 設定された 同時に クラスタ化されたキャッシュが実行中.
重要
設定を変更した場合、 フルデータクライアントキャッシュは、以下を行う必要があり 再起動 クライアント キャッシュ。
参照データ型として設定されたアイテムのみが、キーベースの書き込み操作(追加、挿入、削除など)の対象となります。これらの操作は、まずクラスター化されたキャッシュ上で実行されます。その他のクライアントキャッシュインスタンスは、後述のバックグラウンドデータ同期メカニズムによって更新されます。
厳密なローカル読み取り
デフォルトでは、すべての読み取り操作はクライアントキャッシュ(L1)に送られます。要求されたデータが見つからない場合、要求はクラスターキャッシュ(L2)に送られます。ただし、クライアントキャッシュにデータがなく、読み取り操作をクラスターキャッシュにフォールバックさせたくない場合は、 厳密なローカル読み取り この機能を使用すると、フルデータクライアントキャッシュ(L1)に見つからないキーはキャッシュミスとなり、クラスタキャッシュ(L2)からのデータ取得は試行されません。この動作により、すべての読み取り操作がローカルキャッシュからのみ実行されるようになります。この機能を有効にするには、「クライアント キャッシュに見つからないキーについては、クラスタ化されたキャッシュにフォールバックせずにキャッシュ ミスを返します。「チェックボックス」を NCache 管理センターしたがって、読み取り操作はクライアント キャッシュにのみ依存し、厳密なローカル読み取りが可能になります。
厳格なクエリ強制
クエリの場合、まずクライアントキャッシュで実行され、データがクライアントキャッシュに部分的にロードされている場合にのみ、クラスターキャッシュにフォールバックされます。ただし、クエリをクラスターキャッシュで実行したくない場合は、 厳格なクエリ強制 機能です。この設定を有効にすると、クライアントキャッシュにデータセット全体が存在する場合にのみクエリが実行されます。データが部分的にしかロードされていない場合、クエリは直ちに失敗し、例外「タイプ '{queryFQN}' が部分的にロードされているため、クライアント キャッシュでクエリを実行できませんチェックボックスをオンにすることでこれを有効にすることができます。クライアント キャッシュ内の部分的にロードされたデータセットをクエリするときに例外をスローし、クラスター化されたキャッシュにフォールバックしません。「を通じて NCache 管理センター.
重要
厳密なローカル読み取り (NAIST) と 厳格なクエリ強制 参照データ型にのみ適用されます。 設定された フルデータ クライアント キャッシュ内。
さらに、キャッシュの読み込み中や再同期中など、同期状態にあるフルデータクライアントキャッシュに対してユーザーがクエリを実行しようとすると、操作は失敗します。この場合、 NCache 次の例外がスローされます: "クライアントキャッシュでクエリを実行できません。クライアントキャッシュはまだ同期状態です。."
クライアントキャッシュ: プラグアンドプレイ
クライアントキャッシュの使い方は非常に簡単です。アプリケーション側でコードを変更する必要はありません。設定も簡単です。クライアントキャッシュは、 NCache 管理センター または NCache 。 PowerShellコマンドレットクライアントキャッシュの設定が完了すると、クライアントアプリケーションは自動的にキャッシュの使用を開始します。既に実行中のアプリケーションの場合は、アプリケーションの再起動が必要です。
他のクライアントキャッシュインスタンスはバックグラウンドで更新されます データ同期 メカニズムについては後ほど説明します。
お願い
フルデータ クライアント キャッシュでは、構成された参照データ タイプに対応するデータのみがクライアント キャッシュに追加され、アプリケーションで使用できるようになります。
通常のクライアントキャッシュは、クラスタ化されたキャッシュデータのサブセットのみを保持します。そのため、キーベース以外の操作(例えば、 SQLクエリ (NAIST) と GetByTagsはクラスタ化されたキャッシュ上で直接実行されます。ただし、フルデータクライアントキャッシュでは、クライアントキャッシュには構成済みの参照データ型がすべて含まれているため、ユーザーは を実行できます。 クエリー クライアント キャッシュに直接保存します。

クライアント キャッシュ: 分離モード
クライアントキャッシュは、アプリケーションが実行されるクライアントノード上で実行されます。パフォーマンス要件とアプリケーションアーキテクチャに応じて、クライアントキャッシュでサポートされている以下のプロセスレベルの分離モードのいずれかを選択できます。
InProc 分離モード (インプロセス)
名前が示すように、クライアントキャッシュはアプリケーションプロセス内で実行されるため、プロセス間通信は不要です。ユーザーデータはオブジェクト形式で保持されるため、デシリアライズコストを回避できます。このモードは、アプリケーションのパフォーマンスを最大限に高めます。クライアントキャッシュはアプリケーションプロセス内でホストされるため、クライアントキャッシュ内のデータは他のアプリケーションインスタンス間で共有されません。アプリケーションの各インスタンスは、専用のクライアントキャッシュインスタンスをホストします。InProcモードはプロセスを最大限に利用しますが、以下の場合にのみ適しています。
アプリケーションのホット データセットはそれほど大きくありません。
アプリケーションは、十分な物理メモリを持つ各クライアントノード上に少数のインスタンスのみを持ちます。各クライアントキャッシュインスタンスはデータのコピーを保持することに注意してください。
アプリケーションのライフサイクルは、クライアントキャッシュのメリットを十分に享受できるほど長くなっています。クライアントキャッシュのライフサイクルはアプリケーションのライフサイクルに依存することに注意してください。アプリケーションがダウンすると、クライアントキャッシュ内のすべてのデータも失われます。ライフサイクルが短いアプリケーションは、クライアントキャッシュが完全に読み込まれる前にシャットダウンまたは再起動する可能性があります。
各アプリケーションには、他のアプリケーションとは異なる独自のホット データセットがあります。
OutProc 分離モード (アウトオブプロセス)
このモードでは、クライアントキャッシュのプロセスレベルの分離が実現されます。クライアントキャッシュは、クライアントノード上の専用プロセスで実行されます。アプリケーションはTCPソケットを介してクライアントキャッシュと通信します。複数のアプリケーションインスタンスが同じクライアントキャッシュと通信できるため、データを共有できます。InProcモードはOutProcモードよりもパフォーマンスが優れていますが、OutProcモードにも独自の利点があります。
同じクライアントマシン上で実行される複数のアプリケーションは、同じクライアントキャッシュと通信します。複数のアプリケーションがデータを共有します。あるアプリケーションによってロードまたは更新されたデータは、他のアプリケーションでも利用できるようになります。
アプリケーションを再起動してもクライアント キャッシュのデータは失われません。
各アプリケーション プロセスがクライアント キャッシュのコピーを保持する場合、InProc モードと比較して、OutProc モードでクライアント キャッシュを実行するために必要な RAM や CPU などの物理リソースが少なくなります。
同期 クライアント キャッシュ データ (次の段落で説明) をクラスター化されたキャッシュで実行すると、クライアント マシンごとに 1 つのクライアント キャッシュ インスタンスが実行されるため、クラスター化されたキャッシュへの負荷が軽減されます。
お願い
OutProcクライアントキャッシュがダウンしている場合、アプリケーションはクラスタ化されたキャッシュに対して直接操作を実行します。クライアントキャッシュが再起動すると、自動的にクライアントキャッシュに接続します。この動作は、 skip-if-unavailable フラグを立てる client.ncconf。 フラグがに設定されている場合 falseクライアント キャッシュがダウンしている場合、キャッシュ操作は失敗します。
クラスタ化されたキャッシュとのデータ同期
クライアント キャッシュはクラスター化キャッシュ データのコピーを保持しているため、クラスター化キャッシュ内のデータに加えられた変更はクライアント キャッシュに反映される必要があります。特定のクラスター化キャッシュには、InProc モードまたは OutProc モードで実行される複数のクライアント キャッシュが存在する場合があります。クライアント アプリケーションによるデータの変更は、アプリケーションが接続されているクライアント キャッシュ インスタンスで実行されます。そのため、このクライアント キャッシュ インスタンスは自動的に同期されます。ただし、クライアント キャッシュの他のインスタンスはこれらの変更を認識しません。クラスター化キャッシュ データに加えられた変更は、通常データ クライアント キャッシュとフルデータ クライアント キャッシュの両方について、以下で説明するバックグラウンド データ同期メカニズムを通じて、これらのクライアント キャッシュ インスタンスと同期されます。
クライアントキャッシュが開始されると、 フルデータクライアントキャッシュ 初期検査を実行する ローディング クラスタキャッシュと同期するためのプロセスです。設定された参照データ型に関連付けられたすべてのデータを読み込み、キャッシュが完全に設定され同期されていることを確認します。 通常のクライアントキャッシュ初期読み込みは行われません。クライアントがクライアントキャッシュに存在しないデータを要求した場合にのみ、クラスタ化されたキャッシュからデータが取得されます。
データがクライアント キャッシュに追加されると、指定されたデータのクラスター化されたキャッシュにデータ変更通知が登録されます。
クラスタ化されたキャッシュは、各
CacheItemクライアント キャッシュはデータに加えられた変更を保持し、監視します。データが 更新しました/削除 クラスター化されたキャッシュから、クラスター化されたキャッシュはこれらの変更を記録します。
専用のバックグラウンドワーカースレッドが毎秒データの変更を検査し、影響を受けたキーを含むクライアントキャッシュを特定します。その後、該当するすべてのクライアントキャッシュにデータが変更されたことを通知します。
クライアントキャッシュ内で実行される別の専用のバックグラウンドワーカースレッドは、データ変更通知を受信すると、クラスタ化キャッシュとデータ変更を同期する役割を担います。通知を受信するとすぐに、クラスタ化キャッシュにデータ更新を要求します。このメカニズムを同期メカニズムと呼びます。 クライアントキャッシュポーリング.
このワーカースレッドは、10秒ごとにデータの変更をポーリングします。クラスター化されたキャッシュから通知を受け取っていない場合は、このスレッドはポーリングされません。
指定された参照データタイプのいずれかでエビクションがトリガーされると(キャッシュがいっぱいのとき)、 フルデータクライアントキャッシュの場合、クライアントキャッシュはクラスターキャッシュとの同期を維持できません。クラスターキャッシュとの同期を維持するために、クライアントキャッシュは、データ再読み込みしきい値(システムが削除されたデータの再読み込みを試みる、キャッシュサイズ全体に対する割合)に達した後、クラスターキャッシュから特定のデータ型のデータを取得します。
もし フルデータクライアントキャッシュ 再起動時には、クラスタ化されたキャッシュと自動的に同期して一貫性を維持します。この同期では、設定された参照データ型に基づいてクラスタ化されたキャッシュからデータを再読み込みします。ただし、通常のクライアントキャッシュでは、クラスタ化されたキャッシュとの自動同期は行われません。
In 通常のクライアントキャッシュ同期はキーベースで行われます。クライアントキャッシュに存在するキーに一致するデータのみがクラスターキャッシュと同期されます。
In フルデータクライアントキャッシュ同期は、構成された参照データ型に対するデータに基づいて行われます。
お願い
参照データ型は、参照データ型の優先度に従って削除され、再同期/再ロードされます。
- フルデータ クライアント キャッシュでは、クラスター化されたキャッシュが再起動すると、クライアント キャッシュは自動的にクリアされ、データの整合性が維持されます。
この強力な同期メカニズムにより、クライアント アプリケーションには常にクライアント キャッシュからの最新データが提供されるようになり、パフォーマンスとスケーラビリティが向上します。
クライアントキャッシュ同期モード
クライアントキャッシュは、バックグラウンドデータ同期メカニズムに加えて、 楽観的な同期 同期モード。
アプリケーションがクライアントキャッシュからデータを取得し、クライアントキャッシュにそのデータが存在する場合、データはそのままアプリケーションに返されます。同期処理は、前述のとおりバックグラウンドで実行されます。