ADC

Anwendungsfall 2: Regelbasierten Persistenz basierend auf einem Name-Wert-Paar in einem TCP-Byte-Stream konfigurieren

Einige Protokolle übertragen Name-Wert-Paare in einem TCP-Bytestream. Das Protokoll im TCP-Bytestream in diesem Beispiel ist das FIX-Protokoll (Financial Information eXchange). In der Nicht-XML-Implementierung ermöglicht das FIX-Protokoll zwei Hosts, die über ein Netzwerk kommunizieren, geschäftliche oder handelsbezogene Informationen als Liste von Name-Wert-Paaren (genannt “FIX-Felder”) auszutauschen. Das Feldformat ist<tag>=<value><delimiter>. Dieses traditionelle Tag-Value-Format macht das FIX-Protokoll ideal für diesen Anwendungsfall.

Das Tag in einem FIX-Feld ist ein numerischer Bezeichner, der die Bedeutung des Feldes angibt. Im Beispiel;

  • Das Tag 35 gibt den Nachrichtentyp an.
  • Der Wert nach dem Gleichheitszeichen hat eine bestimmte Bedeutung für das angegebene Tag und ist einem Datentyp zugeordnet. Der Wert A für das Tag 35 gibt an, dass es sich bei der Nachricht um eine Anmeldenachricht handelt.
  • Das Trennzeichen ist das nicht druckende Start of Header (SOH) ASCII-Zeichen (0x01), welches das Caret-Symbol (^) ist.
  • Jedem Feld wird außerdem ein Name zugewiesen. Das Feld mit Tag 35 ist das MsgType-Feld.

Es folgt ein Beispiel für eine Anmeldemeldung.

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

Ihre Wahl des Persistenztyps für eine Tag-Werteliste wie die oben gezeigte hängt von den Optionen ab, die Ihnen zum Extrahieren einer bestimmten Zeichenfolge aus der Liste zur Verfügung stehen. Token-basierte Persistenzmethoden erfordern, dass Sie den Offset und die Länge des Tokens angeben, das Sie aus der Nutzlast extrahieren möchten. Das FIX-Protokoll erlaubt dies nicht, da der Offset eines bestimmten Feldes und die Länge seines Wertes von Nachricht zu Nachricht variieren können. Diese Variation hängt vom Nachrichtentyp, den vorhergehenden Feldern und den Längen der vorhergehenden Werte ab. Es variiert auch je nach Implementierung von einer zur anderen, je nachdem, ob benutzerdefinierte Felder definiert wurden. Solche Variationen machen es unmöglich, den exakten Versatz eines bestimmten Feldes vorherzusagen oder die Länge des Wertes anzugeben, der als Token extrahiert werden soll. In diesem Fall ist die regelbasierte Persistenz der bevorzugte Persistenztyp.

Angenommen, ein virtueller Server fixlb1 ermöglicht den Lastenausgleich TCP-Verbindungen zu einer Farm von Servern, die Instanzen einer Fix-fähigen Anwendung hosten. Sie möchten die Persistenz für Verbindungen auf der Grundlage des Wertes des SenderCompid-Feldes konfigurieren, in dem das Unternehmen identifiziert wird, das die Nachricht sendet. Das Tag für dieses FIX-Feld ist 49 (im Beispiel der früheren Anmeldemeldung angezeigt).

Um die regelbasierte Persistenz für den virtuellen Lastausgleichsserver zu konfigurieren, legen Sie den Persistenztyp für den virtuellen Lastausgleichsserver auf RULE fest und konfigurieren Sie den Regelparameter mit einem Ausdruck. Bei dem Ausdruck muss es sich um einen Ausdruck handeln, der den Teil der TCP-Payload extrahiert, in dem Sie das senderCompID-Feld erwarten, die resultierende Zeichenfolge anhand der Trennzeichen typisiert und dann den Wert des SenderCompID-Felds (Tag 49) wie folgt extrahiert:

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

Hinweis: In dem Ausdruck wurden Backslash-Zeichen verwendet, da es sich um einen CLI-Befehl handelt. Wenn Sie das Konfigurationsprogramm verwenden, geben Sie die umgekehrten Schrägstriche nicht ein.

Wenn der Client eine FIX-Nachricht sendet, die die Namenwerteliste im Beispiel einer früheren Anmeldemeldung enthält, extrahiert der Ausdruck den Wert INVMGR, und die NetScaler-Appliance erstellt eine Persistenzsitzung, die auf diesem Wert basiert.

Das Argument für die Funktion PAYLOAD () kann so groß sein, wie Sie es für notwendig halten, um das Feld SenderCompid in die von der Funktion extrahierte Zeichenfolge aufzunehmen. Optional können Sie die Funktion SET_TEXT_MODE (IGNORECASE) verwenden, wenn die Appliance den Fall ignoriert, wenn Sie den Wert des Felds extrahieren, und die HASH-Funktion zum Erstellen einer Persistenzsitzung basierend auf einem Hash des extrahierten Wertes. Der folgende Ausdruck verwendet die Funktionen SET_TEXT_MODE (IGNORECASE) und HASH:

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

Im Folgenden finden Sie weitere Beispiele für Regeln, die Sie verwenden können, um die Persistenz für FIX-Verbindungen zu konfigurieren ( <tag> ersetzen Sie sie durch das Tag des Felds, dessen Wert Sie extrahieren möchten):

  • Um den Wert eines beliebigen FIX-Feldes in den ersten 300 Byte der TCP-Payload zu extrahieren, können Sie den Ausdruck CLIENT.TCP.PAYLOAD (300) .BEFORE_STR („^“) .AFTER_STR (“ =“) verwenden.<tag>
  • Verwenden Sie den Ausdruck CLIENT.TCP.PAYLOAD (100) .SUBSTR (80,20) .TYPECAST_NVLIST_T (‘=’, ‘^’) .VALUE (“ „), um eine Zeichenfolge zu extrahieren, die bei Offset 80 20 Byte lang ist, die Zeichenfolge in eine Name-Wert-Liste umzuwandeln und dann den Wert des gewünschten Felds zu extrahieren.<tag>
  • Verwenden Sie den Ausdruck CLIENT.TCP.PAYLOAD (100) .TYPECAST_NVLIST_T (‘=’, ‘^’) .VALUE (“ „,2), um die ersten 100 Byte der TCP-Payload zu extrahieren, die Zeichenfolge in eine Name-Wert-Liste umzuwandeln und den Wert des dritten Vorkommens des gewünschten Felds zu extrahieren.<tag> Hinweis: Wenn das zweite Argument, das an die VALUE () -Funktion übergeben wird, n ist, extrahiert die Appliance den Wert der (n+1) <sup>th</sup> -Instanz des Felds, da die Zählung bei Null ( 0) beginnt.

Im Folgenden finden Sie weitere Beispiele für Regeln, mit denen Sie die Persistenz konfigurieren können. Nur die nutzungsbasierten Ausdrücke können Daten auswerten, die über das FIX-Protokoll übertragen werden. Die anderen Ausdrücke sind allgemeinere Ausdrücke für die Konfiguration der Persistenz auf der Grundlage niedrigerer Netzwerkprotokolle.

  • 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
Anwendungsfall 2: Regelbasierten Persistenz basierend auf einem Name-Wert-Paar in einem TCP-Byte-Stream konfigurieren

In diesem Artikel