Autoscaling of custom resources per VM Instance

Topics: Autoscaling Application Block ("Wasabi"), Building and extending application blocks
Mar 31, 2013 at 4:28 PM

I have an azure worker role with many instances and I'm using autoscaling to scale up/down the number of instances based on CPU load, which is working great, good job.

Now I want to implement some instance-specific autoscaling of resources using the autoscaling block, since it already comes with a lot of scheduling and operands logic which I could reuse. However I'm struggling to get away from the 'role' based approach that autoscaling is build around.

Essentially what I need to do is for each VM instance, every X minutes I need to look at how much CPU load its been taking (ideally an average over X minutes) and if it's above some 'V' value, trigger an action (which I've already implemented) that will decease the load on that instance.

Specifically I have two problems -

1) The operands (performance counters) force me to look at aggregate values over all instances within a role. I need to consider each instance separately.

2) I'm using Blob Execution Lease that protects me from running the autoscaling on multiple instances. Now I need to run a different configuration of autoscaling in each instance and can't figure out how to configure EntLib to do that.

Any ideas?
Apr 1, 2013 at 2:48 AM
As you say the desired approach is a bit at odds with the design of the block so that's going to make it difficult to do what you want.

I'm thinking you are going to have to look at customizing the blocks behavior (see E.g. custom operands.

You may be able to not use the blob lease (I haven't tried it and the documentation says you shouldn't do it) in order to run autoscalers on every instance but you would have to ensure that the autoscalers running on the instance are only managing the specific instance and not overall constraint rules etc. since that could cause conflicts.

Randy Levy
Enterprise Library support engineer
Support How-to