Windows Azure – First Impressions [Blog]
I have to admit I’m really excited about Azure – I love cloud computing, it frees developers from all the IT duties like load balancing, server maintenance etc.The ugly truth is that most developers have absolutely no clue about the IT infrastructure their applications run on. Applications are built on the framework and then dumped on the production systems to see how it runs. If (and when) it doesn’t scale developers think of it as an IT issue and IT think of it as a development issue. Developers often end up getting the blame for this which is fair, but I think the .NET framework should share a bit of the blame, programming in a managed code environment encourages developers to focus solely on coding the application. The .NET framework offers very little in terms of API’s to scale applications.
Enter the Azure cloud, now .NET developers have an arsenal of API’s to manage and scale an application. Setting up a production environment takes a few clicks and all the infrastructure is fully managed. Seems a wonderful promise, but what it the reality?
I waited until October to kick the tires of Azure, I normally only use software in Beta 2 as I’ve spent too many hours trying to figure out an issue only to find that it is a known bug (which is nevertheless undocumented) and is fixed in the next release. So here’s my first impressions:
- Sign-up process is just terrible. Long story short – you need a a Live ID (or hotmail account as we normally call it) you are then forwarded to Microsoft Connect (which I never heard of before and seems to have little to do with Azure), the Connect site crashed on me several times, the account status on Connect was listed as ‘participating’ in Azure despite the fact I still had to wait for my activation key and no email was ever sent to confirm the registration. Looking through the forums, I am definitely not alone on this and I hope this improves as Azure matures.
- Web interface is a little sluggish, but quite intuitive and easy to navigate. I would have liked to see more AJAX used as there are a lot of page refreshes. In future, I’d hope to see a slick Silverlight interface.
- The SQL Azure web interface is extremely limited, just create and drop databases, collect connection string and set up firewalls. Thats it. I was hoping for a much more extensive set of online controls such as managing users and logins. This functionality is of course available programmatically and through SSMS (see below) but some common functions on the UI is always useful as well.
- No SQL Azure backup ! As far as I am concerned this is the biggest weakness of Azure at launch. Azure’s promise to replicate the data at least three times protects against data loss due to hardware or systems failure, but a key role of backup is the ability to roll back after an error (such as accidentally dropping the entire database!). And for this, Azure provides nothing. There are workarounds of course such as BulkCopy or BCP, but Azure should provide this out of the box. Backups are promised in 2010 and it is difficult to make a strong case for Azure until then.
- Encryption and compression are also absent but promised for 2010.
- Azure Data Storage looks great – Blobs, Tables, Queues and Drives. All with simple API’s to manage them- saving and loading a Blob takes just a few lines of code. Still quite a bit of flux in finalizing the Storage API’s for Azure’s launch in January 2010. The API’s are not included as standard in the Visual Studio project templates and you have to build the Storage dll and then reference it in your project.
- Tables! Definitely my favorite feature of Azure right now. Ever thought setting up a database for a simple task like handling a few users and their comments was overkill? Tables are perfect for this sort of semi-structured data. Simple to setup and interact with and very fast, more importantly they are free.
- Tables are my favorite feature but the CDN comes a very close second. Azure comes with a built in content Devliery Network for blobs. CDN’s ensure that large files are served from their closest location thus reducing the latency that end users experience requesting large files from a very distant server. The Azure CDN currently has 18 geographic locations to server the files from. Configuration is a breeze (just change the URI of the file to be accessed). Caching is supported and there is also the option to register a custom domain name. Pricing for the CDN will be additional to standard blob storage but there as been no announcement as yet.
- The local development environment provided in the Azure SDK works very nicely but there is no local version of SQL Azure. You have to use a local SQL Server for testing which is far from ideal as there are a lot of incompatibilities between SQL Server and SQL Azure (such as User Defined DataTypes not supported in SQL Azure). It is very easy to connect to an Azure database, simply substitute in a SQL Azure connection string, but this isnt really the point what we’d like is a full local environment for testing. The only real solution now is a local Windows Azure environment connected to an online testing SQL Azure database.
- SSMS can connect to SQL Azure databases but it is far from full featured as it doesnt support viewing objects from the Object Explorer so lots of TSQL is needed to work with the database. There are some third party tools available (such as SQL Azure Manager) which go some way to plugging this gap.
- Deploying apps is a snap, Visual Studio rolls the app into a package file which is the actual application and a configuration file which are the configuration settings. These are both uploaded from the Azure developer portal and the app can be moved to production with a few clicks. Apps which use Windows Azure Storage have an additional deployment step as Storage requires separate provisioning in Azure but the process is still very smooth.
- Migrating existing apps is another story. I admit I didnt dive into this in great depth but migrating an app is not going to be painless. For starters there are the SQL Server features that Azure doesnt support, there is an Azure migration wizard on CodePlex but it won’t be able to account for some inconsistencies such as the USE statement not being support in SQL Azure. The new API for logging, accessing files is now being handled by Azure Storage and just two of the issues that existing .NET apps would have to handle in a migration. It seems Azure will be mainly used for running purpose built apps and not for running existing apps.