3.2. レプリケートされたキャッシュ
任意のノードでレプリケートされたキャッシュに書き込まれたエントリーは、クラスター内の他のすべてのノードに複製され、任意のノードからローカルで取得できます。レプリケートモードは、クラスター間で状態を共有するための迅速で簡単な方法を提供しますが、書き込みに必要なメッセージの数がクラスターサイズに比例してスケーリングするため、レプリケーションは実際には小さなクラスター (10 ノード未満) でのみ適切に実行します。Data Grid は、UDP マルチキャストを使用するように設定できます。これにより、この問題がある程度軽減されます。
各キーにはプライマリー所有者があり、一貫性を提供するためにデータコンテナーの更新をシリアル化します。プライマリー所有者の割り当て方法の詳細は、Key Ownership セクションを参照してください。
図3.2 レプリケートモード
レプリケートモードは、同期または非同期にすることができます。
-
同期レプリケーションは、変更がクラスターのすべてのノードに正常に複製されるまで、呼び出し元 (
cache.put(key, value)
など) をブロックします。 - 非同期レプリケーションはバックグラウンドでレプリケーションを実行し、書き込み操作が即座に返されます。非同期レプリケーションは推奨されません。これは、通信エラーやリモートノードで発生したエラーは呼び出し元に報告されないためです。
トランザクションが有効になっていると、書き込み操作はプライマリー所有者によって複製されません。
- 悲観的ロックでは、各書き込みは、すべてのノードにブロードキャストされるロックメッセージをトリガーします。トランザクションのコミット時に、送信元は 1 フェーズの準備メッセージとロック解除メッセージ (任意) をブロードキャストします。1 フェーズの準備またはロック解除メッセージのいずれかが fire-and-forget になります。
- 楽観的ロックを使用すると、発信者は準備メッセージ、コミットメッセージ、およびロック解除メッセージ (任意) をブロードキャストします。ここで、1 フェーズの準備またはロック解除メッセージが fire-and-forget になります。