ライトスルーおよびライトビハインドキャッシュの概要
NCache ライト スルー キャッシュをサポートしており、キャッシュを介してデータ ソースに直接書き込み操作を行うことができます。このようにして、キャッシュとデータ ソースを同期できます。ライトスルーキャッシュでは、 NCache まずキャッシュ ストアを更新してから、その操作をデータ ソースに適用します。 たとえば、クライアント アプリケーションがキャッシュ内のエントリを更新すると、 NCache データソースも更新します(ライトスルーが有効になっている場合)。
Note
この機能はでのみ利用可能です NCache Enterprise エディション.
アプリケーションでライトスルー キャッシュを使用するには、最初に IWriteThruProvider
インタフェース。 NCache このカスタムプロバイダーを内部的に使用して、データソースに対して書き込み操作を実行します。 NCache Write-Throughを使用して書き込み操作(追加、挿入、削除/削除)API呼び出しの背後でプロバイダーを呼び出します。
現在 NCache 以下に示すライトスルーキャッシュのXNUMXつのモードを提供します。
- ライトスルー(データソースを同期的に更新します)
- 後書き(データソースを非同期的に更新します)
Note
NCache パフォーマンスカウンターを提供します Write-thru/sec
ライトスルー操作用。
ライトスルー
ライトスルー キャッシュでは、操作は最初にキャッシュ ストアに適用され、次に構成されたデータ ソースに同期して更新されます。 ライトスルーを使用すると、操作は次の時間に完了します。 NCache その操作をデータソースに適用します。 データソースの即時更新が重要であり、キャッシュが更新されたらすぐにデータソースを更新する必要がある場合は、ライトスルーキャッシュを使用できます。
後書き
ライトスルーでは、データ ソースに対する同期操作により、操作の速度はキャッシュ上のユーザー操作の速度と同じになります。 ユーザー トラフィックが多いアプリケーションの場合、キャッシュに対するユーザー操作のレートが非常に高くなり、データ ソースを圧倒する可能性があります。 また、同期データ ソース操作は、ユーザー操作の応答時間に影響を与える可能性があります。
これらの問題を解決するには、ライトスルーの代わりにライトビハインドを使用できます。 ライトビハインドでは、データ ソース操作は後で非同期に実行されます。 NCache キャッシュ ストアに対して操作を実行します。 キャッシュ ストアを更新した後、これらの操作はキューに入れられ、後で構成されたデータ ソースに非同期的に適用されます。 したがって、Write-Behind を使用すると、キャッシュ操作の応答時間が向上します。
NCache データ ソースの操作フローを制御するための、ライトビハインドのさまざまな構成設定を提供します。 たとえば、次のレートを指定できます。 NCache スロットリングを通じてデータ ソースに後書き操作を適用します。
スロットル
データ ソースに適用される 500 秒あたりの操作の数を示します。 スロットルのデフォルト値は XNUMX ops/秒です。 この値は、バッキング ソース設定を通じて変更できます。 NCache マネージャー.
Note
NCache パフォーマンスカウンターを提供します Write-behind/sec
後書き操作用。
後書きモード
NCache ライトビハインド操作を個別にまたはバッチとして適用できます。 Write-Behind キューは、Write-Behind 操作のために維持されます。 すべての Write-Behind 操作はこのキューに入れられ、後で説明する構成されたバッチ モードまたは非バッチ モードに従ってデータ ソースに適用されます。
非バッチモード
デフォルトでは、非バッチモードが後書き操作用に構成されます。 このモードでは、ライトビハインドキューの操作は、設定されたスロットリングレートに従ってデータソースに500つずつ適用されます。 たとえば、スロットルレートがXNUMX秒あたりXNUMX回の操作である場合、 NCache ライトビハインド操作を一度に500つずつデータソースに適用し、XNUMX秒あたりXNUMX操作を超えないようにします。
バッチモード
バッチモードでは、操作のバッチ/バルクは、それらに応じて選択されます operation delay
。 設定できます operation delay
後書き操作の場合。これは、各操作がデータソースに適用される前に後書きキューで待機する必要がある時間をミリ秒単位で示します。 デフォルトでは、その値はゼロです。
バッチ間隔は、それに応じて構成可能な間隔です NCache 後書きキューでの操作遅延タイムアウト操作を定期的にチェックします。 たとえば、動作遅延が1000ms、バッチ間隔が5sに設定されている場合、 NCache 5秒ごとに後書きキューの操作をチェックし、操作の遅延が期限切れになったすべての操作(過去1000ミリ秒の間キューにあるすべての操作)を選択します。
操作を一括で選択した後、構成されたスロットルレートに従ってデータソースに適用されます。 後書きキューから1000の操作の大部分が選択され、500秒あたりのデータソースに適用される最大操作として500の操作(スロットルレートがXNUMX ops /秒の場合)のバッチでデータソースに適用されるとします。設定されたスロットル値を超えることはできません。
動作遅延時間は、秒から日、月の範囲で指定できます。 このようにして、構成可能な時間内にデータソースでの操作を一時停止できます。 NCache また、後書きキュー、操作数、および現在のバッチ操作数のパフォーマンスカウンターも提供します。 後書きの場合、バッチ処理が有効になっていると、データソースで実行する準備ができている操作が後書きキューからデキューされます。
Note
現在のバッチ間隔でデキューされた操作の数は、 現在のバッチ操作カウントカウンター.
後書き構成のホットアプライサポート
NCache は、適用可能なライトビハインド設定をサポートしており、キャッシュを停止することなく実行時にライトビハインド構成を変更できます。 Write-Behind の構成可能な属性は、 NCache マネージャー NCache それらの変更を動的に組み込みます。
ホットアプライサポートでは、後書きモードをバッチから非バッチに、またはその逆に変更できます。 たとえば、バッチモードを非バッチに変更した場合は、 NCache は操作遅延値を無視し、個別に操作の実行を開始します。 また、必要に応じて実行時にスロットリング率を変更することもできます。同様に、操作遅延、バッチ間隔、失敗した操作のキュー制限、失敗した操作のエビクション率も実行時に変更できます。
警告
増加できるのは、失敗した操作のキュー制限の値のみです。 さもないと、 NCache 以降の操作にはデフォルト値を使用します。
クラスタ化された環境でのライトビハインド
後書きキューは後書き操作用に維持されるため、別の専用スレッドモニターがその操作を実行します。 後書きのトポロジレベルの詳細を以下に示します。
複製されたトポロジー: 後書きキューはすべてのノードで維持されますが、後書き非同期プロセッサはコーディネーターノードにのみ存在します。 これは、すべての後書き操作がこのノードを介して実行され、クラスター全体の他のノードキューに複製されることを意味します。 このようにして、ノードがダウンした場合、次のコーディネーターノードが残りのすべてのライトビハインド操作を実行します。
パーティション化された複製トポロジ: 後書きキューは各アクティブノードで維持され、対応するレプリカにも複製されます。 各ノードは、データソースでのライトビハインド操作を担当します。
ミラーリングされたトポロジ: 後書きキューはアクティブノードとパッシブノードの両方で維持されますが、後書き操作を実行するのはアクティブノードのみです。 同様に、アクティブノードがダウンしている場合、パッシブノードがアクティブになり、残りのライトビハインド操作を実行します。
パーティション化されたトポロジ: ライトビハインドキューは各パーティションで維持され、すべてのノードがデータソースでのライトビハインド操作を担当します。
キャッシング操作結果
NCache 操作結果に基づいて、キャッシュ内のライトスルー操作を同期する柔軟性を提供します。 データソースに操作(追加/挿入)を適用した後、それに基づいて操作ステータスを指定できます NCache キャッシュストアを同期します。 たとえば、データソースの操作に失敗した場合、そのデータをキャッシュから削除するか、保持するかを決定できます。 データソースでその操作を再試行することもできます。 このためには、指定する必要があります Success
/Failure
/FailureRetry
/FailureDontRemove
as
OperationResult.Status
of OperationResult
。 これは、ライトスルーキャッシングとライトビハインドキャッシングの両方で提供されます。
データソースの動作ステータスとそれに対応するアクション NCache 以下に説明します。
ご注文完了:これは、データソース操作が成功し、アイテムがデータソースに追加されたことを意味します。 NCache キャッシュにも保存されます。
不良解析:これは、データソースの操作が失敗し、アイテムをデータソースに追加できなかったことを意味します。 NCache キャッシュからも削除されます。
失敗しない削除:これは、データソース操作が失敗し、アイテムをデータソースに追加できなかったことを意味しますが、 NCache キャッシュに保持されます。
失敗再試行:これは、データソースの操作が失敗し、アイテムをデータソースに追加できなかったことを意味します。 NCache アイテムをキャッシュに保持して再試行します。 再試行は、後書き操作として実行されます。
失敗した操作の再試行
NCache データソースで失敗した場合に備えて、ライトスルー/ライトビハインドで操作を再試行できます。 この目的のために、操作の再試行を有効にすると、 NCache データソースでその操作を再試行します。 ライトスルーまたはライトビハインドの場合、すべての再試行操作はライトビハインドキューに再キューイングされます。つまり、ライトスルー再試行操作は、ライトビハインド操作として非同期で再試行されます。
Note
NCache パフォーマンスカウンターも提供します Datasource failed operations/sec
。 データソースで実行される書き込み操作は、 Failure
/FailureRetry
/FailureDontRemove
as OperationResult.Status
of
OperationResult
このカウンターによってXNUMX秒あたりにカウントされます。
NCache 再試行する失敗した操作の数を制限できます。 このような状況では、失敗した操作のキュー制限について、
NCache Manager は、その制限を超えた場合、構成可能なエビクション率を使用して、失敗した操作をエビクションできます。 ここ、 NCache 再試行されたキューがいっぱいになると、ほとんどの再試行された操作が削除されます。 各操作には RetryCount
それに関連付けられたプロパティ。データソースで再試行される操作ごとに増分されます。
このため、 NCache のパフォーマンスカウンターを提供します
Write-behind failure retry count
および Write-behind evictions/sec
を選択します。 Write-behind failure retry count
再試行のために再キューイングされた操作の数を示します。 データソースの書き込み操作が返されます FailureRetry
as Status
in OperationResult
再試行のために再度キューに入れられます。 一方、 Write-behind evictions/sec
counterは、XNUMX秒あたりに削除された再試行操作の数を表示します。
データソース操作後のキャッシュの更新
前述したように、ライトスルー キャッシュでは、操作は最初にキャッシュ ストアに対して実行され、次にデータ ソースに対して実行されます。 データ ソース上で操作を実行した後、データが変更されるシナリオが存在する可能性があります。たとえば、ID 列の場合、その値がデータ ソース操作によって変更される可能性があります。 このような状況では、キャッシュとデータ ソースでデータの不整合が生じる可能性があります。 これに対処するには、 NCache データソース操作後にキャッシュ内のデータを更新するかどうかを指定できます。 有効にすることができます UpdateInNCache
このフラグを使用すると、キャッシュ ストアで操作 (追加/挿入) を再度実行してデータ ソースと同期できるため、キャッシュ ストア内の操作がライトスルーを通じて同期的に、またはライトビハインド キャッシュを通じて非同期的に更新されます。
Note
NCache パフォーマンスカウンターも提供します Datasource updates/sec
これは、データソースの書き込み操作後のキャッシュ内のXNUMX秒あたりの更新操作の数を表示します。
このセクションの内容
ライトスループロバイダーの構成
ライトスループロバイダーインターフェイスについて説明し、インターフェイスのサンプル実装を提供します。
キャッシュ操作によるライトスルー
の基本的な操作でライトスルーを使用するためのサンプルを提供します NCache.
キャッシュ操作による後書き
の基本操作で後書きを使用するためのサンプルを提供します NCache.
ライトスルーカウンターを監視する
によって提供されるパフォーマンスカウンターについて説明します NCache ライトスルーキャッシングを監視します。