1 Introduction
Clouds often employ multiple geographically distributed data centers to allow application deployment in various locations around the world for reduced response times. A data center contains tens of thousands of server machines located in a single warehouse to reduce operational and capital costs. Within a single data center, modern cloud applications are typically deployed over multiple servers to cope with resource requirements. The task of allocating resources to applications is referred to as resource management. However, resource management remains a challenge, as cloud applications often exhibit highly variable and unpredicted workload demands. To cope with the most demanding and rare workloads, over-provision of application resources has been common practice in resource management. Although simplistic, this has led to substantial under-utilization of data centers (see, e.g., [1]), since practitioners devote disjoint groups of server machines to a single application. The advent of virtualization has enabled a highly configurable environment for application deployment. A server machine can be partitioned into multiple Virtual Machines (VMs), each providing an isolated server environment capable of hosting a single application or parts of it in a secure and resource assured manner. Resource allocation to VMs can be changed at runtime to dynamically match virtualized application workload demands. Virtualization enables server consolidation where a single physical server can run multiple VMs while sharing its resources and running different applications within the VMs for better utilization of the existing resources [2]. Studies show that server consolidation increases data center utilization, thus reducing energy consumption and operational costs [3].