The whole area of autoscaling Windows Azure applications comes up as a regular topic in discussions about the platform, mainly because there isn’t an “out the box” solution for it. This is for a number of factors, not least of which is the fact that we charge for roles by the hour, so we don’t want to autoscale up and cause folk to be billed more unless they are sure they want the scale. Its also because a complex application with lots of moving parts could have a lot of logic about when, where and how to scale up and down.
Azurewatch is one of the first products to take the API, and create a service based on it. There is a good overview of this topic and how this specific product works here. If you look at it, you start to get a feel for how complex this whole area is. AzureWtach builds up all sorts of performance metrics, which can then have rules defined against them, such as if CPU is at more then 70% for 30 minutes, then increase the role instance count. But then it gets more complicated because, say, this should only happen under certain conditions, or to some maximum limit, etc.