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.
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.
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.
Enterprise Library support engineer