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

前
 
次
 

10 TCMPの動作のチューニング

この章では、デフォルトのTCMP設定を変更する方法について説明します。TCMPについても簡単に説明します。TCMPの詳細は、「TCMPの理解」を参照してください。また、チューニング上の考慮事項と方法を数多く取り上げている『Oracle Coherenceの管理』も参照してください。

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

10.1 TCMPデータ転送の概要

クラスタ・メンバーどうしは、Tangosol Cluster Management Protocol (TCMP)を使用して通信します。TCMPは、クラスタ・メンバーの検出、クラスタの管理、サービスのプロビジョニングおよびデータの伝送に使用する、IPベースのプロトコルです。TCMPは非同期プロトコルなので、サーバー上で多数のスレッドが同時に通信している場合でも、通信がブロックされることがありません。また、非同期通信では、ネットワークの待機時間(2つの異なるサイト間でルーティングされるネットワーク上での待機時間など)が特定の操作の速度に影響を与える場合でも、クラスタ・スループットに影響が及ぶことはありません。

TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジの利用や、地理的に分散したクラスタにある低帯域幅で長待機時間のセグメントに対する許容差の追加が可能です。Coherenceには出荷時の初期設定の構成があります。TCMP属性の中には、実行時に動的に自己構成できるものがありますが、デプロイ目的でそれらをオーバーライドすることやロックダウンすることも可能です。TCMPの動作は、パフォーマンスのテストに基づいて変更する必要があります。Coherenceには、ネットワーク上でのTCMPのデータ転送パフォーマンスを評価するために使用できるデータグラム・テストが用意されています。データグラム・テスト・ユーティリティを使用してネットワークのパフォーマンスをテストする方法の詳細は、『Oracle Coherenceの管理』を参照してください。

TCMPデータ転送の動作は、tangosol-coherence-override.xmlファイルの中で、<packet-publisher><packet-speaker><incoming-message-handler>および<outgoing-message-handler>の各要素を使用して構成します。この章で取り上げるTCMP関連要素すべてのリファレンスは、付録A「オペレーション構成要素」を参照してください。

10.2 データ転送速度の調整

データの転送速度は<flow-control>要素と<traffic-jam>要素を使用して制御します。パケットの障害を最小限に抑えながら最大限のスループットを得るうえで、これらの要素は効果的です。ネットワークが低速な場合やパケット・バッファが小さい場合は、ここで説明する速度調整設定を変更することが普通です。

この項には次のトピックが含まれます:

10.2.1 パケットのフロー制御動作の調整

フロー制御を使用して、所定のクラスタ・メンバーへのパケット転送速度を動的に調整します。この調整は、Point-to-Point転送でのクラスタ・メンバーの応答性を数値化した統計に基づいて実行されます。フロー制御は、応答できなくなったクラスタ・メンバーが大量のパケットであふれる状況を防止します。

<flow-control>要素でフロー制御を構成します。フロー制御の動作を調整するための設定には、次の2つがあります。

  • <pause-detection> - 応答しなくなったクラスタ・メンバーに再送信するパケットの最大数を制御する設定です。この数のパケットを送信しても応答しないメンバーは一時停止していると判断されます。一時停止していると判断されたクラスタ・メンバー宛てのパケットは、そのメンバーが応答を再開するまで低速で送信されます。ガベージ・コレクションの実行時間が長いと、このような一時停止が発生します。この値は<maximum-packets>要素を使用して指定します。デフォルトのパケット数は16です。0を指定すると、一時停止の検出が無効になります。

  • <outstanding-packets> - クラスタ・メンバーに送信する未確認パケットの数を定義する設定です。送信した未確認パケット数がこの値に達すると、以降はそのメンバーにパケットを遅延送信します。この値には、<maximum-packets>要素を使用して数値を明示的に指定するか、<maximum-packets>要素と<minimum-packets>要素の両方を使用して値の範囲を指定します。範囲を指定すると、この設定はネットワーク統計に基づいて動的に調整されます。最大値には256パケットを超える値を指定する必要があり、デフォルト値は4096パケットです。最小値には16パケットを超える値を指定する必要があり、デフォルト値は64パケットです。

フロー制御の動作を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<pause-detection>要素と<outstanding-packets>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-delivery>
            <flow-control>
               <pause-detection>
                  <maximum-packets>32</maximum-packets>
               </pause-detection>
               <outstanding-packets>
                  <maximum-packets>2048</maximum-packets>
                  <minimum-packets>128</minimum-packets>
               </outstanding-packets>
            </flow-control>
         </packet-delivery>
      </packet-publisher>
   </cluster-config>
</coherence>

10.2.2 パケットのフロー制御の無効化

フロー制御を無効にするには、オペレーション・オーバーライド・ファイルを編集して、<flow-control>要素の中に、falseに設定した<enabled>要素を追加します。次に例を示します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-delivery>
            <flow-control>
               <enabled>false</enabled>
            </flow-control>
         </packet-delivery>
      </packet-publisher>
   </cluster-config>
</coherence>

10.2.3 パケット・トラフィック混雑の動作の調整

パケット・トラフィック混雑とは、クライアント・スレッドによりエンキューされ、パブリッシャがネットワークへの送信を待機している保留パケットの数が、パケット・パブリッシャによって許容不可と判断されるレベルに達した状態です。<traffic-jam>要素でトラフィック混雑の動作を構成します。トラフィック混雑の動作を調整する設定には、次の2つがあります。

  • <maximum-packets> - パケット・パブリッシャで許容できる保留パケットの最大数を制御する設定です。保留パケット数がこの値を超えると、輻輳が発生していると判断され、その場合はクライアント・リクエスト(システム・スレッド以外のローカル・スレッドからのリクエスト)の速度を遅くする必要があります。この構成した上限パケット数を超えると、未処理のパケット数がこの指定した上限値を下回るまで、クライアント・スレッドは強制的に一時停止状態になります。この設定で再送信キューのサイズを制限することにより、予期しないメモリー不足状態のほとんどは発生しなくなります。0を指定すると、この上限は設定されません。デフォルト値は8192です。

  • <pause-milliseconds> - パケット・パブリッシャが輻輳状態のときにメッセージを送信しようとするクライアント・スレッドを一時停止する時間(ミリ秒)を制御する設定です。パブリッシャは、渋滞が解消されるまでメッセージの送信を許可せず、このプロパティで指定された期間中、スレッドのスリープ処理を繰り返します。デフォルト値は10です。

パケット上限値が小さすぎる場合や一時停止時間が長すぎる場合は、パブリッシャによってすべての保留パケットが送信され、送信するパケットがなくなることがあります。この状態が検出されると、定期的に警告がログに記録されます。理想的な値は、パブリッシャで実行する処理がなくならず、同時にキューが制御できないほど大きくならないような値です。一時停止時間は短い時間(10ミリ秒以下)に設定し、パケット数の上限は大きい値(5000を超える値)に設定します。

<traffic-jam>要素と<flow-control>要素を使用した設定はPoint-to-Pointモードで動作し、受信側に未処理パケットが多数存在する場合は送信のみがブロックされます。<traffic-jam>要素の<maximum-packets>サブ要素の値を、<outstanding-packets>要素の<maximum-packets>値よりも大きく設定することをお薦めします。<flow-control>が無効な場合、<traffic-jam>では未処理のパケットがすべて考慮されます。

エンキュー動作の速度を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-packets>要素と<pause-milliseconds>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <traffic-jam>
            <maximum-packets>8192</maximum-packets>
            <pause-milliseconds>10</pause-milliseconds>
         </traffic-jam>
      </packet-publisher>
   </cluster-config>
</coherence>

10.3 負荷を低減するためのパケットのバンドリング

複数の小さいパケットを1つの大きいパケットにバンドルして、ネットワーク・スイッチ・インフラストラクチャへの負荷を低減できます。パケットのバンドリングは、<packet-bundling>要素の中で次のような設定で構成します。

  • <maximum-defferal-time> - 別のパケットのバンドルを待機している間のパケットの最大遅延時間を指定する設定です。この値を0に設定すると、待機のないアルゴリズムとなり、即座にアクセスできるパケットのみがバンドルされます。0より大きい値を設定すると、追加のパケットが得られるまで待機する間に、多少の送信遅延が発生します。スループットに有害な影響が出ないように、通常この値は250マイクロ秒未満に設定します。単位を指定しない場合は、ナノ秒と見なされます。デフォルト値は1us (マイクロ秒)です。

  • <agression-factor> - パケット遅延アルゴリズムのアグレッシブさを指定する設定です。<maximum-deferral-time>要素は遅延時間の上限を定義しますが、<aggression-factor>要素は平均の遅延時間に影響します。積極性の値が高いほど、パブリッシャが追加のパケットを待つ時間が長くなります。この係数は実数で表します。多くの場合は待機時間を最小に抑えながらパケットの使用率を上げることができるように、0.0から1.0の値を使用します。デフォルト値は0です。

デフォルトのpacket-bundlingの設定は積極性が最小で、測定可能な遅延なしでバンドルが発生することを許容します。より積極的なバンドリングの利点は、ネットワーク・インフラストラクチャとアプリケーション・オブジェクトの一般的なデータ・サイズおよびアクセス・パターンにより異なります。

パケットのバンドリング動作を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-defferal-time>要素と<agression-factor>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-delivery>
            <packet-bundling>
               <maximum-deferral-time>1us</maximum-deferral-time>
               <aggression-factor>0</aggression-factor>
            </packet-bundling>
         </packet-delivery>
      </packet-publisher>
   </cluster-config>
</coherence>

10.4 パケットの再転送動作の変更

TCMPでは、通知パケットを使用して、確認を要求するパケットを受信したことを応答します。肯定応答(ACK)パケットは、パケットが正しく受信されたので、再送信が不要であることを示します。多数の小さいACKパケットによってネットワーク帯域幅が浪費されないように、1つの送信元に対する複数のACKパケットは1つのACKパケットにまとめられます。肯定応答が得られないパケットは、パケット・パブリッシャに構成した再送信間隔に基づいて再転送されます。

否定応答(NACK)パケットは、パケットが正しく受信されていないことを示すものなので、そのパケットは再転送されます。受信したパケットの順序を検査してパケットの損失があることがわかると、否定応答が送信されます。否定応答があると、パブリッシャの再送信間隔に関係なく、はるかに早いタイミングでパケットが再送信されます。否定応答を無効にするには、「否定応答の無効化」を参照してください。

この項には次のトピックが含まれます:

10.4.1 パケットの再送信間隔の変更

パケットの再送信間隔は、送信に対応するACKパケットをパケット・パブリッシャが待機する最小時間(ミリ秒)を指定します。この時間が経過するとパケットが再送信されます。デフォルトの再送信間隔は200ミリ秒です。

パケットの再送信間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<resend-milliseconds>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-delivery>
            <resend-milliseconds>400</resend-milliseconds>
         </packet-delivery>
      </packet-publisher>
   </cluster-config>
</coherence>

10.4.2 パケットの送信タイムアウトの変更

パケットの再送信タイムアウト間隔は、ACKパケットが受信されない場合にパケットの再送信を継続する最長時間(ミリ秒)を指定します。このタイムアウトが経過すると、受信側が終了しているかどうかの判断が下されます。これを決定するには、他のノードがその受信者と通信できているかどうかなど、他のデータも考慮されます。デフォルト値は300000ミリ秒です。本番環境で使用する場合の推奨値は、300000を超え、予想される最大のGCの全所要時間の2倍より大きな値です。


注意:

デフォルトの停止検出メカニズムはTCPリング・リスナーです。このリスナーは、再送信タイムアウト間隔が経過する前に、障害が発生しているクラスタ・メンバーを検出します。停止検出の詳細は「停止検出の構成」を参照してください。

パケットの再送信タイムアウト間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<timeout-milliseconds>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-delivery>
            <timeout-milliseconds>420000</timeout-milliseconds>
         </packet-delivery>
      </packet-publisher>
   </cluster-config>
</coherence>

10.4.3 パケットの肯定応答遅延の構成

ACKパケットおよびNACKパケットの送信を必要に応じて変更できるようになるまでパケット・パブリッシャが待機する時間です。ACKパケットとNACKパケットの遅延間隔は、次の設定を使用して<notification-queueing>要素の中で構成します。

  • <ack-delay-milliseconds> - ACKパケットを送信するまでパケット・パブリッシャが遅延する最長時間(ミリ秒)を指定する要素です。複数の肯定応答をまとめてACKパケットが満たされると、より早いタイミングでそのACKパケットが送信されることがあります。リモート・メンバーのパケット配信再送信タイムアウトが経過する前にACKを受信して処理する時間を十分に確保できるように、リモート・メンバーのパケット配信再送信タイムアウトよりも相当に小さい値を設定する必要があります。デフォルト値は16です。

  • <nack-delay-milliseconds> - NACKパケットを送信するまでパケット・パブリッシャが遅延する最長時間(ミリ秒)を指定する要素です。デフォルト値は1です。

ACKおよびNACKの遅延間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<ack-delay-milliseconds>要素と<nack-delay-milliseconds>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <notification-queueing>
            <ack-delay-milliseconds>32</ack-delay-milliseconds>
            <nack-delay-milliseconds>1</nack-delay-milliseconds>
         </notification-queueing>
      </packet-publisher>
   </cluster-config>
</coherence>

10.5 パケット・バッファのサイズの構成

パケット・バッファはオペレーティング・システムのバッファであり、データグラム・ソケットで使用します(ソケット・バッファともいいます)。オペレーティング・システムに対してバッファ処理を要求するパケットの数を制御するようにパケット・バッファを構成できます。パケット・バッファは、ユニキャスト・リスナーとマルチキャスト・リスナーでインバウンド・バッファとして使用し、パケット・パブリッシャでアウトバウンド・バッファとして使用します。

この項には次のトピックが含まれます:

10.5.1 パケット・バッファのサイズ設定の理解

パケット・バッファのサイズは、次の設定を使用して、パケット数またはバイト数に基づいて構成できます。

  • <maximum-packets> - データグラム・ソケットに対してソケット自身のサイズを調整してバッファすることを要求するパケット数を(構成済のパケット・サイズに基づいて)指定します。詳細は、java.net.SocketOptions#SO_SNDBUFプロパティおよびjava.net.SocketOptions#SO_RCVBUFプロパティを参照してください。基礎となるソケットの実装で一定のサイズ以上をサポートできない場合、実際のバッファ・サイズは小さくなることがあります。パケット・サイズの構成の詳細は、「パケットの最大サイズの調整」を参照してください。

  • <size> - 基礎となるソケット・バッファに要求されるサイズをバイト単位で指定します。

オペレーティング・システムでは、指定されたパケット・バッファ・サイズを参考値として扱うにすぎず、指定の量を割り当てることは要求されません。割り当てられた領域が要求量よりも少ないと、Coherenceでは警告が発行され、領域が制限されたバッファを使用して稼動を継続するので、十分なパフォーマンスが得られない可能性があります。領域が大きいバッファが割り当てられるようにオペレーティング・システムを構成する方法の詳細は、『Oracle Coherenceの管理』を参照してください。

領域が大きいインバウンド・バッファを使用すると、Javaのガベージ・コレクタに起因するJVMの一時停止からCoherenceのネットワーク層を保護するうえで効果的です。JVMが一時停止している間、Coherenceではどのインバウンド・ソケットからもパケットをデキューできません。パケット・バッファのオーバーフローを引き起こすほど一時停止時間が長いと、発信元ノードがパケット消失を検出してパケットを再送信する必要があるため、パケットの受信が遅延します。

10.5.2 アウトバウンド・パケット・バッファのサイズの構成

アウトバウンド・パケット・バッファは、パケットを転送するときにパケット・パブリッシャで使用します。バッファのサイズを変更するときは、スループットと待機時間の両面からパフォーマンスを評価する必要があります。バッファのサイズを大きくするとスループットが増加し、逆に小さくすると待機時間が短くなります。

アウトバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、<packet-publisher>ノードに<packet-buffer>要素を追加し、<size>要素(バイト単位)または<maximum-packets>要素(パケット数単位)を使用してパケット・バッファのサイズを指定します。デフォルト値は32パケットです。次の例では、パケット数に基づいてパケット・バッファのサイズを指定しています。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-buffer>
            <maximum-packets>64</maximum-packets>
         </packet-buffer>
      </packet-publisher>
   </cluster-config>
</coherence>

10.5.3 インバウンド・パケット・バッファのサイズの構成

マルチキャスト・リスナーとユニキャスト・リスナーはそれぞれ専用のインバウンド・パケット・バッファを備えています。インバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、(<multicast-listener>ノードまたは<unicast-listener>ノードに) <packet-buffer>要素を追加し、<size>要素(バイト単位)または<maximum-packets>要素(パケット数単位)を使用してパケット・バッファのサイズを指定します。デフォルト値は、マルチキャスト・リスナーで64パケット、ユニキャスト・リスナーで1428パケットです。

次の例では、ユニキャスト・リスナーのパケット・バッファのサイズをバイト数で指定しています。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <unicast-listener>
         <packet-buffer>
            <size>1500000</size>
         </packet-buffer>
      </unicast-listener>
   </cluster-config>
</coherence>

次の例では、マルチキャスト・リスナーのパケット・バッファのサイズをパケット数で指定しています。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-buffer>
            <maximum-packets>128</maximum-packets>
         </packet-buffer>
      </packet-publisher>
   </cluster-config>
</coherence>

10.6 パケットの最大サイズの調整

クラスタ通信の効率とスループットが最適になるように、UDPパケットの最大サイズと最適サイズを調整できます。クラスタ・ノードは、いずれも同一の最大パケット・サイズを使用する必要があります。ネットワークの使用率を最適化するには、この値にネットワークのMTU (maximum transmission unit)より32バイト小さい値を指定する必要があります。


注意:

Microsoft Windowsで1024バイトを超えるUDPパケット・サイズを指定する場合、転送速度が最適になるようにレジストリ設定を調整する必要があります。COHRENCE_HOME/bin/optimize.reg登録ファイルにはレジストリ設定が保存されています。Windowsでデータグラムのサイズを設定する方法の詳細は、『Oracle Coherenceの管理』を参照してください。

パケットのサイズは<packet-size>要素で構成し、次の設定を指定します。

  • <maximum-length> - すべてのクラスタ・メンバーが問題なく処理できるパケット・サイズをバイト単位で指定します。この値は、クラスタ内のすべてのメンバーで同一にする必要があります。小さい値を設定することでクラスタの最大サイズを意図的に制限できます。この値は512以上とする必要があります。デフォルト値は64KBです。

  • <preferred-length> - ユニキャスト・ソケットおよびマルチキャスト・ソケットで送受信されるDatagramPacketオブジェクトの最適サイズをバイト単位で指定します。

    これには<maximum-length>値よりも大きい値または小さい値を指定できます。この値は、クラスタ内のすべてのメンバーで同一にする必要はありません。理想的な値は、UDPパケット・ヘッダー(32バイト)またはTCPパケット・ヘッダー(52バイト)用の十分な容量を確保しながら、ネットワークのMTUの範囲に収まる値です。

    この値は512以上とする必要があります。デフォルト値は、ローカル・ノードのMTUに基づいて自動的に計算されます。MTUを取得できない場合は1500のMTUが使用され、パケット・ヘッダーにあわせて調整されます(UDPの場合は1468、TCPの場合は1448)。

このパケット・サイズを調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-length>要素と<preferred-length>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-publisher>
         <packet-size>
            <maximum-length>49152</maximum-length>
            <preferred-length>1500</preferred-length>
         </packet-size>
      </packet-publisher>
   </cluster-config>
</coherence>

10.7 パケット・スピーカーのボリュームしきい値の変更

ネットワークの送信操作がブロックされている可能性があることをpacket-publisherが検出すると、パケット・スピーカーはネットワークにパケットを送信します。これにより、パケット・パブリッシャはI/Oのブロックを回避し、送信パケットの準備を続行できます。パケット・パブリッシャは、パケットの負荷の変化に伴ってスピーカーを使用するかどうかを動的に選択します。

パケットの負荷が比較的低い場合、スピーカーの操作をパブリッシャのスレッドで実行すると効率が向上することがあります。パケットの負荷が高い場合、スピーカーを使用すると、スピーカーによってネットワーク上でパケットを送信しながらパブリッシャはパケットの準備を続けることができます。

パケット・スピーカーを構成するには、<volume-threshold>要素を使用して、アクティブにするスピーカー・デーモンに送信できるようにしておくことが必要な最小のパケット数を指定します。値を指定しない場合は(デフォルト)、パケット・バッファに合わせて値が設定されます。

パケット・スピーカーのボリュームしきい値を指定するには、オペレーション・オーバーライド・ファイルを編集して、次のように<volume-threshold>要素を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <packet-speaker>
         <enabled>true</enabled>
         <volume-threshold>
            <minimum-packets>32</minimum-packets>
         </volume-threshold>
      </packet-speaker>
   </cluster-config>
</coherence>

10.8 受信メッセージ・ハンドラの構成

受信メッセージ・ハンドラは、UDPパケットを論理メッセージにアセンブルし、それを適切なCoherenceサービスにディスパッチして処理できるようにします。<incoming-message-handler>要素で受信メッセージ・ハンドラを構成します。

この項には次のトピックが含まれます:

10.8.1 時刻差異の変更

<maximum-time-variance>要素では、新しいクラスタ・メンバーのシステム時刻と現在のクラスタ時刻との間の差異を測定する際に、ブロードキャスト・メッセージの送受信間の最大時刻差異を指定します。差異が小さいほど、クラスタ内で実行中の複数のシステム間でクラスタ時刻が接近する確率が高まりますが、クラスタに参加するプロセスは、指定された差異内でメッセージの交換が起こることが可能になるまで延長されます。通常は、20ミリ秒程度の値で十分ですが、負荷の高いクラスタや複数のネットワーク・ホップでは、より大きな値が必要になる場合があります。デフォルト値は16です。

最大の時刻差異を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-time-variance>を追加します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <incoming-message-handler>
         <maximum-time-variance>16</maximum-time-variance>
      </incoming-message-handler>
   </cluster-config>
</coherence>

10.8.2 否定応答の無効化

受信メッセージ・ハンドラに対して、否定応答を無効化できます。無効にすると、パケットが正しく受信されていなくても、ハンドラはそのパケットの送信側に何も通知しません。この場合、パケットの送信側は、指定の再送信タイムアウト間隔の経過を待ったうえでパケットを再送信します。パケットの応答の詳細は、「パケットの再転送動作の変更」を参照してください。

否定応答を無効にするには、オペレーション・オーバーライド・ファイルを編集して、falseに設定した<use-nack-packets>要素を追加します。例:

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <incoming-message-handler>
         <use-nack-packets>false</use-nack-packets>
      </incoming-message-handler>
   </cluster-config>
</coherence>

10.9 ネットワーク・フィルタの使用

ネットワーク・フィルタは、低レベルのTCMPストリーム・プロトコルにプラグインするためのメカニズムです。Coherenceによってネットワーク経由で送信されるメッセージはすべて、このプロトコルを使用してストリームされます。Coherenceには、事前定義済圧縮フィルタが含まれており、必要に応じてカスタム・フィルタもサポートされます。

この項には次のトピックが含まれます:

フィルタは、オペレーション・デプロイメント・ディスクリプタで定義され、tangosol-coherence-override.xmlファイル内で明示的に有効化されている必要があります。


注意:

フィルタは、すべてのメンバーで使用するか、まったく使用しないかのいずれかにします。一方のクラスタ・メンバーがフィルタを使用しているのにもう一方が使用していない場合、メッセージ・プロトコルに障害が発生します。フィルタを構成する前に、クラスタ全体を停止してください。

10.9.1 圧縮フィルタの使用

圧縮フィルタはjava.util.zipパッケージに基づいており、メッセージ・コンテンツを圧縮してネットワークの負荷を軽減します。フィルタは、CPUの使用率に余裕があり、ネットワーク帯域幅が不十分な場合に便利です。圧縮フィルタは、com.tangosol.net.CompressionFilterクラスで定義され、<filters>ノード内のオペレーション・デプロイメント・ディスクリプタで宣言されます。圧縮フィルタの構成済名はgzipです。これは特定のサービスに対してフィルタを有効化する場合またはすべてのサービスに対してフィルタを有効化する場合に使用されます。

この項には、次のトピックが含まれます:

10.9.1.1 特定のサービスに対する圧縮フィルタの有効化

特定のサービスに対して圧縮フィルタを有効化するには、そのサービスの定義内に<use-filters>要素を含め、gzipに設定した<filter-name>サブ要素を追加します。次の例では、分散キャッシュ・サービス定義を構成して、圧縮フィルタを有効化します。このサービスのインスタンスであるすべてのサービスは、自動的にこのフィルタを使用します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <services>
         <service id="3">
            <service-type>DistributedCache</service-type>
            <service-component>PartitionedService.PartitionedCache
            </service-component>
            <use-filters>
               <filter-name>gzip</filter-name>
            </use-filters>
         </service>
      </services>
   </cluster-config>
</coherence>

10.9.1.2 すべてのサービスに対する圧縮フィルタの有効化

すべてのサービスに対して圧縮フィルタを有効化するには、<outgoing-message-handler>要素内に<use-filters>要素を追加し、gzipに設定した<filter-name>サブ要素を追加します。例:

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <outgoing-message-handler>
         <use-filters>
            <filter-name>gzip</filter-name>
         </use-filters>
      </outgoing-message-handler>
   </cluster-config>
</coherence>

10.9.1.3 圧縮フィルタの構成

圧縮フィルタには、フィルタの動作を構成できるパラメータが含まれています。表10-1で、使用可能な各パラメータについて説明します。詳細は、java.util.zip.Deflaterを参照してください。

次の例は、圧縮フィルタの構成戦略を示しており、デフォルトの圧縮戦略およびレベルを変更します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <filters>
         <filter id="1">
            <filter-name>gzip</filter-name>
            <filter-class>com.tangosol.net.CompressionFilter</filter-class>
            <init-params>
               <init-param id="1">
                  <param-name>strategy</param-name>
                  <param-value>huffman-only</param-value>
               </init-param>
               <init-param id="2">
                  <param-name>level</param-name>
                  <param-value>speed</param-value>
               </init-param>
            </init-params>
         </filter>
      </filters>
   </cluster-config>
</coherence>

表10-1 圧縮フィルタのパラメータ

パラメータ名 説明

buffer-length

圧縮バッファ長をバイト単位で指定します。有効な値は、正の整数またはゼロです。デフォルト値は0です。

level

圧縮レベルを指定します。有効な値は次のとおりです。

  • default (デフォルト)

  • compression

  • speed

  • なし

strategy

圧縮戦略を指定します。有効な値は次のとおりです。

  • gzip (デフォルト)

  • huffman-only

  • filtered

  • default


10.9.2 カスタム・ネットワーク・フィルタの使用

カスタム・ネットワーク・フィルタを必要に応じて作成できます。カスタム・フィルタは、com.tangosol.io.WrapperStreamFactoryインタフェースを実装する必要があります。WrapperStreamFactoryインタフェースにより、入力(受信メッセージ)または出力(送信メッセージ)でラップ(フィルタリング)されるストリームが提供され、元のストリームをラップするストリーム・バックが見込まれます。これらのメソッドは、メッセージの受信および送信のたびにコールされます。これらのAPIの詳細は、Oracle Coherence Java APIリファレンスを参照してください。

この項には、次のトピックが含まれます:

10.9.2.1 カスタム・フィルタの宣言

カスタム・フィルタは、tangosol-coherence-override.xmlファイルの<filters>要素内で宣言します。次の例は、MyFilterというカスタム・フィルタの定義方法を示しています。カスタム・フィルタを宣言するときは、フィルタIDを3より大きくする必要があります。これはオペレーション・デプロイメント・ディスクリプタで宣言されている事前定義済フィルタが3つあるためです。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <filters>
         <filter id="4">
            <filter-name>MyFilter</filter-name>
            <filter-class>package.MyFilter</filter-class>
            <init-params>
               <init-param id="1">
                  <param-name>foo</param-name>
                  <param-value>bar</param-value>
               </init-param>
            </init-params>
         </filter>
      </filters>
   </cluster-config>
</coherence>

10.9.2.2 特定のサービスに対するカスタム・フィルタの有効化

特定のサービスに対してカスタム・フィルタを有効化するには、そのサービスの定義内に<use-filters>要素を含め、そのフィルタ名に設定した<filter-name>サブ要素を追加します。次の例では、MyFilterというカスタム・フィルタを分散キャッシュ・サービスに対して有効化します。このサービスから派生するすべてのキャッシュは、自動的にこのフィルタを使用します。サービスが開始されるときにフィルタがインスタンス化され、サービスが停止するまで保持されます。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <services>
         <service id="3">
            <service-type>DistributedCache</service-type>
            <service-component>PartitionedService.PartitionedCache
            </service-component>
            <use-filters>
               <filter-name>MyFilter</filter-name>
            </use-filters>
         </service>
      </services>
   </cluster-config>
</coherence>

10.9.2.3 すべてのサービスに対するカスタム・フィルタの有効化

すべてのサービスに対してカスタム・フィルタをグローバルに有効化するには、<outgoing-message-handler>要素内に<use-filters>要素を追加し、そのフィルタ名に設定した<filter-name>サブ要素を追加します。次の例では、MyFilterというカスタム・フィルタをすべてのサービスに対して有効化します。Coherenceにより起動時にフィルタがインスタンス化され、クラスタが停止するまで保持されます。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <outgoing-message-handler>
         <use-filters>
            <filter-name>MyFilter</filter-name>
         </use-filters>
      </outgoing-message-handler>
   </cluster-config>
</coherence>

10.10 TCMPソケット・プロバイダ実装の変更

Coherenceには、TCMPで使用するために、複数の基本的なソケット・プロバイダ実装が(デフォルト・システム・ソケット・プロバイダのほかに)用意されています。TCMPで使用するソケット・プロバイダは、<unicast-listener>要素でユニキャスト・リスナー向けに構成します。

この項には次のトピックが含まれます:

10.10.1 TCPソケット・プロバイダの使用

TCPソケット・プロバイダは、可能なかぎりTCPベースのソケットを生成するソケット・プロバイダです。このソケット・プロバイダは、TCPによってバッキングされるDatagramSocketのインスタンスを作成します。WKA機能とともに使用するTCMPは(マルチキャストを無効化)、UDPを必要とせずにTCPを介して全面的に機能します。


注意:

WKA機能を併用せずにこのソケット・プロバイダを使用すると(マルチキャストを有効化)、すべてのユニキャスト通信にTCPが使用されます。マルチキャストは、グループベースの通信に使用されます。

TCPソケット・プロバイダでは、クラスタ・メンバーのペアごとに最大で2つのTCP接続を使用します。このTCPトラフィックは、ブロックしないNIOベースのソケットを使用してすべて管理されるので、トラフィック管理用のスレッドが別に追加されることはありません。したがって、既存のTCMPスレッドですべての接続を扱います。これらの接続は要求に応じて使用され、なんらかの理由で切断されると、必要に応じて自動的に再度開放されます。送信/受信の競合の低減とパフォーマンスの顕著な向上を図るために、2つの接続が使用されます。TCMPでは、信頼できるプロトコルを使用していることをほとんど認識していないので、保証済の配信とフロー制御を引き続き管理しています。

TCPソケット・プロバイダを指定するには、オペレーション・オーバーライド・ファイルを編集して、tcpの値を指定した<socket-provider>要素を追加します。例:

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <unicast-listener>
         <socket-provider system-property="tangosol.coherence.socketprovider">tcp
         </socket-provider>
      </unicast-listener>
   </cluster-config>
</coherence>

オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.socketproviderシステム・プロパティを使用してこのソケット・プロバイダを指定できます。例:

-Dtangosol.coherence.socketprovider=tcp

10.10.2 SDPソケット・プロバイダの使用

SDPソケット・プロバイダは、JVMおよび基礎となるネットワーク・スタックでSDPがサポートされている場合に、可能であれば常にSDPベースのソケットを生成するソケット・プロバイダです。このソケット・プロバイダは、SDPによってバッキングされるDatagramSocketのインスタンスを作成します。WKA機能とともに使用するTCMPは(マルチキャストを無効化)、UDPを必要とせずにSDPを介して全面的に機能します。


注意:

WKA機能を併用せずにこのソケット・プロバイダを使用すると(マルチキャストを有効化)、すべてのユニキャスト通信にSDPが使用されます。マルチキャストは、グループ・ベースの通信に使用されます。

SDPソケット・プロバイダを指定するには、オペレーション・オーバーライド・ファイルを編集して、sdpの値を指定した<socket-provider>要素を追加します。例:

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <unicast-listener>
         <socket-provider system-property="tangosol.coherence.socketprovider">sdp
         </socket-provider>
      </unicast-listener>
   </cluster-config>
</coherence>

オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.socketproviderシステム・プロパティを使用してこのソケット・プロバイダを指定できます。例:

-Dtangosol.coherence.socketprovider=sdp

10.10.3 SSLソケット・プロバイダの使用

SSLソケット・プロバイダは、SSLで保護したソケットのみを生成するソケット・プロバイダです。このソケット・プロバイダは、SSL/TCPまたはSSL/SDPによってバッキングされるDatagramSocketのインスタンスを作成します。マルチキャスト・ソケットに対してはSSLがサポートされていないので、このプロバイダでTCMPが機能するためにはWKA機能(マルチキャストを無効化)を使用する必要があります。

デフォルトのSSL構成を使用すると、信頼できるすべてのピアが単一のJKSキーストアにあるピア信頼に基づいて、双方向のSSL接続を容易に構成できます。より詳細な構成を別のアイデンティティ・マネージャおよびトラスト・マネージャで定義することで、認証局による信頼の検証が可能になります。TCMPの下で機能するSSLの構成方法と使用方法の詳細は、『Oracle Coherenceの保護』を参照してください。