Nine times out of ten the primary advantage of a Cloud migration is cost by way of scalability, the ability to increase scale to meet high demand and decrease scale to save hardware costs when they are not needed. Along with this ability to scale comes the requirement to manage that scalability. Depending on your specific needs, scalability management can range from a sophisticated custom auto-scaling solution, based on a variety of metrics, to an IT Manager manually changing the number of instances of the application. In this blog, we’ll look at some of the options available for application scaling with Windows Azure.
Manual Management of Scale
The most simplistic means of managing the scalability of your application in Windows Azure is manually controlling the number of instances through the web portal. While not elegant, this can be a viable solution for scaling in applications where there will be few shifts in system usage or if those shifts are highly predictable.
Low cost (assuming the resource is already available)
Enforces a tight control on the application’s hosting costs
Quickly becomes impractical as the fluctuation in demand for the application becomes too high
Scaling as a Service
There are several third-party options for scalability management in Windows Azure. These Scaling as a Service offerings will offload the implementation of a scaling solution, for a monthly fee. However, they still require attention to set up and maintain the rules the service uses to manage the instance counts. Depending on the service provider, these rules can be set based on a variety of factors, but will likely include: schedule, queue size, hardware utilization, and historical data. One of the most popular providers, AzureWatch starts at around $10/month per instance. This can add up quickly on a large scale application, but saves the expense of custom development for scale management, making Scaling as a Service an appealing option for small to mid-size applications.
Low up-front cost for automated scale management
Customizable scaling rules cover the majority of automated scale requirements
Continuous on-going costs
Custom Development: Enterprise Library 5.0 Integration Pack for Windows Azure
If the decision is made to go with a custom solution for managing the scale of your application, the closest to a Microsoft supported option is the Enterprise Library for Azure put out by the Microsoft Patterns and Practices group. It is a sizeable library that includes both an Autoscaling application block, as well as, a Transient Fault Handling application block, which will not be covered here. The Autoscaling application block provides a number of features, including instance autoscaling, as well as, the more advanced application, throttling. Application throttling is the practice of changing the actual behavior based on the load on the application. Some examples of this could be avoiding execution of background processes under high load or disabling certain functionality so that the application remains usable, but more efficient during periods of intense usage. The application block provides highly-customizable rules for managing instance scaling and application throttling. As expected, highly-customizable can often mean highly complex. While the Enterprise Library pack provides some more basic usage, it also has very advanced concepts aimed at supporting enterprise-level applications such as scaling groups, and remains highly-extensible supporting custom actions, operands, and PowerShell Cmdlets. A thorough description of the offerings of the library is available from the Microsoft Patterns and Practices group. The resource is entitled, “Building Elastic and Resilient Cloud Applications: Developers Guide to the Enterprise Library Integration Pack for Windows Azure.” With over 200 pages, the document covers the depth of the library.
Modernize applications and support business initiatives with Microsoft Azure
If your application requires complex scaling rules and needs to have a scale management solution that is robust and extensible, the enterprise library pack is the way to go. If you are looking for a more simplistic solution that provides basic Azure instance scaling, the enterprise library is going to put a lot of unnecessary bloat in your application with features and functionality that will go unused. A smaller, lightweight option is likely more desirable.
Highly-customizable and extensible
Minimal On-going costs
Potentially higher up-front development costs
Likely to include many unused features and functionality that serve to provide unnecessary bloat to an application
Custom Development: Lightweight Scaling Libraries
In many scenarios, the Enterprise Library Integration Pack for Windows Azure is overkill for an application’s autoscaling needs. In these cases, a smaller library, such as AzureScaleMe, is likely to provide an equally satisfactory solution. AzureScaleMe provides many of the most commonly used scaling features of the Enterprise Library in a much smaller package. Similar to many of the other scale management options, AzureScaleMe can scale the number of instances of the application based on queue size, CPU utilization, or a custom metric. You can find a brief three-page technical overview of AzureScaleMe here.
Provides much of the common usage autoscaling functionality
Minimal on-going costs
May not have the extensibility to solve every application autoscaling need
This is not an exhaustive list of offerings for the management of Azure application scaling; however, it should provide insight into the options available. Credera has experience designing and implementing scalable solutions in Cloud environments. If you have questions about Windows Azure application scaling or other questions about Microsoft development, please contact us for more information.