この章の内容は次のとおりです。
<flow-control>
要素と<traffic-jam>
要素を使用して制御します。packet-publisher
が検出すると、パケット・スピーカーはネットワークにパケットを送信します。親トピック: Coherenceクラスタの使用
TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジの利用や、地理的に分散したクラスタにある低帯域幅で長待機時間のセグメントに対する許容差の追加が可能です。Coherenceには出荷時の初期設定の構成があります。TCMP属性の中には、実行時に動的に自己構成できるものがありますが、デプロイ目的でそれらをオーバーライドすることやロックダウンすることも可能です。TCMPの動作は、パフォーマンスのテストに基づいて変更する必要があります。Coherenceには、ネットワーク上でのTCMPのデータ転送パフォーマンスを評価するために使用できるデータグラム・テストが用意されています。Oracle Coherenceの管理のネットワーク・パフォーマンス・テストの実行を参照してください。
TCMPデータ転送の動作は、tangosol-coherence-override.xml
ファイルの中で、<packet-publisher>
、<packet-speaker>
、<incoming-message-handler>
および<outgoing-message-handler>
の各要素を使用して構成します。オペレーション構成の要素を参照してください。
TCMPの理解も参照してください。
親トピック: TCMPの動作のチューニング
<flow-control>
要素と<traffic-jam>
要素を使用して制御します。パケットの障害を最小限に抑えながら最大限のスループットを得るうえで、これらの要素は効果的です。ネットワークが低速な場合やパケット・バッファが小さい場合は、ここで説明する速度調整設定を変更することが普通です。この項には次のトピックが含まれます:
フロー制御を使用して、所定のクラスタ・メンバーへのパケット転送速度を動的に調整します。この調整は、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>
親トピック: データ転送速度の調整
フロー制御を無効にするには、オペレーション・オーバーライド・ファイルを編集して、<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>
親トピック: データ転送速度の調整
パケット・トラフィック混雑とは、クライアント・スレッドによりエンキューされ、パブリッシャがネットワークへの送信を待機している保留パケットの数が、パケット・パブリッシャによって許容不可と判断されるレベルに達した状態です。<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>
親トピック: データ転送速度の調整
<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>
親トピック: TCMPの動作のチューニング
否定応答(NACK)パケットは、パケットが正しく受信されていないことを示すものなので、そのパケットは再転送されます。受信したパケットの順序を検査してパケットの損失があることがわかると、否定応答が送信されます。否定応答があると、パブリッシャの再送信間隔に関係なく、はるかに早いタイミングでパケットが再送信されます。否定応答の無効化を参照してください。
この項には次のトピックが含まれます:
パケットの再送信間隔は、送信に対応する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>
親トピック: パケットの再転送動作の変更
パケットの再送信タイムアウト間隔は、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>
親トピック: パケットの再転送動作の変更
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>
親トピック: パケットの再転送動作の変更
この項には次のトピックが含まれます:
パケット・バッファのサイズは、次の設定を使用して、パケット数またはバイト数に基づいて構成できます。
<maximum-packets>
- データグラム・ソケットに対してソケット自身のサイズを調整してバッファすることを要求するパケット数を(構成済のパケット・サイズに基づいて)指定します。詳細は、java.net.SocketOptions#SO_SNDBUF
プロパティおよびjava.net.SocketOptions#SO_RCVBUF
プロパティを参照してください。基礎となるソケットの実装で一定のサイズ以上をサポートできない場合、実際のバッファ・サイズは小さくなることがあります。パケットの最大サイズの調整を参照してください。
<size>
- 基礎となるソケット・バッファに要求されるサイズをバイト単位で指定します。
オペレーティング・システムでは、指定されたパケット・バッファ・サイズを参考値として扱うにすぎず、指定の量を割り当てることは要求されません。割り当てられた領域が要求量よりも少ないと、Coherenceでは警告が発行され、領域が制限されたバッファを使用して稼動を継続するので、十分なパフォーマンスが得られない可能性があります。Oracle Coherenceの管理のソケット・バッファ・サイズを参照してください。
領域が大きいインバウンド・バッファを使用すると、Javaのガベージ・コレクタに起因するJVMの一時停止からCoherenceのネットワーク層を保護するうえで効果的です。JVMが一時停止している間、Coherenceではどのインバウンド・ソケットからもパケットをデキューできません。パケット・バッファのオーバーフローを引き起こすほど一時停止時間が長いと、発信元ノードがパケット消失を検出してパケットを再送信する必要があるため、パケットの受信が遅延します。
親トピック: パケット・バッファのサイズの構成
アウトバウンド・パケット・バッファは、パケットを転送するときにパケット・パブリッシャで使用します。バッファのサイズを変更するときは、スループットと待機時間の両面からパフォーマンスを評価する必要があります。バッファのサイズを大きくするとスループットが増加し、逆に小さくすると待機時間が短くなります。
アウトバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、<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>
親トピック: パケット・バッファのサイズの構成
マルチキャスト・リスナーとユニキャスト・リスナーはそれぞれ専用のインバウンド・パケット・バッファを備えています。
インバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、(<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>
親トピック: パケット・バッファのサイズの構成
ノート:
Microsoft Windowsで1024バイトを超えるパケット・サイズを指定する場合、転送速度が最適になるようにレジストリ設定を調整する必要があります。COHRENCE_HOME
/bin/optimize.reg
登録ファイルにはレジストリ設定が保存されています。Oracle Coherenceの管理のデータグラム・サイズ(Microsoft Windows)を参照してください。
パケットのサイズは<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>
親トピック: TCMPの動作のチューニング
packet-publisher
が検出すると、パケット・スピーカーはネットワークにパケットを送信します。ノート:
パケット・スピーカーは、データ通信のデフォルト・プロトコルであるTCMP/TMBには使用されません。
パケットの負荷が比較的低い場合、スピーカーの操作をパブリッシャのスレッドで実行すると効率が向上することがあります。パケットの負荷が高い場合、スピーカーを使用すると、スピーカーによってネットワーク上でパケットを送信しながらパブリッシャはパケットの準備を続けることができます。
パケット・スピーカーを構成するには、<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>
親トピック: TCMPの動作のチューニング
<incoming-message-handler>
要素で受信メッセージ・ハンドラを構成します。この項には次のトピックが含まれます:
親トピック: TCMPの動作のチューニング
<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>
親トピック: 受信メッセージ・ハンドラの構成
受信メッセージ・ハンドラに対して、否定応答を無効化できます。無効にすると、パケットが正しく受信されていなくても、ハンドラはそのパケットの送信側に何も通知しません。この場合、パケットの送信側は、指定の再送信タイムアウト間隔の経過を待ったうえでパケットを再送信します。パケットの再転送動作の変更を参照してください。
否定応答を無効にするには、オペレーション・オーバーライド・ファイルを編集して、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>
親トピック: 受信メッセージ・ハンドラの構成
フィルタは、オペレーション・デプロイメント・ディスクリプタで定義され、tangosol-coherence-override.xml
ファイル内で明示的に有効化されている必要があります。
ノート:
フィルタは、すべてのメンバーで使用するか、まったく使用しないかのいずれかにします。一方のクラスタ・メンバーがフィルタを使用しているのにもう一方が使用していない場合、メッセージ・プロトコルに障害が発生します。フィルタを構成する前に、クラスタ全体を停止してください。
この項には次のトピックが含まれます:
圧縮フィルタはjava.util.zip
パッケージに基づいており、メッセージ・コンテンツを圧縮してネットワークの負荷を軽減します。フィルタは、CPUの使用率に余裕があり、ネットワーク帯域幅が不十分な場合に便利です。圧縮フィルタは、com.tangosol.net.CompressionFilter
クラスで定義され、<filters>
ノード内のオペレーション・デプロイメント・ディスクリプタで宣言されます。圧縮フィルタの構成済名はgzip
です。これは特定のサービスに対してフィルタを有効化する場合またはすべてのサービスに対してフィルタを有効化する場合に使用されます。
この項には次のトピックが含まれます:
特定のサービスに対して圧縮フィルタを有効化するには、そのサービスの定義内に<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>
親トピック: 圧縮フィルタの使用
すべてのサービスに対して圧縮フィルタを有効化するには、<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>
親トピック: 圧縮フィルタの使用
圧縮フィルタには、フィルタの動作を構成できるパラメータが含まれています。表9-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>
表9-1 圧縮フィルタのパラメータ
パラメータ名 | 説明 |
---|---|
buffer-length |
圧縮バッファ長をバイト単位で指定します。有効な値は、正の整数またはゼロです。デフォルト値は0です。 |
level |
圧縮レベルを指定します。有効な値は次のとおりです。
|
strategy |
圧縮戦略を指定します。有効な値は次のとおりです。
|
親トピック: 圧縮フィルタの使用
カスタム・ネットワーク・フィルタを必要に応じて作成できます。カスタム・フィルタは、com.tangosol.io.WrapperStreamFactory
インタフェースを実装する必要があります。WrapperStreamFactory
インタフェースにより、入力(受信メッセージ)または出力(送信メッセージ)でラップ(フィルタリング)されるストリームが提供され、元のストリームをラップするストリーム・バックが見込まれます。これらのメソッドは、メッセージの受信および送信のたびにコールされます。
この項には次のトピックが含まれます:
カスタム・フィルタは、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>
親トピック: カスタム・ネットワーク・フィルタの使用
特定のサービスに対してカスタム・フィルタを有効化するには、そのサービスの定義内に<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>
親トピック: カスタム・ネットワーク・フィルタの使用
すべてのサービスに対してカスタム・フィルタをグローバルに有効化するには、<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>
親トピック: カスタム・ネットワーク・フィルタの使用
<unicast-listener>
要素でユニキャスト・リスナー向けに構成します。この項には次のトピックが含まれます:
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="coherence.socketprovider">tcp </socket-provider> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.socketprovider
システム・プロパティを使用してこのソケット・プロバイダを指定できます。たとえば:
-Dcoherence.socketprovider=tcp
親トピック: TCMPソケット・プロバイダ実装の変更
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="coherence.socketprovider">sdp </socket-provider> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.socketprovider
システム・プロパティを使用してこのソケット・プロバイダを指定できます。たとえば:
-Dcoherence.socketprovider=sdp
親トピック: TCMPソケット・プロバイダ実装の変更
SSLソケット・プロバイダは、SSLで保護したソケットのみを生成するソケット・プロバイダです。このソケット・プロバイダは、SSL/TCPまたはSSL/SDPによってバッキングされるDatagramSocket
のインスタンスを作成します。マルチキャスト・ソケットに対してはSSLがサポートされていないので、このプロバイダでTCMPが機能するためにはWKA機能(マルチキャストを無効化)を使用する必要があります。
デフォルトのSSL構成を使用すると、信頼できるすべてのピアが単一のJKSキーストアにあるピア信頼に基づいて、双方向のSSL接続を容易に構成できます。より詳細な構成を別のアイデンティティ・マネージャおよびトラスト・マネージャで定義することで、認証局による信頼の検証が可能になります。Oracle Coherenceの保護のSSLを使用したTCMP通信の保護を参照してください。
親トピック: TCMPソケット・プロバイダ実装の変更