I have seen this problem before with multiple rental schemes with separate databases. There are two problems of overlap; the number of web servers per tenant and the total number of tenants. Firstly, this is a big problem - if you cache database connections through the ADO.net connection pool, the likelihood that any particular client connection entering the web server that has an open connection to their database is back in proportion to the number of web servers you have. The more you scale, the more any client will notice a delay in one call (not initial registration), since the web server makes the initial connection to the database on their behalf. Every call made to a non-sticky, highly scalable web server tier is less likely to detect an existing open database connection that can be reused.
The second problem is that you have so many connections in your pool, and the likelihood of this creates memory pressure or poor performance.
You can "solve" the first problem by installing a limited number of database application servers (simple WCF endpoints) that communicate with the database on behalf of your web server. Each WCF database application server serves a well-known pool of client connections (the Eastern region goes to server A, the Western region goes to server B), which means a very high probability of getting a connection pool for any given request. It also allows you to scale access to the database separately to access the HTML rendering web servers (the database is the most critical performance bottleneck, so it might not be bad).
The second solution is to use content routing through the NLB router. This routing traffic is content-based and allows you to segment your web server level by client groups (West region, East region, etc.). Therefore, each set of web servers has a much smaller number of active connections with a corresponding increase in the probability of getting open and unused compound.
Both of these problems are caching problems in general, the more you scale as a completely “fuzzy” architecture, the less likely that any call will hit the cached data - whether it be a cached database connection or cached data. Managing user connections to maximize the chance of getting into the cache would be useful to maintain high performance.
source share