28.5. キーアフィニティーサービス
キーアフィニティーサービスを使用すると、分散された Red Hat JBoss Data Grid クラスターの特定のノードに値を配置できます。サービスは、識別する指定済みクラスターアドレスに基いて、ハッシュ化されたキーを特定のノードに返します。
キーアフィニティーサービスにより返されたキーは、ユーザー名などの意味を持つことができません。これらは、このレコードのためにアプリケーション全体で使用される無作為の ID にすぎません。提供されたキージェネレーターは、このサービスにより返されるキーが一意であることを保証しません。カスタムキー形式について、KeyGenerator の独自の実装を渡すことができます。
このサービスの参照を取得し、使用する方法の例を以下に示します。
例28.2 キーアフィニティーサービス
EmbeddedCacheManager cacheManager = getCacheManager();
Cache cache = cacheManager.getCache();
KeyAffinityService keyAffinityService =
KeyAffinityServiceFactory.newLocalKeyAffinityService(
cache,
new RndKeyGenerator(),
Executors.newSingleThreadExecutor(),
100);
Object localKey = keyAffinityService.getKeyForAddress(cacheManager.getAddress());
cache.put(localKey, "yourValue");
以下の手順は、提供された例の説明です。
手順28.3 キーアフィニティーサービスの使用
キャッシュマネージャーおよびキャッシュの参照の取得
EmbeddedCacheManager cacheManager = getCacheManager(); Cache cache = cacheManager.getCache();アフィニティーサービスの作成
これにより、サービスが起動され、キーを生成し、キューに格納するために、提供されたExecutorが使用されます。KeyAffinityService keyAffinityService = KeyAffinityServiceFactory.newLocalKeyAffinityService( cache, new RndKeyGenerator(), Executors.newSingleThreadExecutor(), 100);特定のアドレスにマップするキーの取得
ローカルノードにマップされるサービスからキーを取得します (cacheManager.getAddress()はローカルアドレスを返します)。Object localKey = keyAffinityService.getKeyForAddress(cacheManager.getAddress());値をノードに配置
KeyAffinityServiceから取得されたキーを持つエントリーは常に、提供されたアドレスを持つノードに格納されます。この場合は、ローカルノードになります。cache.put(localKey, "yourValue");
28.5.1. ライフサイクル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
KeyAffinityService は、 Lifecycle を拡張します。これにより、キーアフィニティーサービスを停止、起動、および再起動することが可能になります。
例28.3 キーアフィニティーサービスライフサイクルパラメーター
public interface Lifecycle {
void start();
void stop();
}
サービスは、
KeyAffinityServiceFactory を介してインスタンス化されます。すべてのファクトリーメソッドは非同期キー生成に使用される Executor を持つため、これは呼び出し元のスレッドで使用されません。ユーザーはこの Executor のシャットダウンを制御します。
KeyAffinityService は、必要なくなったときに明示的に停止する必要があります。これにより、バックグラウンドキー生成が停止され、保持された他のリソースがリリースされます。KeyAffinityServce は、登録したキャッシュマネージャーがシャットダウンされた場合のみ停止します。
28.5.2. トポロジーの変更 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
KeyAffinityService キーの所有権は、トポロジーが変更されると、変わることがあります。キーアフィニティーサービスは、トポロジーの変更と更新を監視し、古いキーまたは指定されたものと異なるノードにマップされるキーを返さないようにします。ただし、キーが使用されたときにノードアフィニティーが変更されないことは保証されません。以下に例を示します。
- スレッド (
T1) は、ノード (A) にマップされるキー (K1) を読み取ります。 - トポロジーが変更され、
K1がノードBにマップされます。 T1はK1を使用してキャッシュにデータを追加します。この時点でK1は読み取り時に要求されたものと異なるノードであるBにマップされます。
上記のシナリオは理想的ではありませんが、クラスターの変更中にすでに使用中のキーを移動できるため、アプリケーションのサポートされた動作です。
KeyAffinityService は安定したクラスターに対してアクセス近接の最適化を提供します。トポロジーの変更が安定的でないときには適用されません。