Developer's Attempt to Define Cloud Computing

I have been closely following cloud computing for many months now. As a developer, I get often frustrated by lack of clear and widely accepted definition of what cloud computing actually is. This is a problem, because without a definition, every imaginable operation performed over the Internet all of a sudden became a “cloud.” It dilutes the value and obscures the innovation cloud computing concept used to stand for in its early days.

The term “cloud computing” consists of 2 words - “cloud” and “computing.”

Cloud

Traditionally, an image of cloud is used on network diagrams to denote an opaque network entity (for example, Internet or MPLS cloud). Opaque in this case means that to an enduser it’s a black box - you hook up inputs and outputs as directed, and you get functionality. In addition to opaqueness, there are other less obvious properties that clouds on network diagrams usually possess:

  • cloud is multi-tenant (many endusers use same one)
  • cloud resources (links, bandwidth) are not dedicated (each enduser gets to use some up to their quota; if user A no longer uses a resource, cloud can assign it to user B)
  • cloud is outside of enduser's full control
Computing

Firstly, allow me to note that I strongly disagree with pure linguistic approach here - to linguists, “computing” and “computer” are derived from the same root, such that “computing” is an action which involves a “computer.” I disagree with it because it’s too general and useless for our case.

I define “computing” as running user-provided software. It doesn’t have to be developed by user - one can download it from the web and run it. But it’s still the user who provides this software in this particular case. In contrast, if you use a web site to perform a certain operation, you also use software - but in this case, it’s the software developed and operated by the web site, hence it’s a service, not computing.

My Definition of Cloud Computing

Cloud computing is a form of using opaque multi-tenant networks of computers outside of enduser's full control with primary goal to run software provided by the enduser, in which computational resources are allocated dynamically (as opposed to being permanently assigned).

Examples and Caveats
  • If we take a well-known SPI model (Software as a Service, Platform as a Service, Infrastructure as a Service), contrary to current mainstream thinking, only IaaS can be cloud computing when enduser provides the software to run.
  • I added a clause about "primary goal" to eliminate things like Google Spreadsheet from cloud computing - even though a spreadsheet program may run macros (which are software code) and such macros could be provided by enduser, it's still not cloud computing, because the primary goal of a spreadsheet program is number crunching, not running macros.
  • Programming frameworks (such as Hadoop for example) can be both: Hadoop can be cloud computing when enduser provides their map and reduce functions; but if enduser ends up running defaults or functions that ship with Hadoop distribution, there is no software supplied by enduser so it's not cloud computing.
  • Things like storage as a service, backup as a service are all "cloudy," but they are not computing. There is already a term for this - Internet. Therefore, I consider "cloudy" by itself to be a redundant term.
  • Google AppEngine (GAE) is a cloud computing platform. Many don't put it into IaaS category because it doesn't provide customers with access to low-level hypervisor-based VMs. But this alone doesn't make it non-IaaS from developer's standpoint - after all, a VM in hypervisor model is one thing, and a VM in language interpreter model is another (JVM, Erlang VM, Python VM, etc) but it's still a VM in a sense that it encapsulates running code inside and proxies all system-level requests through its abstraction layer. GAE provides access to its BigTable infrastructure, its memcache infrastructure so to me it's very much an IaaS system and satisfies my definition of "cloud computing."
  • In my opinion, multi-tenancy is a necessary condition of a cloud computing platform. Multiple tenants must not be different companies - they can be different business units, different departments. The key is that there must be dynamic allocation of resources and scarcity. If all resources are dedicated to one organization and simply switched between applications, it's not cloud computing - it would be simply an infrastructure controlled via API.
  • Same thing about on-premises server farms with cloudy features - they are not cloud computing, because they are not opaque to enduser and they are under enduser's full control.
Conclusion

All in all, I hope this blog post gets us closer to finally figuring out once and for all what “cloud computing” is and what it isn’t.

Categories: cloud-computing | software-engineering |

Comments (6)

Jake Burns // 06 Jul 2009

Not sure I'm buying this definition, "If we take a well-known SPI model (Software as a Service, Platform as a Service, Infrastructure as a Service), contrary to current mainstream thinking, only IaaS can be cloud computing when enduser provides the software to run." www.workxpress.com

Dmitriy // 06 Jul 2009

I meant to say that SaaS and PaaS are not cloud computing according to my definition. If SaaS is considered cloud computing, then pretty much everything is cloud computing - which to me is useless.

I personally don't see any "computing" in SaaS, so to me it can't be "cloud computing."

Charlie // 07 Jul 2009

I don't see why it's important here to nail down this definition, or why this way of drawing the line is the most useful one.

For me, the most useful one would be for the point of view of the user of the cloud - the application developer. Put simply, am I writing my application to run on a cloud or not?

If I am writing an application for EC2, Solo, GAE or Heroku, say, there are a number of things I will do to make it suit that situation. I might set up AMI images or server configuration recipes, and I might design my data model to fit a "distributed datastore as a service" model like SimpleDB or BigTable.

There's also a number of things I will not do. I will not worry about any particular set of physical machines, or about their care and feeding. At most, I'll divide my architecture into a number of "hosts" with abstract names, which I may then call into and out of existence with some kind of API call.

In short: just as I can specify my application logic in software, I can also specify my system architecture in software.

I'd like to nudge my company in this direction. If that succeeds, our platform still wouldn't be "cloud computing" the way you're describing it because it would fail your test of "on-premises server farms with cloudy features". But we would be writing the application in exactly the same way as someone using a public cloud.

Fabrice Cathala // 07 Jul 2009

Hi Dmitriy, As Jake just said I don't agree...

I believe that the confusion comes from the fact that you are seeing it from a developer point of view... But I can confirm that from a CFO perspective SaaS is indeed Cloud Computing.

SaaS the higher level of outsourcing to the cloud with PaaS and IaaS requiring more technical involvement from the customer.

All 3 flavours of Cloud Computing bring their advantages and drawbacks but belong to the same family.

Cheers,

Fabrice

Dmitriy // 07 Jul 2009

@Fabrice - I understand your point of view and do admit that it's the prevalent viewpoint at least as of now. But let me ask you this - if SaaS is indeed Cloud Computing, please give me an example of a relatively well known Internet-based application that is NOT cloud computing. In other words, I am looking for an example to prove a statement that cloud computing is not the same as Internet computing or computing over Internet. Because if it's the same, I don't see a point in another definition.

@Charlie - Good point. On one hand, you are absolutely right in a sense that why bother with definition in the first place. But on the other hand, not having a strong precise definition is a drawback. Firstly, it hampers standardization efforts (standardization lowers costs and barriers to entry). Second, it hampers people's understanding of risk and what measures need to be taken to use cloud computing securely (indirectly it also affects people's lack of understanding what kind of workloads are better suited for cloud computing). And finally, how many people know about "cloud computing" and how many people know about "IaaS"? I think the former group is way larger than the latter - it's marketing (brain washing) machine at work (note I have nothing against marketing :) ).

IaaS has a ton of research that needs to be done. A simple link between 2 instances that in reality are the same machine at different points in time is currently missing, and it is a showstopper for many use cases and projects.

So my goal is to focus people's attention on IaaS as the only true cloud computing paradigm, instead of spreading their attention thin over entire spectrum of functionality consumed/consumable over Internet.

Fabrice Cathala // 27 Aug 2009

Hi Dimitry,

My response to your question would be that, in short, my definition of Cloud Computing to "Business Computing moved to the Cloud".

- If one technology is native to the cloud such as a website, then it's essentially errr.... a web site.

- Some people tend to refer to services such as GMail as Cloud Computing, when for me it is just another cool web app.

- The origin of the term "Cloud Computing" is linked to Computing at work not Computing at home, when IT depts/CFO have started considering the advantage of outsourcing some servers as well as the people around these servers to the Cloud.

At the end, we see that with all the fuss around the definition of Cloud Computing the trend is to make this a big umbrella but again which does include SaaS as top offering.

Cheers,

Fabrice