It seems some people are interested in cloud interoperability these days. But what does that mean? Is it possible? These are very early views on them.
Cloud computing is different from person to person, organization to organization. "Berkley view on cloud" paper gives a very good taxonomy to categorize at least some of the cloud definitions. Amazon EC2 styles IaaS clouds are at one end. Windows Azure, providing a .NET runtime in the middle and Google AppEngine, providing a python runtime environment at the other end.
If some one writes an application, can he transparently moves that across different cloud platforms? I think it is hard due to certain reasons. Let's talk about both horizontal (ex: EC2 style only) and vertical interoperability.
Horizontal Interoperability
I define horizontal interoperability as the interoperability of the platforms with the same X is in XaaS, where X means anything. For example, for IaaS, interoperability among EC2, Eucalyptus or any other infrastructure provider.
Amazon EC2 API is becoming the de-facto API for IaaS clouds and so many people are adopting it. I think there is some potential in doing interoperability here, but initially limiting to EC2 APIs. Also if one can standardize the way of creating virtual images (AMIs in EC2 case) it will be a good thing.
But there are problems in standardizations. If the key companies are not their in the committees or even if they are in the committees, they will make sure the committee will take indefinite time to come to a conclusion (see WSDL 2.0 spec ;) ).
Question will be to persuade the larger companies. A small set of companies, which have few machines and advertise themselves as cloud providers can not do this. Even though it is not fair that is the reality.
Interoperability can be likely within IaaS. But it becomes harder and harder when you move towards PaaS and SaaS environments as they are highly customized. If Sun comes up with something like Azure, it will be harder for you to write something to work on Azure and later move that to Sun environment. May be Azure will provide a way to run java apps, but I don't think people will want to do it.
Remember every vendor likes to put barriers to exit for their customers and making them to lift them is bit harder, unless there is some pressure from their "big" customers.
Vertical Interoperability
IMHO, this is highly unlikely to happen. Can you write an application, which will run on Azure, Google AppEngine and in EC2. You can but it will be damn hard. You will have to spend much more time on deployment than writing your application. Small players might come in and provide solutions, but are you willing to pay so much to keep the interoperability?
Take one example. Say you wrote a simple .NET application with MSSQL or any other service in the back. If you want to migrate this to Amazon EC2, it will not be as simple as creating a machine image. Azure will provide scalability, stability and may be throttling to the services hosted within the environment. When you move this to EC2, you have to do them yourself. Scaling a database, working with concurrency, consistency is not that easy, unless you hire experts in that field. But in that case, you are getting in to unnecessary trouble which make the move worthless.
Read more...