Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
Horizontal VM Scaling (Auto Up/Down Scaling) #41
Implement horizontal scaling of VMs by creating a VM snapshot to enable starting copies of such a VM from that snapshot when a given SLA metric is violated. This should be an auto scaling feature such as the AWS Auto Scaling.
Detailed information about how the feature should work
The horizontal scaling of VMs has to be performed, at least initially, considering the usage of some VM resource such as RAM, CPU or BW. As each Cloudlet has an UtilizationModel for each of these resources, to compute the total VM usage of a given resource it has to be just added up the utilization of all currently executing Cloudlets.
The horizontal auto scale mechanism has to be provided with a predicate that defines a lower utilization threshold (that may be composed of multiple conditions such as utilization of CPU and RAM) and a predicate that defines an upper utilization threshold, like it is used for PowerVmAllocationPolicyMigration.
The horizontal scale can act when dynamically created Cloudlets are submitted to the VM (see feature #43). By this way, Load Balancer defined inside the broker should use the upper utilization threshold to define when a new VM has to be created in order to balance the arrived Cloudlets between such VMs.
It has to use the lower utilization threshold to define when a VM has to be destroyed. An under utilised VM will be destroyed just after all Cloudlets have finished. The Load Balancer won't just place new Cloudlets on such a VM. At the current version, if a VM doesn't have Cloudlets anymore, it will just be destroyed when all VMs of the same broker finishes executing.
The Load Balancer has to be provided with a Supplier that knows how to create new VMs under request. The balancer has to maintain a map with the list of additional VMs that was created to balance the load of a given VM. By this way, there is not need to add a new attribute to relate a VM to another one.
When a VM is created from a snapshot, it must start with no running Cloudlets, simulating a cold boot. The Cloudlets that will execute inside such a new VM will be those ones dynamically created and submitted by the Load Balancer mechanism inside the Broker.
An example scenario where this feature should be used
It will enable starting new VMs in order to fulfil SLA requirements and balance workload.
A brief explanation of why you think this feature is useful
It will allow to evaluate how SLA is fulfilled based on different load balancing policies.