Citrix ADC

ユースケース2:TCPバイトストリームの名前と値のペアに基づいてルールベースの永続性を構成する

プロトコルによっては、名前/値のペアを TCP バイトストリームで送信するものもあります。この例の TCP バイトストリームのプロトコルは、財務情報交換 (FIX) プロトコルです。XML以外の実装では、FIXプロトコルにより、ネットワークを介して通信する2つのホストが、名前と値のペア(「FIXフィールド」と呼ばれる)のリストとしてビジネスまたは取引関連の情報を交換できます。フィールドの形式は<tag>=<value><delimiter>です。この従来のタグ値形式により、FIXプロトコルはユースケースに最適です。

FIXフィールドのタグは、フィールドの意味を示す数値識別子です。この例では、

  • タグ 35 はメッセージタイプを示します。
  • 等号の後の値は、指定されたタグの特定の意味を保持し、データ型に関連付けられています。タグ 35 の値が A の場合は、メッセージがログオンメッセージであることを示します。
  • 区切り文字は、印刷されない「ヘッダーの開始」(SOH) ASCII 文字 (0x01) で、キャレット記号 (^) です。
  • 各フィールドには名前も割り当てられます。タグ 35 のフィールドは MsgType フィールドです。

ログオンメッセージの例を次に示します。

8=FIX.4.1 9=61 35=A 49=INVMGR 56=BRKR 34=1 52=20000426-12:05:06 98=0 108=30 10=157

上記のようなタグ値リストのパーシステンスタイプの選択は、リストから特定の文字列を抽出するためのオプションによって決まります。トークンベースの永続性メソッドでは、ペイロードから抽出するトークンのオフセットと長さを指定する必要があります。FIX プロトコルでは、特定のフィールドのオフセットとその値の長さがメッセージによって異なる可能性があるため、これを行うことはできません。この変化は、メッセージタイプ、前のフィールド、および前の値の長さによって異なります。また、カスタムフィールドが定義されているかどうかによって、実装によっても異なります。このようなバリエーションにより、特定のフィールドの正確なオフセットを予測したり、トークンとして抽出される値の長さを指定したりすることは不可能になります。この場合、ルールベースの永続性が優先されるパーシステンスタイプです。

仮想サーバー fixlb1 が、Fix 対応アプリケーションのインスタンスをホストしているサーバーのファームへの TCP 接続の負荷分散を行うと仮定します。メッセージを送信する会社を識別する SenderCompid フィールドの値に基づいて、接続の永続性を構成します。この FIX フィールドのタグは 49 です (前述のログオンメッセージの例に示されています)。

ロードバランシング仮想サーバーのルールベースの永続性を構成するには、ロードバランシング仮想サーバーのパーシステンスタイプを RULE に設定し、ルールパラメータに式を設定します。式は、SenderCompID フィールドが見つかると予想される TCP ペイロードの一部を抽出し、結果の文字列を区切り文字に基づいて名前/値リストに型キャストしてから、次のように SenderCompID フィールド(タグ 49)の値を抽出する式である必要があります。

set lb vserver fixlb1 -persistenceType RULE -rule "CLIENT.TCP.PAYLOAD(300).TYPECAST_NVLIST_T('=','^').VALUE("\49\")"

注:これはCLIコマンドであるため、式ではバックスラッシュ文字が使用されています。構成ユーティリティを使用している場合は、バックスラッシュ文字を入力しないでください。

クライアントが、前述のログオンメッセージの例の名前と値のリストを含むFIXメッセージを送信する場合、式は値 INVMGR を抽出し、Citrix ADC アプライアンスはこの値に基づいて永続性セッションを作成します。

PAYLOAD () 関数の引数は、関数によって抽出された文字列に SenderCompID フィールドを含めるために必要な大きさにすることができます。オプションで、フィールドの値を抽出するときにアプライアンスで大文字と小文字を区別する場合は、SET_TEXT_MODE(IGNORECASE)関数を使用し、抽出された値のハッシュに基づいて永続セッションを作成するために HASH 関数を使用できます。次の式では、SET_TEXT_MODE (IGNORECASE) 関数と HASH 関数を使用します。

CLIENT.TCP.PAYLOAD(500).TYPECAST_NVLIST_T('=','^').SET_TEXT_MODE(IGNORECASE).VALUE("49").HASH

次に、FIX 接続の永続性を構成するために使用できる規則の例を示します (<tag>は、値を抽出するフィールドのタグに置き換えます)。

  • TCP ペイロードの最初の 300 バイトの FIX フィールドの値を抽出するには、CLIENT.TCP.PAYLOAD(300).BEFORE_STR(“^”).AFTER_STR(“<tag>=”)式を使用できます。
  • オフセット 80 で 20 バイトの長さの文字列を抽出するには、文字列の名前値リストにキャストし、目的のフィールドの値を抽出するには、式 CLIENT.TCP.PAYLOAD(100).SUBSTR(80,20).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>“)を使用します。
  • TCP ペイロードの最初の 100 バイトを抽出するには、文字列を名前/値リストにキャストし、目的のフィールドの 3 番目の出現の値を抽出するには、式CLIENT.TCP.PAYLOAD(100).TYPECAST_NVLIST_T(‘=’,’^’).VALUE(“<tag>“,2)を使用します。 注: VALUE()関数に渡される2番目の引数が nの場合、アプライアンスはフィールドの (n+1) <sup>th</sup> インスタンスの値を抽出します。これは、カウントがゼロ( 0)。

次に、永続性の設定に使用できる規則の例を示します。FIX プロトコルを介して送信されるデータを評価できるのは、ペイロードベースの式だけです。その他の式は、より低いネットワーキングプロトコルに基づいてパーシステンスを設定するためのより一般的な式です。

  • CLIENT.TCP.PAYLOAD(100)
  • CLIENT.TCP.PAYLOAD(100).HASH
  • CLIENT.TCP.PAYLOAD(100).SUBSTR(5,10)
  • CLIENT.TCP.SRCPORT
  • CLIENT.TCP.DSTPORT
  • CLIENT.IP.SRC
  • CLIENT.IP.DST
  • CLIENT.IP.SRC.GET4
  • CLIENT.IP.DST.GET4
  • CLIENT.ETHER.SRCMAC.GET6
  • CLIENT.ETHER.DSTMAC.GET5
  • CLIENT.VLAN.ID
ユースケース2:TCPバイトストリームの名前と値のペアに基づいてルールベースの永続性を構成する