Windows Azure Review
This review is an update of my first impressions of Azure I wrote back when it first launched. Having used SQL and Windows Azure for two months since its full release I thought it would be best to write a updated review (especially since there have been a few updates to Azure since the February 2010 launch).
Here are my observations in no particular order:
- Sign-up process : Although it has been cleaned up a bit it is still not a clean process, Microsoft should take a look at how some of the other cloud providers such as RackSpace handle signups.
- Web interface/portal : The web portal is a very sluggish meaning that deploying an application is slow. But at least it is intuitive and easy to navigate. Could use more AJAX (or even Silverlight) to enhance the user experience as it looks quite dated right now.
- Familiarity : A big question a lot of .NET developers have is how close is Azure to the standard Windows platforms they are used to developing for. In short, if you developed for ASP.NET you will find Azure a very familiar environment. The big changes will be working with Azure Storage, utilizing the cloud facilities (such as scaling) and building more distributed apps with different components of the apps communicating with eachother (most Azure apps will probably have at least two separate roles such as a Web Role and a Worker Role) .
- SQL Azure : This really deserves a review all of its own as it is a key pillar of the Azure platform. The SQL Azure web portal does very little except allow for the creation of databases and setting up firewalls but SSMS 2008 R2 now connects to SQL Azure databases and shows the objects in the objects browser (previously these were invisible rendering the SSMS GUI of little use). Many of the features of SQL Server 2008 are supported in SQL Azure, but unfortunately it is the features that are missing which cause huge issues – backups, compression and encryption are all absent (they are promised for 2010 but looks as though they are still some way off).
SQL Azure comes in two editions – 1GB priced at $9.99 per month and 10GB priced at $99 a month (50GB is coming in June). For starters the 1GB is too large for small developers and 10GB is a big jump from 1GB. The database size should start lower and be charged incrementally in 500MB or 1GB increases in the same way as storage.
With Update 1, SQL Azure now has the ability to automatically move between database editions (ie the standardized sizes offered by Microsoft) however this is still not ideal. Changing between editions requires running an ALTER statement , why can’t the database just scale up and down and be billed according to the size.
- Azure storage : Blobs, queues and tables all work very well and the APIs are comprehensive and simple to implement (I had a simple storage app for uploading and displaying blobs through the CDN working within 30 minutes) . The addition of the CDN is great and it is well integrated into the platform (in contrast with Amazon’s CloudFront which feels like a bolt on to the S3 storage service).
Tables are a non-relational database and a very good solution for developers looking for a simple database. One issue with tables is the current throttling limit of 1000 records per recordset returned from a Table, this means developers have to write additional code to handle this limitation which actually turns out to be a significant increase in the total amount of code to handle simple Table operations.
Windows Azure Drives were recently announced as a fourth storage medium. These analogous to NFTS volumes on standard servers (and the APIs are very similar) , their inclusion in Azure is to ease the pain of migrating legacy apps to the Azure platform but otherwise it doesn’t offer many advantages versus the standard three Azure storage mediums.
- Worker Roles : Worker roles are very similar to windows services and are used to perform background processing for Azure apps. Although Worker Roles don’t offer much new in terms of their features, it is the implementation and integration into Azure apps that is a big step forward. Previously, windows services were not a native project type in Visual Studio and there wasn’t much documentations on using them to perform background tasks for web apps, they also had to be deployed on a Windows Server box separately to the web app (which also meant that developers using shared hosting couldn’t use them). With Windows Azure, Worker Roles are tightly integrated into the Azure Cloud solution, there are plenty of APIs and code samples to integrate it with the core web app and it is deployed in the same package as the web app.
- Deployment : Simple but slow! After apps are tested and debugged on the development environment they are packaged up into two files which are then uploaded in the Azure web developer portal. The deployment process is quite sluggish (20 minutes to deploy my relatively simple app) but it is very neat and uncomplicated.
- Local Development Environment : With the exception of the lack of a local SQL Azure database, the local development environment is a very solid tool. It supports almost all aspects of the Windows Azure platform including multiple instances and Azure storage. The ‘Dev Fabric’ is the location version of the Azure AppFabric (which is a service which monitors and controls the Azure application) . The Dev Fabric is launched automatically when an Azure app is run or debugged from Visual Studio and it gives full access to each instance such as the ability to attach a debugger to an instance.
Deploying an app which is developed and tested locally is a snap, the storage connection string just needs to be changed (and maybe the database connection string if a local SQL Server was used for testing).
- Tools : Almost non-existent. There are only a couple of third party monitoring tools plus several tools to work with Azure storage. In addition there are some open source tools on CodePlex but overall there isn’t much out there currently…
- Migration : This is still a big weakness of Azure and probably means that most apps running on Azure will be custom built for Azure and not migrated to it. There are enough inconsistencies between SQL Azure and SQL Server to mean that a lot of work may have to be done to migrate some databases, there is a migration tool on CodePlex but it doesn’t do too much beyond modify some of the syntax of the database creation script. There is no automatic migration tool for ASP.NET , meaning the changes have to be done manually. This may not always involve a huge modification since Azure Web Roles are very similar to ASP.NET apps but some areas such as storage may need a complete code rewrite.
I will keep this review updated as I use Azure more and the platform matures, please do get in touch if you have any comments or experiences on Azure.