We’ve started an investigation effort to see how hard it would be to get TFS running on Azure. The thing we thought would be hardest was getting our extensive SQL Server code working. It turns out we were wrong. It was really easy. We’ve already gotten the TFS backend up and running on SQL Azure. One of the guys on our team has a local App Tier (in North Carolina) talking to a SQL Azure hosted database that contains all the TFS data. Of course it’s all prototype right now and you’d never actually run a server that way but it’s very cool to see how quickly we were able to get that working. I’ve played with it some and can use source control pretty effectively, work item tracking, etc. I’ve even used Microsoft Test Manager against it and can do test case management, etc. We haven’t hooked up build automation or reporting yet.
Overall, we didn’t have to make very many changes. We had to change some of the SQL XML stuff we were using to a different mechanism that SQL Azure supports. The biggest thing we had to do was to change all of our “SELECT INTO” statements to use regular temp tables. SQL Azure requires that all tables have primary keys and SELECT INTO doesn’t support that and is therefore not supported in SQL Azure. We used SELECT INTO because in SQL 2005 it was much faster than temp tables. In SQL 2008 and later they are about the same performance so the switch is no big deal other than finding all of the places we used it.
We’ve still got a few issues left to work out. For example, we use sysmessages for error messages in TFS and SQL Azure doesn’t really support apps doing that. We’re talking to the SQL team about alternatives and possible feature additions to SQL Azure that will solve our issues. Also, SQL Azure storage space is a good bit more expensive than Windows Azure blob storage. As such, we are looking into ways to take the file content out of SQL Azure and store it on the Windows Azure storage system so that TFS would cost less to operate.
Now we’re working on prototyping the application tier on Windows Azure. The biggest challenge there is making TFS’s identity and permission system work well with Azure’s. TFS uses Windows SAM and Active Directory. Azure uses claims based authentication. It has some pretty significant ramifications. Further, we’d like to support identity federation so that companies that choose to host their TFS on Azure would be able to use their corporate login credentials along with the hosted TFS.
Anyway, there’s not product plan for this yet. It’s just an experiment to see how hard it would be and what the result would be like. Once we get the prototype full up and running we should have a pretty good idea of what would be involved in productization and can make some decisions about when, if and how we complete the work and bring it to market.