Abstract-Cloud computing is the process of providing and managing computing resources such as hardware and software over the Internet as pay-as-you-go. Cloud Service Provider and User are two main players in cloud. On one hand, cloud provider carries number of computing resources in their large datacenters and rent resources out to users on pay-as-you-go basis. On the other hand, there are large numbers of users who have applications with changing loads and request required resources from providers to run their applications slickly. Typically, the goal of providers is to generate as much revenue as possible with minimum investment and proper resource utilization. On the other hand, users want their jobs done at minimal expense. In the Cloud computing resources need to be allocated and scheduled in such a way that providers achieve their objectives and users meet their applications requirements with minimum expenditure. We call this as a cloud resource allocation problem. Resource allocation is traditionally looked upon as an optimization problem hence resource allocation is NP-Hard; limited resources are available and allocate these resources to competitive events/activities such a way that both parties will achieve their goals. 1. Client (End User): Clients are the devices that the end user interact with to manage their information on the client. 2. Provider: Cloud Service provider is an owner of cloud infrastructure who provides services to requester via internet on pay-as-you-basis. 3. Datacenter: A datacenter is a set of physical resources such as CPU, memory, storage, and so on. 4. Virtual Machine: Simulation of a Physical Machine in the form of Software is known as a virtual machine. 5. Physical Machine: Physical machine is a set of hardware like CPU, RAM, I/O which are request for applications.