Channel Interceptor オブジェクト

目次

はじめに

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 です。注: performSendTestfalse の場合、この属性は効果がありません。
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スループット統計を報告するメッセージ数の間隔を定義します。レポートは INFO レベルで org.apache.juli.logging.LogFactory.getLog(ThroughputInterceptor.class) ロガーに記録されます。デフォルト値は 10000 メッセージごとにレポートすることです。

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

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

TcpFailureDetector を使用する場合、EncryptInterceptorTcpFailureDetector の**前**にインターセプターチェーンに挿入する**必要があります**。これは、クラスタメンバーを検証する際に、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}