Currently Apache CloudStack supports AutoScaling feature with external Citrix NetScaler device for three purposes: monitoring, grouping and load balancing. For anyone don't know about it, please take a look into Admin guide. Also, there is a pretty explanation below:
Starting from a motivation about creating a native solution of AutoScaling feature, I made some changes to reproduce NetScaler engine operation. The first version still keeps the similar steps compared with the current NetScaler version, while adding two new native counters (Linux User CPU - native & Linux User Memory - native). You can find more detail from my presentation here:
Chiradeep, CloudStack PMC, has a vision to improve my hacking with some new changes below:
+ Need to remove Load Balancing feature from AutoScaling. That’s very simple to do.
+ Need to use SNMP for monitoring not only instance-level but also application-level.
+ Also, supporting well KVM hypervisor
The idea is that the monitoring (WHAT to monitor and HOW to monitor) is separate from the autoscaling decision.
The autoscaling decision should be a pure mathematical decision.
The various services can interact via Java API(s). In this case the deployment is simple (within the CS management server).
However, the monitoring service likely needs more scale than regular CloudStack orchestration. Ideally there should be the option of running the monitoring service outside of the CS MS.
- monitor counters in VMs/hypervisors/network appliances
- provide aggregates and threshold crossing outputs
- communicates threshold crossing info to autoscale service
Auto Scale Service
- decides to scale based on policy and threshold crossing info from monitoring service
- communicates with CS MS to perform scale-up/scale-down
+ AutoScale API: keep the same
+ Monitor API:
+ HTTP request from CS to Monitor device