Polluting the cloud with incompatible ideas and applications
For the cloud to reach its full potential new application development and deployment technologies will be required.
Cloud computing means different things to different people. In this guest post, Tom Mornini, CTO, of Engine Yard looks at the differences amongst the applications that get lumped together as one amorphous cloudy mass.
Navigating the cloud
Guest post by Tom Mornini, CTO, Engine Yard
The term cloud computing is now in common use. So common in fact, that it clearly encompasses many incompatible ideas. Let's consider the differences among Amazon's AWS, Google's AppEngine, and Apple's MobileMe.
AWS provides "raw" compute resources via EC2 and higher level services such as S3, SQS, and SimpleDB. You configure the raw compute resources as you see fit, using the OS of your choice and write applications in any language using any framework. Those applications may or may not rely upon additional AWS services such as S3, SQS, and SimpleDB. Deployment is entirely up to you.
AppEngine, on the other hand, is far more opinionated. Just as Ford once sold cars of any color, so long as they were black, AppEngine allows you to write programs any way you want, so long as it's their Framwork, Python, and BigTable. While Google has already suggested that it would support other languages in the future, it seems clear that Google doesn't intend to offer as many "colors" as AWS does.
This is not to suggest that AWS is "better" than AppEngine or MobileMe, merely different. As Engine Yard is 100 percent committed to Ruby and Rails, we're big believers in the Rails creator's triple philosophies of: "Convention over Configuration," "Flexibility is Overrated," and "Constraints are Liberating." It certainly does mean that AppEngine is dead to Engine Yard, since we simply cannot make use of it using the technologies we prefer.
Apple's MobileMe marketing also makes reference to the concept of cloud computing, but takes it in an entirely different direction than Amazon and Google. It doesn't offer any software development or deployment at all.
From my perspective, EC2 is a hardware as a service (HaaS) offering while the rest of AWS is a platform as a service (PaaS) offering. AppEngine is a Platform as a Service (PaaS) offering that also provides deployment as a service (DaaS). MobileMe is a software as a service (SaaS).
If cloud computing encompasses all of these items, it seems to me that we've developed a new name for something we're all quite familiar with: the Internet! Consider this: When, exactly did subscription Web sites become known as SaaS? I suspect that this term is rooted in enterprise marketing. After all, nobody would ever pay that much to use a Web site!
Programs running on computers have been providing flexible and valuable services to the cloud for quite some time now. Since the beginning most end users have been unable to conceptualize how it works. Sun deserves credit here: "The network is the computer" was really ahead of its time.
So, perhaps cloud computing represents a new abstraction layer entirely. This time around even the developers don't understand how their applications work. Of course, many might suggest that this has always been the case!
As applications grow more complex and become interconnected, simply managing applications becomes a highly complex task. Particularly so as consumers of these applications demand local application response times and 100 percent uptime. These consumers don't care and don't want to know about peak loads, hardware failures, etc. The providers of these applications are increasingly finding little benefit in managing the infrastructure themselves.
For the cloud to reach its full potential, I strongly suspect that new application development technologies will be required. With dynamic hardware availability, applications must be dynamic. Security, resiliency, and scalability must be inviolate. Most importantly, all of these ideals, currently recognized and strived for by developers, must be inexpensive to achieve and built into the very fabric of these technologies.
It's imperative that these technologies provide enough abstraction to allow an application to run not just on a single cloud, but be run and managed across the one true cloud: The Internet itself.
Tom Mornini, CTO