I must know very well what is the easiest method to mitigate chance of vendor lock-set for cloud-based systems.

For instance, Let me deploy numerous different systems to, say, Amazon . com EC2 or Home windows Azure, but Let me minimize the price of moving individuals systems to a different cloud vendor if/at the appropriate interval.

At the minimum, it appears such as the more I depend on vendor-specific solutions (like Amazon . com Queue Service), the greater I am naturally kept in (a minimum of I believe so), but Let me appreciate this risk better and then any beyond it.

Exist architectural methods I'm able to use to mitigate this (e.g., depend on map reduce, since my scripts is going to be portable to a different map reduce cloud env)? Exist O/S or stacks that are superior to others (Linux, Light?). Is applying JClouds useful?

Ideally, Let me design virtual systems that may be used on EC2, for instance, however easily migrated to Azure or Application Engine (or the other way around).

I generally write in Java, but am thinking about selective utilization of Scala and Python (or Jython) and am generally still attempting to stay JVM-based. I am inclined to perform a large amount of parallel processing, and depend on SQL and non-SQL (although not necessary NoSQL) storage and data manipulation technologies.

Thanks ahead of time. Hope I am not too impractical here.

For me, the only real architectural pattern towards the problem you describe is: abstraction

Make certain to stay with using assets which can be found across various suppliers,like storage, queue, etc. Create abstraction layers for all of them.

Hope this can help. I do not think its an excellent simple task to complete, because of the variability from the services across cloud companies

To be sure with IgoreK - if you are carrying this out in code, it'll take lots of abstraction, that's about this.

An alternative choice would be to take an IaaS cloud approach - design the application according to Virtual machine roles only. Most Cloud companies offer some type of Virtual machine role - Amazon . com, Azure, Rackspace etc. Migration then means much less code changes, but a little more admin in your corner.

Microsoft's Customer Advisory Team comes with an excellent sample regarding how to do this (I believe I downloaded the project came from here). There's a great deal of code inside it, plus some great abstractions to create things "free". Clearly, just like any abstraction, additionally you introduce a brand new layer of complexity so make certain you actually everything before using it.

Generally, less is much more. And despite the fact that a lock-in isn't something you would like, it's most likely not too tough to "fix" when the need arises. But request yourself whether it's important for your have to be satisfied now, or in the event you finish the project, and refactor later.

Honestly, your question is dependant on a little of the false premise. You are searching to prevent lock-in instead of attempting to make the most of the woking platform you've selected to make use of.

The greater method of approaching the problem isn't to try and have your infrastructure be hot-swappable (e.g., avoid vendor lock-in), but to really come to a decision concerning the IaaS provider you need to use and leverage it as being best as you can.