この章では、Coherenceでサポートされているネットワーク・プロトコルについて説明します。
Coherenceは、TCMP(つまりクラスタ化されたIPベースのプロトコル)を使用して、サーバーの検出、クラスタ管理、サービス・プロビジョニングおよびデータ転送を行います。真のスケーラビリティを実現するため、サーバー上で多数のスレッドが同時に通信している場合でも、TCMPプロトコルは完全に非同期です。つまり、通信がブロックされることはありません。また、非同期とは(異なる2つのサイト間にルーティングされたネットワークなどで)ネットワークの待機時間がクラスタのスループットに影響しないことも意味します。ただし、特定の処理速度には影響します。
TCMPでは、UDP/IPマルチキャスト、UDP/IPユニキャストおよびTCP/IPを次のように組み合せて使用しています。
マルチキャスト
クラスタ検出: 新しいメンバーが参加できるクラスタがすでに実行されているかを検出します。
クラスタ・ハートビート: クラスタの最も古いメンバーからマルチキャストを通じて定期的にハートビートが送信されます。その頻度は構成可能で、デフォルトでは1秒間に1回と設定されています。
メッセージ配信: 複数のクラスタ・メンバーへの配信が必要なメッセージは、マルチキャストを通じて送信されることがよくあります。一方、ユニキャストを使用すると、メッセージは一度に1人のメンバーに送信されます。
ユニキャスト
直接的なメンバー間(Point-to-Point)通信。メッセージ、非同期の肯定応答(ACK)、非同期の否定応答(NACK)およびPeer-to-Peerハートビートなどがあります。
状況によっては、複数のメンバーを対象とするメッセージでも、ユニキャストを通じて送信されることがあります。これは、非常に大きなクラスタでトラフィック・フローを形成したりCPUの負荷を軽減するために実行されます。
TCP
オプションのTCP/IPリングを追加の停止検出メカニズムとして使用し、JVMがフルGCを実行する場合などに、実際のノード障害と無応答ノードとを識別します。
TCP/IPは、このプロトコル固有のオーバーヘッドおよびその同期性により、データ転送メカニズムとしては使用されません。
TCMPプロトコルは、あらゆるメッセージについて信頼性の高いインオーダー配信を実現します。基盤となるUDP/IPプロトコルでは信頼性のある配信やインオーダー配信ができないため、TCMPでは、キュー型の完全非同期ACKおよびNACKに基づいたメカニズムと、メッセージの確実な順序付けに不可欠な一意のIDを使用して信頼性のあるメッセージ配信を実現しています。
TCMPプロトコルには、クラスタ・サイズに関係なく、JVMごとに2つのUDP/IPソケット(それぞれマルチキャストおよびユニキャスト用)および6つのスレッドのみが必要です。これはCoherenceのスケーラビリティに主要な要素です。これにより、サーバー数に関係なく、クラスタの各ノードが追加のネットワーク接続を必要とせずに、Point-to-Pointで、または一群のクラスタ・メンバーと通信できます。
オプションのTCP/IPリングでは、TCP/IPソケットをいくつか追加で使用し、全体で1つのスレッドが追加されます。
TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジを利用したり、地理的に分散されたクラスタ内の低帯域幅または長待機時間のセグメントあるいはその両方に公差を追加できます。Coherenceには出荷時の初期設定の構成があります。一部のTCMP属性は実行時に動的に自己構成されますが、デプロイ目的でオーバーライドやロックダウンされる可能性もあります。
マルチキャストUDP/IPパケットは、そのパケットがネットワーク上を移動する範囲を指定するTime-to-Live(TTL)値を使用して構成されます。TTLは、パケットが存続するホップ数で表されます。各ネットワーク・インタフェース、ルーターおよびマネージド・スイッチが1ホップと見なされます。Coherenceには、マルチキャスト・メッセージの有効範囲を制限するTTL設定が用意されています。