プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Coherenceでのアプリケーションの開発
12c (12.1.3)
E56206-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

6 Coherenceクラスタの概要

この章では、Coherenceクラスタと、クラスタ・メンバーがTangosol Cluster Management Protocol (TCMP)を使用して相互に通信する方法について説明します。クラスタ化されたサービスについても説明します。

この章には次の項が含まれます:

6.1 クラスタの概要

Coherenceクラスタは、Coherenceを実行するJVMプロセスのネットワークです。JVMは、自動的に結合されてクラスタを形成し、クラスタ・メンバーまたはクラスタ・ノードと呼ばれます。クラスタ・メンバーどうしは、Tangosol Cluster Management Protocol (TCMP)を使用して通信します。クラスタ・メンバーでは、マルチキャスト通信(ブロードキャスト)とユニキャスト通信(Point-to-Point通信)の両方でTCMPを使用します。

クラスタには、そのクラスタのすべてのメンバーで共有するサービスがあります。このサービスの例として、接続サービス(ルート・クラスタ・サービスなど)、キャッシュ・サービス(分散キャッシュ・サービス)、処理サービス(呼出しサービスなど)があります。各クラスタ・メンバーは、このようなサービスを提供でき、また利用できます。クラスタの最初のメンバーは上位メンバーと呼ばれ、多くの場合は、そのクラスタの作成に必要なコア・サービスを開始します。クラスタの上位メンバーがシャットダウンした場合は、他のいずれかのクラスタ・メンバーが上位メンバーの役割を引き受けることが前提となっています。

6.2 TCMPの理解

TCMPは、クラスタ・メンバーの検出、クラスタの管理、サービスのプロビジョニングおよびデータの伝送に使用する、IPベースのプロトコルです。TCMPは、次のものを使用するように構成できます。

  • UDP/IPマルチキャストとUDP/IPユニキャストの組合せ: これはデフォルトの構成です。

  • UDP/IPユニキャストのみ(マルチキャストなし): 「マルチキャスト通信の無効化」を参照してください。この構成は、マルチキャストをサポートしていないネットワーク環境やオプションによるマルチキャストが構成されていないネットワーク環境で使用します。

  • TCP/IPのみ(UDP/IPマルチキャストもUDP/IPユニキャストもなし): 「TCPソケット・プロバイダの使用」を参照してください。この構成は、TCPを優先するネットワーク環境で使用します。

  • SDP/IPのみ(UDP/IPマルチキャストもUDP/IPユニキャストもなし)。「SDPソケット・プロバイダの使用」を参照してください。この構成は、SDPを優先するネットワーク環境で使用します。

  • TCP/IPまたはSDP/IPを介したSSL。「SSLソケット・プロバイダの使用」を参照してください。この構成は、高度なセキュリティで保護した通信をクラスタ・メンバー間で必要とするネットワーク環境で使用します。

マルチキャストの使用

マルチキャストは次のように使用します。

  • クラスタの検出: マルチキャストを使用して、新しいメンバーが参加可能な状態で稼働しているクラスタがあるかどうかを検出します。

  • クラスタ・ハートビート: マルチキャストを通じてクラスタの最も古いメンバーからハートビートが定期的に送信されます。その頻度は構成可能で、デフォルトでは1秒間に1回に設定されています。

  • メッセージ配信: 複数のクラスタ・メンバーへの配信が必要なメッセージは、マルチキャストを通じて送信されることがよくあります。一方、ユニキャストを使用すると、メッセージは一度に1人のメンバーに送信されます。

ユニキャストの使用

ユニキャストは次のように使用します。

  • 直接的なメンバー間(Point-to-Point)通信。メッセージ、非同期の肯定応答(ACK)、非同期の否定応答(NACK)およびPeer-to-Peerハートビートなどがあります。クラスタでの通信のほとんどはPoint-to-Pointです。

  • 状況によっては、複数のメンバーを対象とするメッセージでも、ユニキャストを通じて送信されることがあります。これは、非常に大きなクラスタでトラフィック・フローを形成したりCPUの負荷を軽減するために実行されます。

  • マルチキャスト通信が無効な場合、すべての通信はユニキャストを使用して送信されます。

TCPの使用

TCPは次のように使用します。

  • TCP/IPリングを追加の停止検出メカニズムとして使用し、実際のノード障害と無応答ノードとを識別します(JVMがフルGCを実行する場合など)。

  • データ転送にはTCPを排他的に使用するようにTCMPを構成できます。UDPの場合と同様、転送にユニキャストのみを使用するように構成できるほか、ユニキャストとマルチキャストの両方を使用するように構成することもできます。

プロトコルの信頼性

TCMPプロトコルは、あらゆるメッセージについて信頼性の高いインオーダー配信を実現します。基盤となるUDP/IPプロトコルでは信頼性のある配信やインオーダー配信ができないため、TCMPでは、キュー型の完全非同期ACKおよびNACKに基づいたメカニズムと、メッセージの確実な順序付けに不可欠な一意のIDを使用して信頼性のあるメッセージ配信を実現しています。

プロトコルのリソースの利用

TCMPプロトコル(デフォルトでの構成)には、クラスタ・サイズに関係なく、JVMごとに3つのUDP/IPソケット(マルチキャスト用に1つとユニキャスト用に2つ)および6つのスレッドのみが必要です。これはCoherenceのスケーラビリティで重要な要素です。これにより、サーバー数に関係なく、クラスタの各ノードで追加のネットワーク接続を必要とせずに、Point-to-Pointによるクラスタ・メンバーとの通信、または一群のクラスタ・メンバーとの通信が可能になります。

オプションのTCP/IPリングでは、いくつかのTCP/IPソケットおよび1つのスレッドを追加で使用します。

プロトコルのチューニング性

TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジの利用や、地理的に分散したクラスタにある低帯域幅で長待機時間のセグメントに対する許容差の追加が可能です。Coherenceには出荷時の初期設定の構成があります。TCMP属性の中には、実行時に動的に自己構成できるものがありますが、デプロイ目的でそれらをオーバーライドすることやロックダウンすることも可能です。

6.3 クラスタ化されたサービスの理解

Coherenceの機能はサービスの概念に基づいています。各クラスタ・メンバーは、サービスを登録、提供および利用できます。クラスタ・メンバーでは、複数のサービスを実行できます。クラスタ・メンバーは常に単一のルート・クラスタ・サービスを含み、任意の数のグリッド・サービスも含むことができます。グリッド・サービスには、クラスタ内でそのサービスを一意に識別するサービス名と、サービスの機能を定義するサービス・タイプが設定されています。各サービス・タイプ(ルート・クラスタ・サービスを除く)には、複数のインスタンスが存在する場合もあります。

サービスは、機能に基づいて次のカテゴリに分類されます。カテゴリは明確化のために使用されているもので、実際のコンポーネントやサービス間の関係を示すものではありません。

接続サービス

  • クラスタ・サービス: クラスタ・ノードがクラスタに参加する必要がある場合に自動的に起動され、多くの場合ルート・クラスタ・サービスと呼ばれます。各クラスタ・ノードでは、常にこのタイプのサービスが1つのみ実行されます。このサービスの役割は、他のクラスタ・ノードの検出、クラスタ・ノードの障害の検出およびクラスタ内の他のサービスの可用性の登録です。

  • プロキシ・サービス: このサービスを使用すると、クラスタの外部で稼動しているクライアントからの接続(TCPを使用)が可能になります。多くのアプリケーションは、すべてのクライアントがクラスタ・メンバーでもあるように構成しますが、クラスタ外部でクライアントを実行することが望ましい場合も少なくありません。数百から数千のクライアント・プロセスが存在する場合、クライアントがJavaプラットフォーム上で稼働していない場合、またはきわめて高度な分離が必要な場合には、リモート・クライアントが特に便利です。

処理サービス

  • 起動サービス: このサービスはクラスタ化された起動を提供し、グリッド・コンピューティング・アーキテクチャをサポートします。このサービスを使用すると、クライアントにある任意のノード、ノードの任意のグループ、またはクラスタ全体に対してアプリケーションからエージェントを起動できます。エージェントの起動には、リクエスト/レスポンス方式、fire and forget方式、または非同期のユーザー定義可能な方式を使用できます。

データ・サービス

  • 分散型キャッシュ・サービス: このサービスを使用すると、クラスタ・ノードからクラスタ間にデータを分散(パーティション化)できます。これにより、キャッシュにある各データは、1つのクラスタ・ノードでのみ管理(保持)されます。分散キャッシュ・サービスは、ペシミスティック・ロックをサポートしています。また、データ損失のないフェイルオーバーをサポートするために、各データが1つ以上の他のクラスタ・ノードにバックアップされるように、このサービスを構成することも可能です。さらには、一部のクラスタ・ノードのみデータをまったく保持しないように構成することもできます。これは、分散データを保持しないようにアプリケーション・サーバー・プロセスを設定し、追加のキャッシュ・サーバーJVMを実行して分散キャッシュ記憶域を提供することで、アプリケーション・サーバー・プロセスのJavaヒープ・サイズを制限する場合などに有用です。分散キャッシュの詳細は、「分散キャッシュの理解」を参照してください。

  • レプリケート・キャッシュ・サービス: このサービスを実行するすべてのクラスタ・ノードにサービス自身のすべてのデータを完全にレプリケートする、同期化されたレプリケート・キャッシュ・サービスです。レプリケート・キャッシュでは、ペシミスティック・ロックをサポートして、データに変更が発生した場合はすべてのクラスタ・メンバーが更新を受け取れるようにしています。レプリケート・キャッシュは、一般には内部アプリケーション・メタデータの管理に使用します。レプリケート・キャッシュの詳細は、「レプリケート・キャッシュの理解」を参照してください。

  • オプティミスティック・キャッシュ・サービス: これは、レプリケート・キャッシュ・サービスのオプティミスティック並行処理バージョンです。サービス自身のすべてのデータをすべてのクラスタ・ノードに完全にレプリケートし、一貫性を維持するためにオプティミスティック・データベース・ロックと同様の最適化を採用しています。同一時刻に様々なサーバーから複数の更新が実行されても、最終的にはすべてのサーバーが同じ現在値になります。オプティミスティック・キャッシュ・サービスはペシミスティック・ロックをサポートしていないため、通常は、最後に認識した値を読取り専用の目的でキャッシュする場合にのみ使用することをお薦めします。このサービスが使用されることはめったにありません。オプティミスティック・キャッシュの詳細は、「オプティミスティック・キャッシュの理解」を参照してください。

クラスタ化サービスは通常1つのデーモン・スレッドを使用しますが、さらに大きな処理帯域幅をサービスに提供するように構成できるスレッド・プールをオプションで用意しています。たとえば、起動サービスと分散キャッシュ・サービスはどちらもスレッド・プーリングを完全にサポートすることで、データベースのロード処理、パラレル分散問合せ、およびエージェントの起動を加速化します。

前述のサービスは、クラスタ・サービスの基本にすぎず、Coherenceが提供するキャッシュ・タイプのすべてではありません。Coherenceは、クラスタ化サービスをバッキング・マップやオーバーフロー・マップなどのキャッシュ機能と組み合せることにより、きわめて柔軟性が高く、構成可能なオプション・セットをクラスタ化アプリケーションに提供します。

キャッシュ・サービス内には、任意の数の名前付きキャッシュが存在します。名前付きキャッシュは標準のJCache APIを提供します。このAPIは、キーと値のペアを保持するjava.util.MapというJavaコレクションAPIをベースとしています。