  Cloud computing is a revolutionary process that has impacted the manner of using networks. It allows a high level of flexibility as Virtual Machines (VMs) run elastically workloads on physical machines in data centers. The issue of placing virtual machines (VMP) in cloud environments is an important challenge that has been thoroughly addressed, although not yet completely resolved. This article discusses the different problems that may disrupt the placement of VMs and Virtual Network Functions (VNFs), and classifies the existing solutions into five major objective functions based on multiple performance metrics such as energy consumption, Quality of Service, Service Level Agreement, and incurred cost. The existing solutions are also classified based on whether they adopt heuristic, deterministic, meta-heuristic or approximation algorithms. The VNF placement in 5G network is also discussed to highlight the convergence toward optimal usage of mobile services by including NFV/Software-Defined-Network technologies. 
Multi-Criteria Virtual Machine Placement in Cloud Computing   Environments: A literature Review