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に設定し、式を使用してルールパラメーターを構成します。式は、TCP ペイロードの senderCompid フィールドが見つかるはずの部分を抽出し、結果の文字列を区切り文字に基づいて名前と値のリストに型キャストし、SenderCompid フィールドの値 (タグ 49) を次のように抽出する式でなければなりません。

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

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

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

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 の場合、カウントはゼロ ( 0) から始まるため、アプライアンスはフィールドの (n+1) <sup>th</sup> インスタンスの値を抽出します。

パーシスタンスの設定に使用できるルールの他の例を以下に示します。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バイトストリームの名前と値のペアに基づいて規則に基づくパーシステンスを構成する

この記事の概要