Formulating and managing viable SLAs in cloud computing from a small to medium service provider's viewpoint: a state-of-the-art review