- はじめに
- 利用可能なインターセプター
- 静的メンバーシップ
- 属性
- 共通属性
- org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor 属性
- org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor 属性
- org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor 属性
- org.apache.catalina.tribes.group.interceptors.TcpFailureDetector 属性
- org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor 属性
- org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor 属性
- org.apache.catalina.tribes.group.interceptors.EncryptInterceptor 属性
- ネストされたコンポーネント
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です。 |
performSendTest | true に設定されている場合、疑わしいノードにテストメッセージを送信します。デフォルトは true です。 |
performReadTest | true に設定されている場合、送信されたテストメッセージの応答を読み取ります。デフォルトは false です。注: performSendTest が false の場合、この属性は効果がありません。 |
readTestTimeout | 疑わしいノードへの読み取りテストを実行する際に使用するタイムアウトをミリ秒単位で指定します。デフォルトは5000です。 |
removeSuspectsTimeout | removeSuspects から削除されるまでの最大時間(秒単位)。removeSuspects のメンバーは、removeSuspectsTimeout の経過後に自動的に削除されます。負の値を指定した場合、removeSuspects のメンバーは、実際に消失するまで削除されません。この属性が指定されていない場合、デフォルトの300秒(5分)が使用されます。 |
org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor 属性
属性 | 説明 |
---|---|
interval | useThread == true の場合、pingメッセージの送信間隔を定義します。デフォルトは1000ミリ秒です。 |
useThread | pingメッセージ送信用のスレッドを開始するかどうかのフラグ。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
を使用する場合、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} |