チャネルインターセプターオブジェクト

目次

はじめに

Apache Tribesは、メッセージとメンバーシップ通知の両方をインターセプトするインターセプターアーキテクチャをサポートしています。このアーキテクチャにより、ロジックの分離が可能になり、非常に便利な機能追加への道が開かれます。

利用可能なインターセプター

  • org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
  • org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor
  • org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor
  • org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator
  • org.apache.catalina.tribes.group.interceptors.OrderInterceptor
  • org.apache.catalina.tribes.group.interceptors.SimpleCoordinator
  • org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor
  • org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor
  • org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor
  • org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor
  • org.apache.catalina.tribes.group.interceptors.GzipInterceptor
  • org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor
  • org.apache.catalina.tribes.group.interceptors.EncryptInterceptor

静的メンバーシップ

動的なディスカバリーに加えて、Apache Tribesは、メンバーシップ検証付きの静的メンバーシップもサポートしています。これを実現するには、org.apache.catalina.tribes.group.interceptors.TcpFailureDetectorインターセプターの後にorg.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptorを追加します。StaticMembershipInterceptor内には、追加したい静的メンバーを追加できます。TcpFailureDetectorは、静的メンバーのヘルスチェックを実行し、クラッシュも監視するため、自動的に検出されるメンバーと同じレベルの通知メカニズムを持ちます。

     <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
       <LocalMember className="org.apache.catalina.tribes.membership.StaticMember"
                  domain="staging-cluster"
                  uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="5678"
                  securePort="-1"
                  host="tomcat01.mydomain.com"
                  domain="staging-cluster"
                  uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
     </Interceptor>

属性

共通属性

属性説明
className必須、デフォルト値はありません
optionFlagメッセージのオプションフラグに応じて特定のメッセージでインターセプターをトリガーしたい場合は、ここでインターセプターのフラグを設定できます。デフォルト値は0で、このインターセプターはすべてのメッセージでトリガーされます。

org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor 属性

属性説明
domainこのインターセプターが受け入れる論理クラスタドメイン。2つの異なるタイプの値が可能です。
1. 「staging-domain」や「tomcat-cluster」のような通常の文字列値は、ISO-8859-1エンコーディングを使用してバイトに変換されます。
2. 文字列形式のバイト配列。例:{216,123,12,3}
logIntervalこの値は、異なるドメインからのメッセージのロギング間隔を示します。デフォルトは100で、100メッセージごとにログに記録することを意味します。

org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor 属性

属性説明
expireメモリにフラグメントを保持し、残りが到着するのを待つ時間。デフォルトは60000ミリ秒です。
maxSizeメッセージの最大サイズ(バイト単位)。メッセージサイズがこの値を超えると、このインターセプターはメッセージをフラグメント化して送信します。この値より小さい場合は、このインターセプターはメッセージをフラグメント化せずに1つのメッセージとして送信します。デフォルトは1024 * 100です。

org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor 属性

属性説明
optionFlagデフォルトおよびハードコードされた値は8 (org.apache.catalina.tribes.Channel.SEND_OPTIONS_ASYNCHRONOUS)です。ディスパッチャーはこの値でのみトリガーされます。Tribesによって事前定義されているためです。
alwaysSendディスパッチキューがいっぱいになった場合に実行する動作。true(デフォルト)の場合、メッセージは同期的に送信されます。falseの場合、エラーがスローされます。
maxQueueSizeディスパッチキューのサイズ(バイト単位)。デフォルト値は1024 * 1024 * 64 (64 MiB)です。キューがいっぱいになった場合のディスパッチキューの最大サイズを設定します。alwaysSendがtrueに設定されている場合は、メッセージが同期的に送信されます。フラグがfalseの場合は、エラーがスローされます。
maxThreadsこのプール内の最大スレッド数。デフォルトは10です。
maxSpareThreadsプールに保持するスレッド数。デフォルトは2です。
keepAliveTimeアイドル状態のスレッドが終了するまでの最大ミリ秒数。デフォルト値は5000(5秒)です。

org.apache.catalina.tribes.group.interceptors.TcpFailureDetector 属性

属性説明
connectTimeout疑わしいノードへのTCP接続を試行する際に使用するタイムアウトをミリ秒単位で指定します。デフォルトは1000です。
performSendTesttrueに設定されている場合、疑わしいノードにテストメッセージを送信します。デフォルトはtrueです。
performReadTesttrueに設定されている場合、送信されたテストメッセージの応答を読み取ります。デフォルトはfalseです。注:performSendTestがfalseの場合、この属性は効果がありません。
readTestTimeout疑わしいノードへの読み取りテストを実行する際に使用するタイムアウトをミリ秒単位で指定します。デフォルトは5000です。
removeSuspectsTimeoutremoveSuspectsからの削除の最大時間(秒単位)。removeSuspectsのメンバーは、removeSuspectsTimeout後に自動的に削除されます。負の値が指定された場合、removeSuspectsのメンバーは実際に消えるまで削除されません。属性が指定されていない場合は、デフォルトの300秒(5分)が使用されます。

org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor 属性

属性説明
intervaluseThread == trueの場合、pingメッセージを送信する間隔を定義します。デフォルトは1000ミリ秒です。
useThreadpingメッセージを送信するためのスレッドを開始するかどうかのフラグ。trueに設定した場合、このインターセプターはpingメッセージを送信するためのローカルスレッドを開始します。falseに設定した場合、チャネルのハートビートがpingメッセージを送信します。デフォルトはfalseです。

org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor 属性

属性説明
intervalスループット統計を報告するメッセージの間隔を定義します。レポートは、org.apache.juli.logging.LogFactory.getLog(ThroughputInterceptor.class)ロガーにINFOレベルで記録されます。デフォルト値は、10000メッセージごとに報告することです。

org.apache.catalina.tribes.group.interceptors.EncryptInterceptor 属性

EncryptInterceptorは、ノード間でセッションデータを運ぶチャネルメッセージに暗号化を追加します。

TcpFailureDetectorを使用する場合、EncryptInterceptorはインターセプターチェーンでTcpFailureDetectorに挿入する必要があります。これは、クラスターメンバーを検証する際、TcpFailureDetectorがインターセプターチェーンの残りの部分を使用せずに、チャネルデータを他のメンバーに直接書き込むためですが、受信側では、メッセージは引き続き(逆順で)チェーンを通過するためです。この非対称性のため、EncryptInterceptorは送信側ではTcpFailureDetectorに、受信側ではに実行する必要があります。そうしないと、メッセージが破損します。

属性説明
encryptionAlgorithm使用する暗号化アルゴリズム。モードとパディングを含みます。使用できる標準のJCA名については、https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.htmlを参照してください。EncryptInterceptorは現在、次のブロック暗号モードをサポートしています:CBC、OFB、CFB、およびGCM。キーの長さは、該当する場合は、使用する暗号化アルゴリズムの種類(たとえば、AES-128対AES-256)を指定します。デフォルトのアルゴリズムはAES/CBC/PKCS5Paddingです。
encryptionKey暗号化アルゴリズムで使用するキー。キーは、アルゴリズムに適した長さの16進数エンコードされたバイトとして指定する必要があります(たとえば、AES-128の場合は16バイト/32文字/128ビット、AES-256の場合は32バイト/64文字/256ビットなど)。

ネストされたコンポーネント

StaticMember 属性

LocalMember
静的クラスターグループのローカルメンバーである静的メンバー。

属性説明
className使用可能な実装は1つだけです:org.apache.catalina.tribes.membership.StaticMember
port設定する必要はありません。この属性の値は、クラスターレシーバーの設定から継承されます。
securePort設定する必要はありません。この属性の値は、クラスターレシーバーの設定から継承されます。
host設定する必要はありません。この属性の値は、クラスターレシーバーの設定から継承されます。
domainこの静的メンバーがクラスタメッセージをリッスンする論理クラスタドメイン。2つの異なるタイプの値が可能です。
1. 「staging-domain」や「tomcat-cluster」のような通常の文字列値は、ISO-8859-1エンコーディングを使用してバイトに変換されます。 2. 文字列形式のバイト配列。例:{216,123,12,3}
uniqueIdこの静的メンバーの一意のユニバーサルID。値は、次の形式で16バイトである必要があります
1. 文字列形式のバイト配列。例:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

Member
静的クラスターグループに追加する静的メンバー。

属性説明
className使用可能な実装は1つだけです:org.apache.catalina.tribes.membership.StaticMember
portこの静的メンバーがクラスタメッセージをリッスンするポート
securePortこの静的メンバーが暗号化されたクラスタメッセージをリッスンするセキュアポート。デフォルト値は-1です。この値は、メンバーがセキュアポートでリッスンしていないことを意味します。
hostこの静的メンバーがクラスタメッセージをリッスンするホスト(またはネットワークインターフェース)。3つの異なるタイプの値が可能です。
1. 「216.123.1.23」の形式のIPアドレス
2. 「tomcat01.mydomain.com」または「tomcat01」のようなホスト名。正しく解決できる限り
3. 文字列形式のバイト配列。例:{216,123,12,3}
domainこの静的メンバーがクラスタメッセージをリッスンする論理クラスタドメイン。2つの異なるタイプの値が可能です。
1. 「staging-domain」や「tomcat-cluster」のような通常の文字列値は、ISO-8859-1エンコーディングを使用してバイトに変換されます。
2. 文字列形式のバイト配列。例:{216,123,12,3}
uniqueIdこの静的メンバーの一意のユニバーサルID。値は、次の形式で16バイトである必要があります
1. 文字列形式のバイト配列。例:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}