Part One – Introduction
This article is written for IT professionals who are interested in optimizing their Windows Azure cloud applications by dynamically adjusting compute resources to accommodate for changes in demand – in realtime.
The need for dynamic scaling is great: without it, your Azure applications will be performing poorly when demand is unexpectedly high and waste a lot of money when demand is low. Your application is charged for all allocated compute instances even if they are underutilized or not utilized at all.
There are a number of articles and examples available that allow one to start on the road to creating their own auto-scaling engine for Windows Azure. The most important thing to know is that you will need to hook into Service Management REST-based API. If you’re looking to implement this yourself, I highly recommend reading this article by Neil Mackenzie. It summarizes all the key information as well as provides links to all known open-source examples and articles on this topic.
However, if your company would rather concentrate on developing its core business products and leave the scaling work to others, whose core competency is dynamic scaling in Azure, then read on.
By following instructions in this article, you will be able to start monitoring and auto-scaling your Windows Azure application in about 5-10 minutes by using the AzureWatch service. The service is currently free while in public beta and is expected to be released in the very first days of 2011.
Part Two – Installation
At its core, AzureWatch aggregates and analyzes performance metrics and matches these metrics against user-defined rules. When a rule produces a “hit”, a scaling action occurs. This process is distributed across your on-premises computer that is responsible for sending raw metric data to AzureWatch servers, and AzureWatch servers that are responsible for aggregating large amounts of metric data and deciding when your compute instances need to be scaled. The actual scale actions originate from your local computer.
Part Three – Start Control Panel
After installation is complete, start AzureWatch ControlPanel and login with your newly created account. You will be presented with a wizard to enter your Azure connection information.
Subscription ID can be found on your Windows Azure developer portal. If you do not already have the X.509 certificate, AzureWatch can create one for you. What’s important to point out is that AzureWatch needs your X.509 certificate to be located in the LocalSystemMy certificate store. If you already have a certificate on your computer, chances are that it is located in PersonalMy certificate store. In order to copy it from one store to another, you will need to export your X.509 certificate from PersonalMy store into .pfx file and then import it into LocalSystemMy store. Alternatively, you can choose to create a new certificate that will be installed into LocalSystemMy certificate store automatically, and you will only have to upload it to your Windows Azure account.
Please visit AzureWatch page to understand how your certificates and storage keys are kept secure.
After entering your account SubscriptionID and specifying a valid X.509 certificate, press Connect to Azure. You will be presented with a list of storage accounts. Storage account that is monitored by your Diagnostics Monitor is required.
On the next wizard page you can validate default settings for such things as throttle times, notification email, etc.
After the connection wizard is completed, AzureWatch will figure out what services, deployments and roles are present. For each role found, you will be offered a chance to create simple predefined rules.
The two sample rules offered are simple rules that rely upon calculating a 60-minute average CPU usage across all instances within a Role. We will come back to these rules in a short while. For now, wizards need to be completed.
Part Four – First time in Control Panel
After wizards complete, you are presented with a dashboard screen. It likely contains empty historical charts as no data has yet been collected. Navigation Explorer on the left shows various parameters that can be customized, while Instructions tab on the right shows context-sensitive instructions.
It is a good idea to visit the the Rules section to see the rules that have been defined by the wizard. Two sample rules should be present and can be edited by double-clicking on each. Rule Edit screen is simple yet powerful. You can specify what formula needs to be evaluated, what happens when the evaluation returns TRUE, and what time of day should evaluation be restricted to. To make formula entry easier, a list of already defined aggregated metrics is provided. Hovering over the formula box will display allowed operands.
One last place to visit before starting the monitoring process is the screen that contains safety limits for the number of instances that AzureWatch can scale up to or down to. By clicking on the appropriate Role name in the navigation explorer, you will be presented with a chance to modify these boundaries.
This is it. If you are ready, press “Publish Changes” button. Provided your AzureWatch Monitor service is running, it will pick up these configuration settings in the next iteration of its internal loop and instruct Azure Diagnostics Manager to start capturing the metrics required for formulas to work. Windows Azure will need a few minutes to instruct your instances to start capturing those metrics afterwards, and then a few minutes more before these metrics will be transferred to your storage. Thus, give AzureWatch at least 5-10 minutes before expecting to see anything on the Dashboard screen.
Part Five – A few tips and tricks
Some things to keep in mind while using AzureWatch
If you just started using AzureWatch and have not accumulated enough metric data, evaluation of your rules may be suspect as your aggregations will lack sufficient data. It maybe prudent to disable scaling inside Rules in the beginning so that your scaling actions do not trigger unexpectedly.
Metric transfer occurs only while Monitor service is running. If you stopped Monitor service for an hour and then restarted it, it does not “go back” and send the missing hour’s worth of metrics to AzureWatch.
AzureWatch will always instruct your instances to capture metrics that are defined in the Raw Metrics screen. You do not need to do anything special with existing or newly started instances. It may be worthwhile, however, to visit the System Settings screen to further configure how metric enforcement and gathering works.
AzureWatch will send a notification when it scales your instances up or down. In it, it will provide values for all the aggregated metrics it knows about to help you understand why the scaling event occurred.
Since AzureWatch is a hybrid SaaS, the two Windows components must always be up to date in order to properly connect to the remote service. Therefore, both of the programs automatically self-update whenever a new version is released.