Folks working in the IT field certainly encounter their fair share of jargon. Trying to keep up with all that jargon is difficult especially for emerging technologies.
For my day job I tend to frequently bump up against IT related topics such as "cloud", "cloud computing", "software as a service", "platform as a service", and "infrastructure as a service". I thought it was worth my time to do a little research and attempt to define cloud computing. As it would happen I have had some extra free time lately to do just that.
I'll take a stab at trying to define cloud computing myself and then see what some recognized IT authorities have to say.
Putting this out there in hopes that others find it useful and hopefully stimulate some conversation.
Rain comes from clouds. If I stand out on my patio, turn on the garden hose, and spray water up in the air I might claim it is raining. But I couldn't say that rain came from a cloud. Similarly, if I run a process/program on my server, running on my network, possibly in my company's data center I could safely say I was computing but it wouldn't be reasonable to say it was "cloud computing". Something new is happening to shake up the old client-server computing model. The term cloud implies "over there" or "somewhere other than where I am" and has the connotation that "I don't control it". Stating that more succinctly, the cloud exhibits the qualities that it is remote and that it is administered by external forces or entities.
To perform a computation you generally need CPU and memory resources and data. If you wish to persist the input data or outcome of the computation you need storage.
As a provider of those CPU and memory resources is there value in standing up those resources for a single consumer? If the consumer lacks the core competency, say, to administer those resources there is some value in outsourcing the maintenance of those resources to an external entity. The provider in that scenario would need to directly pass on the cost of all resources, the cost of operating those resources, along with the cost of the system administration to the consumer. Doesn't seem like a very economical way to do business. In order to make it economical the provider needs to share some or all of the resources across multiple consumers. The consumer pays for a portion of the resources and a portion of the cost of operating those resources. Any definition of cloud computing would need to include shared resources offered up to many consumers.
I think I have overlooked something important. What is the mechanism to access those shared resources? A quick answer would be a network. You would need a shared network common to all consumers. More likely a network of networks or an internetwork. Saying THE internet is a little too restrictive. So any definition should include access to shared resources over a common internet.
Working as a member of a team that provides an enterprise baseline to multiple consumers one thing I have come to value is providing a standardized offering to all consumers. Going down the road of offering custom or tailored solutions to one or two customers inevitably sets you up for failure in the future. If the governance of the shared resources is distinct from the consuming organization there is less opportunity for power players to demand special features or functionality. Which is not to say consumers have no control. At least in the commercial world consumers vote with their dollars and in their decision to use one offering over another.
At the risk of this blog turning into a ramble I'll add one more thing that I think is important--the Service Level Agreement(SLA). If the provider and consumer of resources are distinct it seems important that they not only agree on what shared resources are to be provided but also 'how much' and 'how often'. The consumer needs some assurance that the shared solution will be available to meet their needs. It works in the other direction as well. Since at least some of the resources will be shared with other consumers it is important to prevent one consumer from over using or over subscribing those shared resources.
Based on the above, here would be my first attempt at defining cloud computing:
Cloud computing-Remote access to shared common resources by multiple consumers over a common internet. An external entity governs the lifecycle maintenance and performs the administration of the shared resources. The shared common resources are provided in a standardized manner to all consumers. The provider and consumer are bound by an agreed upon level of service.
So let me start by saying I did not find a single, concise, commonly agreed upon definition.
The Wikipedia cloud computing article 1 doesn't attempt to provide a definition. In fact the article starts by saying there is no commonly agreed upon definition.
My definition and the Wikipedia article seem to overlap in the following ways:
- The article describes cloud computing as "colloquial expression used to describe a variety of different types of computing concepts that involve a large number of computers connected through a real-time communication network such as the Internet."2
- Quote from article regarding cloud management: "Companies using public clouds do not have ownership of the equipment hosting the cloud environment, and because the environment is not contained within their own networks, public cloud customers don’t have full visibility or control."3
- In regard to providing access to shared resources in a standardized manner, the Wikipedia article states:
- "Application programming interface (API) accessibility to software that enables machines to interact with cloud software in the same way that a traditional user interface (e.g., a computer desktop) facilitates interaction between humans and computers. Cloud computing systems typically use Representational State Transfer (REST)-based APIs." 1
- The Wikipedia article goes on to indicate that those APIs are not always standardized across vendors:
- "Most cloud providers expose APIs that are typically well-documented (often under a Creative Commons license) but also unique to their implementation and thus not interoperable. Some vendors have adopted others' APIs and there are a number of open standards under development, with a view to delivering interoperability and portability." 6
Interestingly, there is no discussion of service level agreements in the Wikipedia article.
NIST provides a definition of cloud computing 7 along with five essential characteristics, three service models, and four deployment models. In searching for the NIST definition it is interesting that you quickly find posts, e.g. 89, indicating the NIST definition does not go far enough. Not to mention NIST has refined the definition 16 times. I feel the authors pain at this point.
Again, not to be so bold as to say the NIST definition agrees with my own, but it does seem to overlap in the following areas:
- Regarding network access and shared resource pooling:
- The NIST definition indicates "Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources..." 7
- One of the NIST essential characteristics, resource pooling, indicates "The provider’s computing resources are pooled to serve multiple consumers using a multi-tenant model..." 7
- Regarding network access and standardized access:
- One of the NIST essential characteristics, broad network access, indicates "Capabilities are available over the network.." and goes on to indicate "... and accessed through standard mechanisms that promote use by heterogeneous thin or thick client platforms (e.g., mobile phones, tablets, laptops, and workstations)." 7
- Regarding cloud management/governance the NIST document has this to say about cloud infrastructure:
- "The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, or storage..." 7
Once again, there is no mention of SLAs. One of the NIST essential characteristics is the idea of a "measured service" which pertains to how cloud consumers are charged for resources used and not so much about availability or performance of those resources.
The NIST definition emphasizes two essential characteristics which I did overlook. Those characteristics are "on-demand self-service" and "rapid elasticity". The former has to do with the ability of a consumer to provision resources as needed without human intervention. The latter has to do with the ability to quickly grow or reduce resources used as demand increases and decreases, respectively.
In my definition of cloud computing I state that "Remote access to shared common resources...". The NIST definition addresses the "remoteness" issue via the four deployment models--private cloud, community cloud, public cloud, and hybrid cloud. The NIST definition indicates a private cloud "...may exist on or off premises" where a public cloud "exists on the premises of the cloud provider." So the deployment model blurs the definition of remoteness towards the private cloud end of range of offerings.
Moving along, the Gartner cloud computing definition is terse enough that I'll include it inline here:
A style of computing in which scalable and elastic IT-enabled capabilities are delivered as a service using Internet technologies.10
Since services tend to offer up a uniform API and Internet technologies tend to use standard protocols I'll say that the Gartner definition and my own definition agree that shared resources/capabilities are offered in a standardized manner.
The NIST and Gartner definitions agree that important characteristics of cloud computing resources/capabilities are offered in a scalable and elastic manner.
No mention of cloud management, governance, or service layer agreements in the Gartner definition which figure prominently in my definition.
Frankly it bugs me a little bit that there is no mention of service layer agreements in the cloud computing definitions offered up by IT authorities.
Turns out there is a good bit of discussion, e.g. 11121314, indicating that SLAs are an important aspect of cloud computing. Performance and availability are important SLA targets but other factors such as security, data (ownership, location, access, portability), dispute mediation, disaster recovery, and negotiation of exit strategies are important as well 12.
An interesting aspect is that the penalties associated with SLAs won't actually prevent outages/downtime but it does make providers put some "skin in the game". Standardized terminology for SLAs does provide a means for decision makers to compare competing cloud offerings and help cloud providers better understand expectations of consumers. 13
SLAs can work to the advantage of cloud computing providers as well. From a provider perspective guarantees associated with availability, reliability, and performance can be used to attract customers. 14
Based on what I have learned I'll make another attempt at defining cloud computing. I'll keep the part about SLAs. I believe the SLAs exist today but they are evolving more slowly than other aspects of cloud computing. I'll try to keep the definition concise. While I appreciate the details provided in the NIST definition I wouldn't want to have to regurgitate that whole definition if I were put on the spot. At this point I wouldn't call this "my" definition as I am folding in the commonly shared parts of the definitions from the IT authorities cited 1710 above.
Based on the above I'll offer up this refined definition:
Cloud computing-Remote access to shared common resources by multiple consumers over a common internet. The provider and consumer are bound by an agreed upon level of service. The shared common resources are provided in a standardized manner to all consumers. An external entity governs the lifecycle maintenance and performs the administration of the shared resources. Deployment models bound who can access shared resources and range from public to private cloud models. The extent to which consumers can control the cloud varies over a range of deployment models. Little or no control for public clouds to some control for private cloud offerings. Service models limit the type of resources to be shared. Service models range from software/service to infrastructure. Consumers are able to provision resources on-demand and those resources may be scaled up or down rapidly to meet changing demand.
It is difficult to provide a concise definition of cloud computing for the following reasons:
- Cloud computing is an emerging technology. It is not so much a radical new concept as an agglomeration of the best aspects of technologies, e.g. client-server architecture, grid computing, service oriented architecture (SOA), application service provisioning (ASP), etc. that preceded it and enabled by key advancements such as virtualization.
- To differentiate themselves, vendors attempt to offer distinct "value-added" services on top of core capabilities or focus on niche markets which further fractures the market.
- Cloud computing is still evolving.
I created this blog to drive me to do some research and better understand cloud computing. It worked. I still think there is value in having a concise definition but frankly I found there is much more depth and breadth to this topic then can be captured in a few short sentences.
I hope this has value to others as well.
"Eucalyptus Completes Amazon Web Services Specs with Latest Release". Ostatic.com. Retrieved 2010-08-22. ↩
Peter Mell and Timothy Grance, NIST Special Publication 800-145 (September 2011) NIST Cloud Computing Definition. National Institute of Standards and Technology, U.S. Department of Commerce. Retrieved 2013-10-13. ↩
McKendrick, Joe (March 5, 2012) NIST definition of cloud computing doesn't go far enough. ZDNet.com. Retrieved 2013-10-13. ↩
Myerson, Judith J. (January 7, 2013) Best practices to develop SLAs for cloud computing. IBM developerWorks. Retrieved 2013-10-14. ↩
Kara Deyermenjian. Cloud computing SLA failures: Preparing for the aftermath. Retrieved 2013-10-14. ↩