Tag Archive for 'cloud computing'

Dreaming of clouds

Cloud computing is a somewhat nebulous term currently.  I interpret it to mean a way of writing code, it runs somewhere and just works.  You don’t care where the server is, what kind of database it uses or any of that.

IEEE has a wonderfully vague definition: “It is a paradigm in which information is permanently stored in servers on the Internet and cached temporarily on clients that include desktops, entertainment centers, table computers, notebooks, wall computers, handhelds, etc.”

Some examples that fit this definition are: Bittorrent, Facebook, Google Chrome, Grid Computing, Ruby on Rails; the list goes on.  That is sufficiently general as to be worthless.

One thing is certain, cloud computing is HOT.  It is flavor of the month of keywords.  People talk about using cloud computing for all kinds of things without knowing what it is ( it seems no one really knows either ).

But as it stands now, despite the continuous buzz, it will not work, because there is a fatal flaw.

Amazon has the Elastic Compute Cloud, Microsoft recently published they are planning a cloud based OS, Google has, well pretty much everything they do falls under cloud computing.  New companies every day say “I want a piece of that fat cloud pie!”  This will only accelerate the problem.  If the industry sees the problem soon enough, as I have, then cloud computing has a rich future.  If not it will join Web 2.0 in stagnation and, eventually, extinction. ( I know Web 2.0 is not dead but it certainly has a head start down the trail cloud computing is on. )

The problem stems from the fact that since no one knows what cloud computing is, everyone gets to form their own definition.  Definitions are only a symptom.  I feel the main goal of cloud computing is to write code and it will work.  You don’t care how, you don’t care where, it just works.  Really that is the goal of all code, I don’t really care that the file my program needs is located in My Documents in Windows or somewhere else in Linux and another place in Mac, I just want to open the damn file.

Stories help illustrate points, here is one about a devoloper named Dave.

Dave has a cool idea for a web app.  It has needs a database and some server space and Dave has no experience with either.  He hears Amazon has a cloud setup that allows him to just write code that works without knowing all the gory details.  Extra bonus: if his service takes off and gets thousands of users it will scale automatically.  Dave loves that and whats more he buys books from Amazon, so he knows they can be trusted.  Dave can’t sign up fast enough.  And for a time, things are good.  It does what he wants but isn’t everything he imagined.  One day while explaining his project to Joe at the water cooler, Joe nods and follows along.  He then says “Dave, that sounds good but all the problems you are having just don’t happen in Google’s cloud system, it really is a much better fit for what you are doing.”  This gets Dave thinking, he starts looking into it and Joe is right, it would be a better fit.  So he signs up for Google’s cloud computing to see the differences.  Lo and behold it really is perfect.  He decides to transfer immediately.  Now the problem happens: Dave has tons of fully functional code on Amazon’s Cloud and now it needs to work on Google’s Cloud.  The only way to do that is to re-write it from scratch.  Well not scratch per se, Dave knows everything it needs to do, he just needs to change all the API specific stuff out.  That could be easy or nigh impossible depending on a variety of factors.

This is called vendor lock in.  If you use one product for long enough your stuff tends to revolve around it.  This has the effect of cementing it into your foundation.  After a while the only way to remove it is to destroy the entire house and rebuild from scratch, something most people and companies will never do.

The solution to this is so simple it is scary.  Make a standard.  These are the functions that will be supported on all cloud server architectures come hell or high water.  They work the same no matter who is hosting it.  A vendor can make special non-standard functions and users can use them at their own portability peril but it doesn’t stop new ideas from happening.  Any sufficiently cool idea should be added to the standard.  This way Dave can take his code from Amazon to Google or Microsoft or any of the others and it will do what was promised: it will work.

Programming languages have been doing this for years.  They all come with a set of functionality ( how much depends on the language, compiler, etc ) and it works regardless of where you write that code.  C++ programmers can use the boost library but not everyone is guaranteed to have it, but int better damn well be declared and work the way I know it should in all my C++ compilers.

If cloud computing embraces a standard then it can save itself from death.  It would allow people to change vendors when it suited them, to not be locked in for all eternity.  More importantly it would allow the bad vendors to die, instead of leeching off of one group who is too entrenched to get rid of them.  Code portability is something that would elevate cloud computing to its place in the clouds, instead of wandering around buzz word marsh until it winds up rotting in forgotton bog.