The term "cloud computing" has been used to mean many different things, some of them new, some of them not so new.
Some people in the mass media use the term "cloud computing" to mean anything that is done over the Internet, rather on one's own local machine. But the Internet is older than cloud computing, and there is also such a thing as a private cloud that exists not on the Internet but on an organization's own internal private network.
We use the term "cloud computing" in the sense defined by the National Institute of Standards and Technology (NIST) in September 2011. According to NIST's Definition (PDF), "Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction." Its "essential characteristics" are:
The key technology that enables cloud computing is virtualization: the ability, via software, to make a single piece of hardware behave as if it were multiple pieces of hardware, or vice versa. Thus, for example, we can have several virtual machines running at the same time on a single physical machine. Or we can have an array of disks that behave as if they were a single big disk, which can then be partitioned into smaller disks as needed. Or we can have virtual networking, in which the physical routers are supplemented by software routers.
Virtualization itself is nothing new. Way back in the 1960's, the IBM 360 mainframe computer used virtual machines to enable multiple users to use one physical machine simultaneously. Back then, the typical mainframe computer cost millions of dollars; so, to make it worthwhile, it was essential that many people be able to use it simultaneously. Hence the need for virtual machines.
Virtualization went out of fashion in the late 1980's, with the advent of inexpensive personal computers. Who needed virtual machines anymore, now that everyone could have a real physical machine right on one's desk for less than a thousand dollars?
However, as desktop machines got to be used for more and more things, people and businesses needed more and more of them ... and more ... and more.... Internet services, such as the more popular websites and web hosts, had an especially great need for more and more machines, but so did lots of other organizations too. Even individual freelance computer programmers, working out of their homes, needed more and more machines, so that they could test their programs on different operating systems and different versions of each operating system.
Although personal computers individually are very cheap, at least compared to the cost of the older mainframe computers, having lots and lots of personal computers can get very expensive. So, it is often possible to save a lot of money by having one physical machine behave as if it were several distinct machines.
Virtual machines do have one disadvantage, though. A virtual machine is always at least a little bit less efficient than the physical machine that it runs on. How much less efficient depends on the physical hardware and how the virtual machine interacts with the physical hardware. If the loss in efficiency is too great, then nothing is gained by virtualizing. But, if a virtual machine is only a tiny bit less efficient than the physical machine that it's running on, then having several virtual machines on one physical machine may enable one to accomplish significantly more than one could do with just the one physical machine all by itself.
In the early 2000's a new development in computer hardware -- multi-core processors -- made it easier to virtualize personal computers efficiently. Over the next several years after that, multi-core processors became cheaper and more commonplace -- and that is the truly new technological development that enabled what is known today as cloud computing.
The 2011 NIST's Definition (PDF) lists four "deployment models" of cloud computing: "private cloud," "community cloud," "public cloud," and "hybrid cloud."
When people in the mass media speak of "the cloud," they usually mean public clouds, i.e. clouds whose services are accessible to the general public over the Internet.
What is a private cloud? According to NIST: "The cloud infrastructure is provisioned for exclusive use by a single organization comprising multiple consumers (e.g., business units). It may be owned, managed, and operated by the organization, a third party, or some combination of them, and it may exist on or off premises."
When cloud computing is discussed in the business press, it is usually presented as a means of outsourcing. The idea of an in-house private cloud is rarely discussed, although it too can save a company lots of money -- with potentially much better security (if administered by people who know what they are doing) and much faster response (at least to internal users) than is possible with a public cloud. Even more rarely discussed is the idea of small in-house private clouds for companies too small to have full-fledged data centers, yet still large enough to need more than a few computers. And almost completely unheard of is the idea of an individual freelance programmer or web developer having a small private cloud in one's home office, for test purposes.
Cloud computing is often associated with the "service models" listed below. It should be pointed out that these service models, known previously by other names, are actually older than cloud computing itself. Any claim that these service models themselves are some radical new breakthrough, unique to cloud computing, is just marketing hype. Cloud computing just makes it easier and cheaper for such services to grow and shrink as needed.
The above "service models" are listed in the 2011 NIST document. Since then, other "service models" have gotten publicity too, such as Business Process as a Service (BPaaS), which can be built on top of SaaS.
Most open-source cloud platforms are designed for use in data centers. PetiteCloud is designed primarily for small or medium-sized private clouds located outside of data centers. PetiteCloud is currently not recommended for use in public clouds.
Because PetiteCloud is intended to work outside of data centers, it is designed to withstand normal power line disturbances, reboots, etc., without much hassle. (In contrast, in the design of some cloud computing platforms, intended for use in data centers where the machines rarely if ever lose power, a power failure is regarded as the "worst" possible disaster, requiring an elaborate disaster recovery procedure.)
PetiteCloud is intended to serve as a cloud foundation layer within our recommended architecture for a cloud platform. PetiteCloud can also manage very small private mini-clouds (hosted on just a few physical machines) without any higher layers other than perhaps some simple scripting.
Of the five essential characteristics of cloud computing according to NIST, PetiteCloud currently provides (1) "on-demand self service" and (2) "broad network access." It will soon provide "measured service" once its logging facility is complete in an upcoming version. The characteristics of "resource pooling" and "rapid elasticity" require the next higher layer in our recommended architecture, a scalable cluster layer.
PetiteCloud has been developed by freelance programmers and sysadmins with a need for our own small private clouds, for test purposes. From our own experience we know that there is a need for small private clouds in small and medium-sized businesses, whose needs (other than for public cloud services) have been totally ignored in the design of the currently-popular open-source cloud platforms.