When asked this question, I first describe three layers:
- Layer 1 - Hardware virtualization - This is the "bare metal" layer of storage and CPU virtualization
- Layer 2 - Application virtualization - This is when you use web services or APIs to provide a specific function or capability.
- Layer 3 - Process virtualization - This is when you string web services and APIs together to deliver value (function or capability) to an end user
Different infrastructure terms can then be used to describe how these layers are put together:
- Layer 1 is grid computing, utility computing or IaaS. The specific descriptive term is a function of the business model used to deliver the capability
- Layer 1 delivered with layer 2 is PaaS. A developer uses the platform services or APIs to create value for an end user
- Layer 1 delivered with a software application is SaaS
- When Layer 2 and Layer 3 are designed with web services and layered on top of a hardware infrastructure (virtualized or not), you have a Service Oriented Architecture
- Layer 1, 2 and 3 delivered with services and/or APIs already organized in workflows and delivering value to an end user is Cloud Computing.
As always comments or suggestions for improvement are welcomed. The approach is admittedly simplistic, but it does help me sleep at night :-)