Microsoft Azure has changed dramatically since it was launched in 2010. Microsoft decided early on to focus directly on what developers need and has been leading the industry when it comes to “Platform as a Service” for Windows & .NET developers ever since. This article is a review of some of the key innovations they got right for developers from Stackify, a provider of APM for Azure.
Putting Apps First – Cloud Services & App Service
Ask any developer and the #1 thing they hate is dealing with any type of hardware. Azure was one of the first platforms available where .NET developers could deploy their app and specify what size of server they wanted and how many of them. Microsoft took care of the rest, including provisioning and deploying the servers. But one of the other key benefits is not having to deal with things like Windows Updates or Active Directory. This is what made me pick Azure over AWS 4 years ago.
Azure Web & Worker Roles were Microsoft’s first attempt at this. They work well, but have a few pain points. Very slow to deploy. Can’t change the instance size after deployment. Configurations via service definitions can get complicated. My biggest complaint is that they can get expensive quickly if you have a lot of small apps. You can’t easily pack multiple apps onto fewer servers and you get stuck paying even more for staging servers. Luckily, Microsoft has solved all of these issues with Azure Web Apps.
I think it is fair to say that Azure Web Apps and the entire App Service platform is V2 of the original Cloud Services. It solves a lot of the negatives of the original Cloud Services while further abstracting away the underlying servers supporting the apps. As a developer, I’m all for this. I think the future of hosting any type of app is on Azure Web Apps. It has never been easier to deploy an app from Visual Studio, git or a myriad of other ways.
Low Cost Hosting via App Service Plans
When you first start using Azure Web Apps, I think the whole notion of App Service Plans is weird and takes a little bit to get your head wrapped around. The power of them allows you to create a set of server resources, let’s pretend 3 servers, and then pack as many apps as you want on to those 3 servers. Then when you need to scale up or out, you just adjust the App Service Plan. This allows you to host a whole lot of smalls apps very cheapily. Something you could not easily do with Web Roles or do on other platforms like AWS Elastic Beanstalk.
App Service Plans are great for dividing up environments like production, test, and dev. You can allocate more resources to production and very little to dev. You can also move an app from one service plan to another at anytime which is really nice. The flexibility of Azure Web Apps, App Service Plans, and multiple deployment slots makes just about any hosting scenario possible.
Advanced IIS Features are Available
Azure Web Apps have simplified virtually everything about deploying an application. You can modify your applicationHost.config by dropping a transform in the root of your site via the kudu console. Via a special XML transform file and you can modify almost any setting in applicationHost.config.
- Rewrite rules
- Restrict IP access to your site
- Application pool settings
- Customize IIS logs & failed request tracing
Site extensions can also be used to enable more advanced features. A lot of developers probably don’t even know that site extensions exist. But they are insanely powerful and unlock a lot of functionality and potential limitations of Azure Web Apps. Site extensions make it easy to install 3rd party add ons like Stackify APM for Azure to track application performance or a simple tool like a viewer for your Azure IIS logs or event viewer.
Azure Table Storage
There are a lot of different types of storage and databases available these days on Azure. Lost somewhere in the glamour of SQL Azure, Azure Blobs, DocumentDB, ElasticSearch, MongoDB, and others is the simple Azure Table Storage. It is by far the simplest of all the options available, but the key advantage to it is its simplicity, low cost, and massive scale. It is the perfect solution for storing lots of data that you need to access via key lookups.
At Stackify, we ingest a lot of data every day for our clients and have found that table storage works well as a queue for “big data.” The types of data we process include code profiling traces from our APM, metrics, errors, and log data. For a single client we could be processing 100+ GB a day of data and individual profile traces or log messages are too large for using Azure Service Bus. We have built our own APM for Azure around using table storage as a queue including batching, compression, retries, etc. For Stackify, it has become an awesome queue for “big data”.
Background jobs via Web Jobs
As a big user of Worker Roles, when Web Jobs came out I thought they seemed kind of weird and sort of like a gimmick to do cute things in comparison to worker roles. After playing around with it, I can attest that they can do so much more than what most of the simple examples show. They are definitely a good replacement for worker roles and most things you would typically design as a Windows Service can be reimagined as a WebJob that can be scaled out. Coupled with the Azure Task Scheduler feature, you can now run any type of background application.
Massive SQL Scaling via SQL Elastic Pools
As a multi-tenant SaaS vendor, Stackify manages over 1,000 SQL Azure databases. Elastic pools were a feature we begged the Azure team for and we were very happy when they delivered. Trying to manage what performance tier and DTUs to put 1,000 databases in is a nightmare. Being able to group them together in pools and assign resources to a group has greatly simplified our lives and even saved us money! It also helps us increase the performance of our system since we can allocate additional horsepower that can be shared.
Visual Studio Integration
I don’t think anyone would argue that Visual Studio is the best developer IDE available. The Azure integration makes it really simple to deploy an app to Azure and even do some management tasks. Want to deploy to Azure? No problem!
Monitoring Azure Performance with Stackify’s APM for Azure
If you are in need of a good developer solution for monitoring the performance of your Azure applications, be sure to check out Stackify! We have been using Azure for 4 years and we have the best application performance monitoring solution for Azure & .NET developers available!
Have questions about Azure? Hit us up on Twitter @Stackify and maybe we can help. We know a few things about building and scaling massive apps on Azure.