**UPDATED May 18th 2001** - See http://blogs.msdn.com/b/bharry/archive/2011/05/18/update-on-tfs-on-azure.aspx
Hosting of ALM in the cloud as software as a service is gradually becoming more and more popular. The vision, of course, is ALM as a seamless service – making it really easy to get started, easy to scale, easy to operate, easy to access, … You’ve seen me write from time to time about our work with 3rd party hosting and consulting companies offering TFS services. We did a bunch of work in TFS 2010 on both the technical and licensing front to enable a new generation of cloud based TFS services.
Several months ago, I wrote a post about our initial investigation into porting TFS to the Windows Azure platform. Since then, we’ve continued to pursue it and today, at this year’s PDC, I demoed Team Foundation Server running on the Windows Azure platform. We announced that we’ll deliver a CTP (basically an early preview) next year. We aren’t, by any means, done with the technical work, but, for now, it’s a great case study to see what is involved in porting a large scale multi-tier enterprise application to Azure.
The demo I did today represents an important step forward in getting TFS running on the Azure cloud platform. When I wrote my post a few months ago, I talked about a few of the challenges porting the TFS data tier from SQL Server to SQL Azure. What I demoed today included not only that but also the remaining components of TFS running in the cloud – the ASP.NET application tier (running as a Web Role), the TFS Job Service (formerly a Windows service for periodic background tasks, now running as a worker role) and the TFS Build controller/agent (running in an Azure VM role). I demoed connecting from a web browser, Visual Studio and from Microsoft Test Manager.
One of the cool things (but makes for a mundane demo :)) is that, for the end user, TFS in the cloud looks pretty much like TFS on-premises. Other than the fact that you can log in with an internet identity rather than a windows identity, you’ll find that the Visual Studio experience, for example, looks pretty much identical to a local TFS scenario. Here’s a screenshot of the “new experience” of logging in with a internet id:
And here’s a screenshot of VS connected to TFS on Azure (as you can see, there’s not much difference):
The good news is that a lot of the work we did in TFS 2010 to improve the TFS architecture to scale from simple client installs (TFS Basic) to very complex, centrally hosted enterprise installs really helped prepare us for the port to Azure. The result is that it has been a pretty reasonable project. I’ll describe some aspects of the effort.
As I mentioned, step 1 was getting the SQL ported to SQL Azure. TFS is a very large SQL app and therefore, we feared this would not be a simple task. TFS has over 900 stored procedures and over 250 tables. Despite how involved the app is, the system was up and running with an investment of 2 people for about 1 month. The biggest issues we had to deal with were:
While this is not an exhaustive list of the issues, it’s a pretty good list of the larger ones we had to deal with.
While the TFS app tier is also pretty big, a straight port of it was surprisingly simple – about 1 person, 1 month. Azure’s implementation of ASP.NET is pretty faithful to the on-premises solution so most stuff ports pretty well. The harder parts of this (that have taken a few people several months) have been adapting to some of the cloud platform differences – with identity being the biggest one. Here’s some detail…
Again, this isn’t a comprehensive list but captures many of the largest things we’ve had to do to get TFS on Azure.
There’s a class of work we are doing that I call “Tuning for Azure” and by this, I mean, it’s not strictly necessary to provide a TFS service on Azure but it makes the service more practical. My best examples off the top of my head are:
The biggest category of work we have left is stuff I call “Running as a Service”. Most all of this applies to running a traditional on-premises 3 tier app as a service but it becomes more important the larger the scale of the service is and a worldwide service like Azure makes it really important. An example of something in this category is upgrades. In TFS today, when you upgrade your TFS version, you take the server down, do the upgrade and then bring the server back up. For a very large on-premises installation, that might entail a few hours of down time up to about a day (for crazy big databases). For a service the size of a global service, you can’t take the service down for days (or even hours) while you upgrade it. It’s got to be 24x7 with minimal interruptions for small segments of the population. That means that all upgrades of the TFS service have to be “online” without ever taking a single customer down longer than it takes to update their own data. And that means running multiple versions of the TFS simultaneously during the upgrade window. It’s by no means the only big “running as a service” investment but it’s a good example of how expectations of this kind of service are just different.
We also haven’t yet tackled what billing would look like for this kind of online service. That can also be way more complicated than you might, at first, think.
That’s a lot of detail but it’s a pretty cool milestone to be able to demo the great progress we’ve made and share our experiences porting a large existing on-premises app to a cloud architecture. As always, it’s pretty fun to be messing around with the latest and greatest technology. As I said at the beginning, we’re still primarily looking at this as technological exercise and aren’t ready to talk about any product plans. For now, TFS provides a great on-premises solution and we have a growing set of partners providing hosted services for those that want to go that route. The move to the cloud is certainly gaining momentum and we’re making sure that your investment in TFS today has a clear path to get you there in the future.
Thanks,
Brian