3.4. 散在 (scattered) キャッシュ

散在 (scattered) モードは、クラスターの線形のスケーリングを可能にするため、Distribution モードと非常に似ています。データの 2 つのコピーを (numOwners=2 の分散モードとして) 維持することにより、単一ノードの障害を許容します。分散とは異なり、データの場所は固定されていません。同じ Consistent Hash アルゴリズムを使用してプライマリー所有者を特定しますが、バックアップコピーは前回データを書き込んだノードに保存されます。書き込みがプライマリー所有者で行われる場合、バックアップコピーは他のノードに保存されます (このコピーの正確な場所は重要ではありません)。

これには、任意の書き込みに対して単一のリモートプロシージャコール (RPC) という利点があります (配布モードには 1 つまたは 2 つの RPC が必要です) が、読み取りは常にプライマリー所有者をターゲットにする必要があります。これにより書き込みが高速になりますが、読み取り速度が遅い可能性があるため、このモードは書き込み集約型アプリケーションに適しています。

複数のバックアップコピーを保存すると、メモリー消費が若干高くなります。古いバックアップコピーを削除するために、インバリデーションメッセージがクラスターでブロードキャストされ、オーバーヘッドが発生します。これにより、非常に大きなクラスターでは分散モードのパフォーマンスが低下します (この動作は将来最適化される可能性があります)。

ノードがクラッシュすると、プライマリーコピーが失われる可能性があります。そのため、クラスターはバックアップを調整し、最後に書き込まれたバックアップコピーを見つける必要があります。このプロセスにより、状態遷移時によりネットワークトラフィックが上がります。

データのライターもバックアップであるため、トランスポートレベルでマシン/ラック/サイト ID を指定しても、クラスターは同じマシン/ラック/サイトで複数の失敗に対して回復性を備えません。

現在、トランザクションキャッシュで分散モードを使用することはできません。非同期レプリケーションはサポートされないため、代わりに非同期キャッシュ API を使用してください。機能コマンドはいずれも実装されていませんが、早い段階で追加される予定です。

キャッシュは、他のキャッシュモードと同様に設定されます。以下は宣言型設定の例です。

<scattered-cache name="scatteredCache" />

Java では、プログラムを用いてこの方法で設定できます。

Configuration c = new ConfigurationBuilder()
   .clustering().cacheMode(CacheMode.SCATTERED_SYNC)
   .build();

サーバーは通常 Hot Rod プロトコルを介してアクセスされるため、分散モードはサーバー設定では公開されません。このプロトコルは、書き込み用のプライマリー所有者を自動的に選択し (2 所有者を持つ分散モード)、クラスター内で単一の RPC が必要になります。したがって、分散キャッシュはパフォーマンス上の利点をもたらしません。