This project was meant to serve as a deeper exploration to topics covered in computer networking- both in class and in literature. My group's project involved researching the issue of resource allocation and task scheduling in the cloud. The driving issue behind improving efficiency of task scheduling and resource allocation is to balance quality of service expectations of end users while managing the demand on cloud service providers. This project included 3 main parts: A literature review on current solutions to the task-scheduling/resource allocation problem, an implementation of some of these solutions, and a full report explaining our findings and open research areas and technical challenges. Most of the focus of my group's report centered around reasearching, classifying, and implementing various algorithms for task-scheduling presented in literature.
My responsibilities to the project were researching hybrid (combination) algorithms for task scheduling and implementing the Particle Swarm Optimization algorithm on a simulated cloud environment. At its core- the problem of task-scheduling is an optimization problem, so it makes sense that various numerical optimization algorithms have been used to approach the issue. After a survey of literature the most commonly implemented hybrid algorithms for task-scheduling were hybrids of the Genetic Algorithm, hybrids of the Ant Colony Optimization algorithm, and hybrids of the Particle Swarm algorithm. The motivation behind using a hybridized algorithm for task-scheduling is to avoid issues with low convergence on a solution or slow search speeds. If you'd like to read more in depth about the background and survey part of this project- I'd encourage you to check out the project artifact links at the bottom of this page.
For simulation, my group chose to use CloudSim- an open-source Java library that provides numerous tools and code examples to set up a simulated cloud datacenter. In CloudSim tasks are modeled by "cloudlets". Each cloudlet has computational resources attached to it. The CloudSim library also provides a "broker" class that is responsible for assigning cloudlets to simulated virtual machines. The broker class by default schedules tasks using a first come first serve process for scheduling (i.e the cloudlets are scheduled in the order they're created). In order to implement the Particle Swarm algorithm for scheduling- I extended the broker class and used the Jswarm library. PSO is an algorithm that uses a swarm of "particles" (usually represented by vectors) to traverse the search space and eventually converge on an optimal solution. Each particle's position represents its personal best and all particles eventually converge around the global optimum of the swarm. I chose to implement the PSO algorithm because it's relatively easy code-wise to implement (4 steps) and it also provided adequate results when being used to optimize task-scheduling in the literature surveyed.
While my main focus area is not in cloud applications or computer networking- this project still gave me insight into valuable tools that could be applied to my own areas of study/interest. Namely this project served as a good refresher to Java programming. Throughout my college career I mostly worked with Python, C and C++ so returning to Java was after not using it for 4-ish years was good for me. The other takeaway from this project was getting more exposure to various numerical optimization algorithms. Numerical optimization is more of a math topic than a computer networking topic, and comes up a lot in the field of robotics. Particle-swarm in particular is used in path planning for robotics- which is another reason why I chose to implement it.