I. Introduction
The provisioning of distributed computational services has followed a constant trend towards increasing degrees of virtualization. The original client/server model led to the evolution of dedicated clusters, followed by grids, and then by large-scale data centers able to host a multitude of diverse applications on virtual machines. That trajectory has now led to cloud computing, with its promise of opaque, elastic, and on-demand allocation of computational resources, and its computing-as-a-utility model.