Definitions and architecture
I am not a big fan of using definitions as a starting point. In technology many useful and successful concepts have escaped definition. People still argue about what exactly is an object in an object-oriented system. There is no scarcity of definitions for software architecture. The internet cannot be pinned down to a simple definition. A definition, however, it is still useful in certain contexts.
While people might argue about the exact definition of cloud computing (which is probably a futile effort at this time), a working definition can be used to evolve a shared meaning. This is especially useful in software architecture where clear communication among stakeholders is extremely important. Software architects interact closely with business, users, developers, testers, compliance groups and others and before you move your architecture to the cloud, you should state exactly what cloud computing means in the context of the system you are designing.
Definitions will differ based on whether you are a consumer of the cloud based services or a provider and with more and more of private and hybrid clouds out there, organizations and enterprises are fast becoming internal providers of cloud based computing services which is blurring the line between providers and consumers of a cloud “style” service. Today, from a consumer’s point of view, a cloud based compute service:
- is implemented as a pool of servers though the consumer may not have direct access to the underlying pool.
- is characterized by very high degree of automation typically providing both programmatic access (for integration) and graphical or command line user interfaces.
- provides an abstraction of compute services along with constraints that enable the provider’s offering.
- is priced on a pay-as-you-go basis. Consumers only pay for what they use.
When you take these along with (effective) infinite scalability and pay-per-use utility model into consideration and design a system for the cloud, there are several issues that you should take into account. I will discuss a few architectural considerations that must be taken into account while designing a cloud based system. The usual design principles and best practices for building a cloud based are not very different from what you probably already use as part of your enterprise architecture standards and/or other best practices for building large scale distributed systems; but some of these may be unique.

By Vaibhav on Dec 23, 2009
This is a good definition for what a cloud-based service is. Having said that, here’s a question: does a cloud-based service always need to be pay-as-you-go? Or is that part of the definition because that is typically what it is?
Are we stereotyping the ability that the cloud paradigm offers us, by saying that any service on the cloud should be pay-per-use?
Reply
Aditya Reply:
December 23rd, 2009 at 11:59 pm
Well I don’t think pay per use makes a part of definition of a cloud based system. Its more of a characteristic feature of most of the systems out there such as Google Webapp or Amazon EC.
But I am working with a client right now which offers cloud based services and pricing model is based on percentage of what the user earns from the services on the cloud.
Reply
By Abhijat Vatsyayan on Jan 15, 2010
While the tech aspects of the cloud computing are interesting, in my experience “pay for what you use” is a bigger reason for businesses to move to the cloud for meeting their computing needs. Self provisioning is another big reason, especially for enterprises where provisioning a server can easily take weeks (if not months).
Reply