Windows Azure Migration Sanity Check by Mark Seemann
Recently I attended a workshop where we attempted to migrate an existing web application to Windows Azure. It was a worthwhile workshop that left me with a few key takeaways related to migrating applications to Windows Azure.
The first and most important point is so self-evident that I seriously considered not publishing it. However, apparently it wasn't self-evident to all workshop participants, so someone else might also benefit from this general advice:
Before migrating to Windows Azure, make sure that the application scales to at least two normal servers.
It's as simple as that - still, lots of web developers never consider this aspect of application architecture.
Why is this important in relation to Azure? The Windows Azure SLA only applies if you deploy two or more instances, which makes sense since the hosting servers occasionally need to be patched etc.
Unless you don't care about the SLA, your application must be able to ‘scale' to at least two servers. If it can't, fix this issue first, before attempting to migrate to Windows Azure. You can test this locally by simply installing your application on two different servers and put them behind a load balancer (you can use virtual machines if you don't have the hardware). Only if it works consistently in this configuration should you consider deploying to Azure.
Here are the most common issues that may prevent the application from ‘scaling':
- Keeping state in memory. If you must use session state, use one of the out-of-process session state store providers.
- Using the file system for persistent storage. The file system is local to each server.
Making sure that the application ‘scales' to at least two servers is such a simple sanity check that it should go without saying, but apparently it doesn't.
Please note that I put ‘scaling' in quotes here. An application that runs on only two servers has yet to prove that it's truly scalable, but that's another story.
Also note that this sanity check in no way guarantees that the application will run on Azure. However, if the check fails, it most likely will not.