Very frequently I get requests asking “how many concurrent users does Team Foundation Server support”?
I really don’t like this question. What is a “concurrent user”? In a stateless request/response web based application, there really is no such notion. However enough people really want to know that I spent half the day Friday trying to figure it out. I searched the web for hours looking for a definition of “concurrent” users. Most of what I found related to systems that have explicit “log in” and “log out” actions. We don’t (and neither do most scalable web applications – google, ebay, MSN, etc). There were some references that said any notion of “concurrent” users on a web application is a bogus notion. Others tried to define it. Those that did, defined it as a time window during which all users who accessed the server were counted as “concurrent”. I saw a range from 5 minutes to 6 hours and there didn’t seem to be any pattern.
I decided to go a similar but slightly different route with my analysis of TFS. What we did was take a week’s worth of TFS dogfood trace data and break it up into 10 minute intervals. We then looked at each 10 minute interval and counted how many unique users used the system in the interval. We also counted the total number of requests in each 10 minute interval and divided the # of requests by the number of users and then divided by 600 (the number of seconds in 10 minutes) to get the number of requests per second per “concurrent user”. You could say that we used a 10 minute window but I believe that by dividing by the number of requests we have made the result less sensitive to the exact choice of the width of the window.
We found that, in our data, this number is 1 request per second per concurrent user.
I have previously gone through a similar set of math (see one of my earlier blog posts) that concluded that the peak RPS is 0.1 requests per second per team member (I defined team member as any one who used the server within a week). This means that there is a 10 to 1 ratio of requests per second per concurrent user and peak requests per second per team member.
I’m going to continue to quote TFS scalability in team size because I think it is a much more appropriate (and measurable) metric. However, if you (or your boss, customer, etc) really wants to know what the “concurrent” user support is, you can take the team size measures that I give and divide by 10. That’s how many “concurrent” users a given TFS hardware/software configuration will support (approximately).
As I’ve said a few times, we are soon going to be publishing revised team size scalability numbers for TFS. Our goals for V1 were 500 users but we have found that the server does dramatically better than that. I’m hoping to get those updated results out this month.