Resource Allocation And Scheduling In Heterogeneous Cloud Environments