3.2. レプリケートされたキャッシュ

任意のノードでレプリケートされたキャッシュに書き込まれたエントリーは、クラスター内の他のすべてのノードに複製され、任意のノードからローカルで取得できます。レプリケートモードは、クラスター間で状態を共有するための迅速で簡単な方法を提供しますが、書き込みに必要なメッセージの数がクラスターサイズに比例してスケーリングするため、レプリケーションは実際には小さなクラスター (10 ノード未満) でのみ適切に実行します。Data Grid は、UDP マルチキャストを使用するように設定できます。これにより、この問題がある程度軽減されます。

各キーにはプライマリー所有者があり、一貫性を提供するためにデータコンテナーの更新をシリアル化します。プライマリー所有者の割り当て方法の詳細は、Key Ownership セクションを参照してください。

図3.2 レプリケートモード

レプリケートモードは、同期または非同期にすることができます。

  • 同期レプリケーションは、変更がクラスターのすべてのノードに正常に複製されるまで、呼び出し元 (cache.put(key, value) など) をブロックします。
  • 非同期レプリケーションはバックグラウンドでレプリケーションを実行し、書き込み操作が即座に返されます。非同期レプリケーションは推奨されません。これは、通信エラーやリモートノードで発生したエラーは呼び出し元に報告されないためです。

トランザクションが有効になっていると、書き込み操作はプライマリー所有者によって複製されません。

  • 悲観的ロックでは、各書き込みは、すべてのノードにブロードキャストされるロックメッセージをトリガーします。トランザクションのコミット時に、送信元は 1 フェーズの準備メッセージとロック解除メッセージ (任意) をブロードキャストします。1 フェーズの準備またはロック解除メッセージのいずれかが fire-and-forget になります。
  • 楽観的ロックを使用すると、発信者は準備メッセージ、コミットメッセージ、およびロック解除メッセージ (任意) をブロードキャストします。ここで、1 フェーズの準備またはロック解除メッセージが fire-and-forget になります。