Urban Turtle in a load balancing scenario
A few customers have inquired about how Urban Turtle handles being set up in a load balancing scenario. I thought it would be interesting to describe the current state of affairs on our blog to share with the rest of world.
When it comes to load balancing, there are some issues that you should be aware of. These are described in the following topics on our community support site:
- Urban Turtle on load balanced application servers?
- Setting up Urban Turtle on multiple TFS app servers.
Scott Hanselman has a great summary of some of the things that you should take under consideration when dealing with multiple web servers. In most cases, the first scenario is really the one that applies to us: Urban Turtle uses an in-process session state which requires a particular load balancing setup to work properly. The problem is caused by client requests (user actions in the application, such as selecting an iteration) being processed by different servers. Imagine that the user clicks on the Planning board tab. This request is processed by Server A which was picked by the Load Balancer. Then, the user selects an iteration. This request is handled by Server B, which the Load Balancer picked because Server A was determined to be busy. Urban Turtle stores the selected iteration on Server B, which Server A is unaware of. Therefore, when the user requests the Hour Burndown, if Server A processes this requests, it will not be aware that another iteration was selected and will return the Hour Burndown for the wrong iteration, causing confusion.
The first solution would be to configure sticky sessions/connections or client affinity. The term used may vary depending on your load balancing application vendor. This basically ensures that all requests from the same client are routed to the same server. Thus, the client always uses the same session state and therefore, the same Urban Turtle application settings.
Another solution would be to use a State Server. This is something that you may already have set up for other applications in your infrastructure, but I wouldn't know about that. In this scenario, session data is stored in another process, on another server and is shared by all web servers in the load balancing environment. Urban Turtle has never been tested in such a scenario. It requires that all data stored in the session state be serializable and I cannot guarantee this as Urban Turtle was not designed with this in mind.
Here are some links regarding load balancing and session state:
- Load Balancing and ASP.NET
- Understanding session state modes + FAQ
- How to keep user requests on the same server when using IIS NLB?
- Configure a State Server to Maintain Session State (IIS 7)
I hope this helps. If you have any questions, please do not hesitate to contact me.