I was recently working with a client to roll-out some WCF web services to BizTalk 2010 which access an Oracle database to facilitate the query (also using the WCF-OracleDb adapter). As expected, we were getting some pretty serious latency issues (1-2 seconds per request) as BizTalk is tuned for throughput and not low-latency. This, however, is not really an acceptable solution for web services.
To fix this, we needed to adjust some BizTalk tuning parameters to improve the latency. Specifically, we looked at the polling interval for messages on a given host. By default, it is set a 500 ms which means we’ll most likely have a MINIMUM of .5 seconds to process the request and most likely more as the message is sent to the orchestration, to the WCF-OracleDb adapter, and then back to the orchestration.
We decided to create a new BizTalk low latency in-process host to accomodate our web services. Fortunately for us, BizTalk 2010 makes it even easier to set some of the previously registry-based on inaccessible tuning parameters. After creating our host and host instances, it was pretty straight-forward:
- Open the Admin console, right-click on the BizTalk group and select settings
- Under the Hosts node, we selected our low latency host from the drop-down
- Now, under the Polling intervals we set both Messaging and Orchestration to 50 ms instead of 500 ms
- A better practice would be to have split receive, process, and send hosts and set the polling more specifically. This was not required in our case.
- After selecting the host in the bindings (orchestration and send ports, not needed for the isolated receive port) and restarting we got the average response time down to 300 ms which puts us at the mercy of the Oracle databases response time.
We also adjusted the internal message queue size for the host to ensure more messages can be kept in memory for even lower latency.
Take a look at this article for more specific details.