Forum Discussion

ak_5262's avatar
ak_5262
Icon for Nimbostratus rankNimbostratus
Jan 11, 2010

Using Minimum Lower Layer Protocol with BigIp

Hi Gurus,

 

 

Is there an option to configure BigIp for protocols such as Minimum Lower Layer Protocol (MLLP) where connection is kept open permanently? This is a protocol used for Healthcare system (e.g. HL7). I believe it's possible to configure transient connections with BigIp but we are looking for cases where connection is alive for entire lifecycle of client and server. Please let me know if it's possible to do this.

 

 

Thanks in advance

 

Anil
  • Hey Anil, thanks for the post: I just took a quick look at some of the HL7 specifications, and it looks like you'll be able to use BigIP for this assuming that the endpoints are using TCP/IP as the transport (from what I see the rest of the HL7/MLLP stack is abstracted from transport, ala SOAP).

     

     

    Also, it looks like the payloads are well defined and fairly simple to identify so depending upon what you're trying to do it looks entirely possible to use some iRules magic on this protocol as well - you'll just be relegated to layer 4 commands and events (see the FIX protocol example here on DevCentral).

     

     

    I hope this helps. This is an interesting use case so please post back with any further questions, results, etc.

     

     

    -Matt
  • Oh, I forgot to mention that you can set the tcp timeout values (see the tcp and performance layer 4 profiles) for protocols like this, so you should be able to tune this for your specific application.

     

    -Matt
  • Hi Matt,

     

     

    Thanks for your response. It's very helpful and I appreciate it. It looks like we can set the timeout value to "indefinite" to establish a permanent connection. However, in case of a server failure, client would need to reissue the request to establish connection with different server. I have a follow-up question -

     

     

    Is it possible to establish a rule such that from client to BigIp there's only one connection (permanent) but BigIp makes permanent connections to multiple server instances at the same time? In other words, when a client makes a request, it will be served by multiple servers and each connection from BigIp to server is also permanent. In case one of the server fails, the client would continue to be served by another server instance. Please let me know if this makes sense or if you need more info.

     

     

    regards
  • This sounds very much like Message Based Load Balancing (MBLB), and this looks consistent with what I've seen of the HL7 spec...as of now I don't think this is possible, at least as you describe it. From the sounds of it you'll definitely be looking at a reconnect if a server dies, as there's no real way that I know of to replay a session like that to a server that has died.

     

     

    Hopefully this will work for you...

     

     

    -Matt
  • Thanks Matt. We are still looking into it. I had one other general question..

     

     

    Is it possible to use BigIp as a proxy server and route the request to Ip address that's sent as part of the request? In other words, instead of storing the IP addresses for target servers in BigIP, they'll be sent as part of the request and a rule will be configured to read this Ip address and then route request to it. Any ideas if it is possible to create such rules with BigIp.

     

     

    Thanks again for all your help.

     

    regards
  • Yep, you could do that. This example shows a cookie being inserted to do this, but could easily be adapted for a server-generated cookie or URI string:

     
     when HTTP_REQUEST { 
       if { [HTTP::cookie exists "myCookie"] { 
         set poolName [lindex [HTTP::cookie myCookie] 0] 
         set serverName [lindex [HTTP::cookie myCookie] 1] 
         set portNum [lindex [HTTP::cookie myCookie] 2] 
         if { [catch { use pool $poolName member $serverName $portNum }] } { 
           pool myPool 
         } else { pool $poolName member $serverName $portNum } 
       } 
     } 
      
     when HTTP_RESPONSE { 
       HTTP::cookie insert name myCookie value [LB::server] 
     }