Algorithmic Aspects of Cloud Computing