複数のデータセンターにわたる地理レプリケーション
NCache ブリッジ機能を使用して、災害復旧計画として地理レプリケーションを提供します。複数のクラスター キャッシュ間にブリッジが作成され、クライアントの操作を中断することなく、そのブリッジを介してソースから他のサイトにデータがレプリケートされます。
ブリッジの概念的および動作の詳細については、を参照してください。 橋の建築 管理者ガイド。
ブリッジでは、複数のアクティブ サイト キャッシュが存在し、キャッシュ操作を同時に行うことができます。 XNUMX つのアクティブ サイト キャッシュに接続されているクライアントがいくつかのキーを追加し、同じキー操作が他のアクティブ ノードによって実行される可能性があります。 このような状況では、ブリッジ競合リゾルバーが機能します。 競合を解決し、定義されたルールに応じてキャッシュにどのキーを適用するかを決定します。
ユーザーが競合解決ルールを構成していない場合は、 NCache デフォルトのリゾルバー ルールを使用します。 デフォルトのルールでは、キャッシュ上で実行される各操作にタイムスパンが追加され、最新の操作が保持されます。 ブリッジ項目のバージョンのチェックが実行されます。 タイムスタンプが新しい場合、またはバージョンが最新または同じ場合は、それを新しいエントリに置き換え、古い場合は古いエントリを保持します。
データセンターの地理レプリケーションの前提条件
Geo レプリケーションを使用する前に NCache 次の要件が満たされていることを確認してください。
- すべてを使用するために必要な標準的な前提条件について学習するには NCache サーバー側の機能については、指定されたページを参照してください サーバー側 API の前提条件.
- APIの詳細については、以下を参照してください。 Iキャッシュ, キャッシュ項目, IBridgeConflictResolver, BridgeItemVersion.
- これは、MicrosoftVisualStudioを使用したクラスライブラリプロジェクトである必要があります。
- ユーザーとの強い関係を維持するために、 ブリッジを構成する NCache このクラスを実装した後の Management Center。
IBridgeConflictResolverインターフェースのサンプル実装
次の競合リゾルバーのサンプル実装には、キャッシュ内に既に存在するキーに対するブリッジからの操作の複製中に発生する可能性のある競合を解決するロジックが含まれています。 競合が発生するたびに、キャッシュは BridgeConflictResolution
キャッシュに定義されているルールに応じて、キャッシュにどの操作を適用するかを決定します。 XNUMX つのパラメータ/エントリを受け取ります。両方とも ProviderBridgeItem
タイプ。 ProviderBridgeItem
次のパラメータが含まれています。
public class Resolver : IBridgeConflictResolver
{
public void Init(System.Collections.IDictionary parameters)
{
// Initialize parameters
}
public ConflictResolution Resolve(ProviderBridgeItem oldEntry, ProviderBridgeItem newEntry)
{
var conflictResolution = new ConflictResolution();
switch (oldEntry.BridgeItemVersion)
{
case BridgeItemVersion.OLD:
{
conflictResolution.ResolutionAction = ResolutionAction.ReplaceWithNewEntry;
}
break;
case BridgeItemVersion.LATEST:
{
conflictResolution.ResolutionAction = ResolutionAction.KeepOldEntry;
}
break;
case BridgeItemVersion.SAME:
{
if (oldEntry.OpCode == BridgeItemOpCodes.Remove)
{
conflictResolution.ResolutionAction = ResolutionAction.ReplaceWithNewEntry;
}
else
{
conflictResolution.ResolutionAction = ResolutionAction.KeepOldEntry;
}
}
break;
}
return conflictResolution;
// Configure this implementation on cache
}
public void Dispose()
{
// Dispose resources
}
}