Cloud computing relates to concepts that utilize large numbers of computers connected through a computer network, such as the Internet. Cloud based computing refers to network-based services. These services appear to be provided by server hardware. However, the services are instead served by virtual hardware (virtual machines, or “VMs”), that are simulated by software running on one or more real computer systems. Because virtual servers do not physically exist, they can therefore be moved around and scaled “up” or “out” on the fly without affecting the end user. Scaling “up” (or “down”) refers to the addition (or reduction) of resources (CPU, memory, etc.) to the VM performing the work. Scaling “out” (or “in”) refers to adding, or subtracting, the number of VMs assigned to perform a particular workload.
Workloads are usually scaled in a consistent manner based on a particular characteristic or on a set of characteristics. A set of resources are reserved for scaling. In a typical enterprise, a decision is made to either scale up or scale out. With the advent of cloud computing, enterprise now have the options to choose the scaling strategies based of the individual application component needs. Application workloads include different components. For example, a typical multi-tier application has one or more application (app) servers, databases, queuing services, caching services, identity management services, etc. These components have different resource needs in order to perform optimally.