Over the last few weeks I've been quiet here at ProductionScale. My work has been extremely busy and I've been in research mode. It's a natural cycle for me to read, research, reflect, converse, conference, and think. Then, I usually get back to reviewing my notes and writing some of it down here. Lately, I've been digging deeper into Erlang, XMPP, eJabberd, and some interesting related systems architectures for various reasons. I intend to do a bit blogging soon about some of those things that are keeping me quiet for now.
For today though, I've been thinking about the article I wrote in April this year, "Get Your Head in the Clouds." That article was well read and now, a few months later I've had time to reflect on it a bit and read what other people have written, said, and commented. I'm happy to say I got good feedback (thanks everyone) and that it's held up reasonably well overall.
Cloud Computing is tending toward some degree of order. Sometimes it seems that it is more of a discipline than a thing in and of itself. It's a discipline made up of three areas that are Cloud Applications, Platform as a Service (PaaS), and Infrastructure as a Service (IaaS). It is the combination and intermingling of those areas that define the discipline of cloud computing. It's complex because many times PaaS itself is a Cloud Application and sometimes it even runs on the same IaaS that it manages. This of course confuses this issue even more. But, that's how it is. I originally made the following diagram.
I have taken what was in blue and reworked that part a bit.
I think this new diagram shows how the pieces fit together and interact with each other nicely in a compact diagram.
I've also been thinking about the question of what really is cloud computing. Here is my previous definition:
Cloud Computing - Commercial extension of utility computing that enables scalable, elastic, highly available deployment of software applications while minimizing the level of detailed interaction with the underlying technology stack itself
Now, I'll take a stand and say that whatever someone calling Cloud Computing simply is NOT cloud computing if it does not possess the features of Scalability, Elasticity, and High Availability.
To review what those terms basically mean:
Scalability - The ability of a computing system to grow relatively easily in response to increased demand
Elasticity - The ability of a system to dynamically acquire or release compute resources on-demand.
Highly Available - Systems designed such that the loss of any one component of a system will not result in system failure. No single points of failure (SPOF).
If some service does not posses these features then, in my opinion, it's not cloud computing.
In summary, I really do think some degree of order is starting to coalesce and the work by many, many people is helping to move things along at a rapid pace. In particular I'd also point out the recent work by Markus Klems on his blog Cloudy Times. Great work Marcus!