Cloud computing offers on-demand network access to the computing resources through virtualization. This paradigm shifts the computer resources to the cloud, which results in cost savings as the users leasing instead of owning these resources. Clouds will also provide power constrained mobile users accessibility to the computing resources. In this thesis, we develop performance models of these systems and optimization of their resource allocation. In the performance modeling, we assume that jobs arrive to the system according to a Poisson process and they may have quite general service time distributions. Each job may consist of multiple number of tasks with each task requiring a virtual machine (VM) for its execution. The size of a job is determined by the number of its tasks, which may be a constant or a variable. In the case of constant job size, we allow different classes of jobs, with each class being determined through their arrival and service rates and number of tasks in a job. In the variable case a job generates randomly new tasks during its service time. The latter requires dynamic assignment of VMs to a job, which will be needed in providing service to mobile users. We model the systems with both constant and variable size jobs using birth-death processes. In the case of constant job size, we determined joint probability distribution of the number of jobs from each class in the system, job blocking probabilities and distribution of the utilization of resources for systems with both homogeneous and heterogeneous types of VMs. We have also analyzed tradeoffs for turning idle servers off for power saving. In the case of variable job sizes, we have determined distribution of the number of jobs in the system and average service time of a job for systems with both infinite and finite amount of resources. We have presented numerical results and any approximations are verified by simulation. The performance results may be used in the dimensioning of cloud computing centers. Next, we have developed an optimization model that determines the job schedule, which minimizes the total power consumption of a cloud computing center. It is assumed that power consumption in a computing center is due to communications and server activities. We have assumed a distributed model, where a job may be assigned VMs on different servers, referred to as fragmented service. In this model, communications among the VMs of a job on different servers is proportional to the product of the number of VMs assigned to the job on each pair of servers which results in a quadratic network power consumption in number of job fragments. Then, we have applied integer quadratic programming and the column generation method to solve the optimization problem for large scale systems in conjunction with two different algorithms to reduce the complexity and the amount of time needed to obtain the solution. In the second phase of this work, we have formulated this optimization problem as a function of discrete-time. At each discrete-time, the job load of the system consists of new arriving jobs during the present slot and unfinished jobs from the previous slots. We have developed a technique to solve this optimization problem with full, partial and no migration of the old jobs in the system. Numerical results show that this optimization results in significant operating costs savings in the cloud computing systems.