Database servers typically have a TCP/IP stack that is optimized for longer running workloads servicing fewer web/application servers. Today’s data explosion challenges the traditional OLTP database architectures with the need for a higher number of web/application servers which are performing much smaller work loads – for instance there are millions of queries/day that are executed on a ecommerce website specializing in travel. Wait a minute… these challenges are similar to what the HTTP servers faced in the early 2000s where HTTP servers were being hosted on systems that were not built to handle millions of short lived connections.
For the last decade HTTP servers have been using an Application Delivery Controller (ADC) to overcome these challenges with TCP connection multiplexing- Why haven’t the Database servers done the same ?. The answer is quite simple – There was no solution that was SQL aware till NetScaler DataStreamTM made its debut in March 2011. To acheive SQL connection multiplexing the ADC must be able to terminate SQL connections just like HTTP connections are terminated on the ADC. Connection multiplexing for HTTP is fairly straight forward – it leverages a feature in HTTP/1.1 that allows for multiple HTTP requests/transactions to be made over the same TCP connection.
Why do database servers have limited concurrent connections ?
By setting limits on concurrent connections, database servers ensure that transactions get through, and users are isolated from each other for the fair use of system resources. A separate process is required to handle each connection in most database implementations, each process may require several MegaBytes of memory. All database installations limit the number of concurrent connections based on the upper limit of memory and CPU available to maximize resource availability for faster query performance. For example, if there are 32,000 connections on a single database server each requiring 2MB of memory that would result in 64 Gigabytes of memory just for SQL connections !
One of the largest ecommerce sites that we had discussions with this week has several middleware servers. This middleware is just “database connection multiplexers”, aggregating connections from hundreds of web/app servers into fewer connections going to the backend database servers. Think of a connection pool that services several clients significantly reducing idle connections, instead of each web/app server having its own connection pool and making the situation worse. While it looks like a simple solution, adding one more set of middleware servers complicates load balancing, health monitoring and high availability of the database infrastructure – not to mention another hop and another point of failure.
NetScaler DataStreamTM is able to bundle several SQL connections which have the same SQL connection parameters-username,password,database catalog etc- into a smaller set for the backend servers- thus achieving SQL connection multiplexing in an elegant manner. SQL connection multiplexing removes the burden placed on servers to turn over SQL connections very frequently, freeing up precious CPU and memory. With NetScaler DataStreamTM maintaining persistent connections to both web/app servers and the backend database servers – application latency is reduced significantly.
Find out how customers are deploying NetScaler DataStreamTM and taking advantage of its awesomeness at Barcelona Citrix Synergy session 204 Finally! Better availability and performance for database architectures with Citrix DataStream .
For more details on NetScaler DataStreamTM please visit http://www.citrix.com/English/ps2/products/subfeature.asp?contentID=2309522.