I was talking to a colleague last week and he asked, “If you deploy an application to Azure, can you move it to a different cloud provider later on?” To answer this question, let’s look at three things. First, what is Azure really? Second, does writing an Azure application lock you into Azure? And third, is there a need for standards in cloud-computing?
Let’s say you write a Web application using ASP.NET. That application will run on any Windows server. Azure is really just a virtual machine running an instance of Windows server. So, moving an application from an Azure virtual machine to an Amazon EC2 virtual machine is no different than moving an application from a Dell server to an HP server. In fact, it would be quicker, because you wouldn’t have to buy the hardware or install the software. That is not to say there are no issues, but it’s really not that big a deal.
You might want to check out this article for a Look Inside a Windows Azure Instance.
There are changes you’d likely make in your Web application to take optimal advantage of Azure’s architecture. For example, you would likely use Azure Storage for sessions, membership and online data. Check out the following article to find out why, Windows Azure Training Series – Understanding Azure Storage.
Surely, that would lock you into Azure. Well not really. Azure Storage can be accessed from anywhere via http. So, while you might be using Azure Storage from an Azure application, you could just as easily use it from an application running on EC2, Google App Engine or from your local area network. So, if you had an application using Azure specific features and wanted to move it, it would not mean a rewrite.
Whenever people start talking about a need for standards I get worried. Standards mean committees and meetings and great long documents. I would argue we already have the standards we need. All of Windows Azure is made available using http and a REST-based API. That means any platform that can make an http request, can use Windows Azure. The same can be said of Amazon Web Services and Google App Engine.
Microsoft provides Windows Azure for compute services, SQL Azure for relational database and Azure Storage for data services. Amazon has EC2, Elastic Beanstalk, S3 and RDS which collectively provide the same services. Google offers App Engine and Big Table. You can mix and match the services from these providers any way you think is best, and move between them over time.
So, yes you can deploy an Azure application today and move it elsewhere later. To learn more about Windows Azure, check out Learning Tree course 2602, Windows Azure Platform Introduction: Programming Cloud-Based Applications. Or, to learn more about cloud-computing in general, come to Learning Trees Cloud Computing course.