Wikipedia defines cloud computing as:
"…internet-based computing in which large groups of remote servers are networked to allow the centralized data storage, and online access to computer services or resources."
The National Institute of Standards and Technology (NIST) gives the following definition of cloud computing:
"…a model for enabling 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."
There are several other broadly accepted definitions of cloud computing. Some explicitly emphasize configurability of the resources, while others include the need for rapid on-demand provisioning of resources, still others drop the requirement of access via the internet. We define cloud computing as a model that enables the features listed as follows:
- Users should be able to provision and release resources on-demand
- The resources can be scaled up or scaled down, automatically, depending on the load
- The provisioned resources should be accessible over a network
- Cloud service providers should enable a pay-as-you-go model where customers are charged, based on the type and quantum of resources they consume
Some of the implications of choosing to use the cloud for your computing needs are:
- The illusion of infinite processing and storage resources available on demand reduce the need for detailed advance planning and procurement processes.
- The model promotes the use of resources as per customer needs, for example, starting small, and then increasing resources based on an increase in need.
- Provisioning development and test environments on a smaller scale, and enabling them only during working hours to reduce the cost of development.
- The staging environment can be provisioned for a short duration to be a replica of the production environment. This enables testing using production configuration (and scale) and for improved production defect resolution.
- The ability to auto scale in order to better manage spikes in demand and variations due to business cycles or time-of-day reasons, and so on.
- It encourages experimentation by trying out new ideas and software by quickly provisioning resources rather than requisition for resources through time consuming and cumbersome processes.
These and other implications of using cloud services to design scalable, highly available and secure applications are discussed in depth in the subsequent chapters.