On Thursday, May 12th someone pretty high up in the company hierarchy decided we had to have a web application ready on the 19th. The catch: it had to be able to handle a shitload of traffic in only 2 days time. After consulting with a couple of specialists and reviewing our options, we decided to go for it with our existing web-development partner. Because of available expertise and resources however, we decided to switch from J2EE to .Net and to deploy the application on Microsoft’s “platform as a service” offering, called Azure.
In 5 days time (what weekend was that?), using a shared Google Docs spreadsheet as project hub (for bug-list, todo’s, translation strings and in document IM) the application was developed, tested and hammered upon with a huge load-test and on Wednesday-evening the final version was deployed on Azure.
The most interesting technical tidbits (as designed by a smart and very motivated lead-developer):
- the architecture is based on Azure’s Compute “web role” and “worker role” instances, with the “web role” instances taking care of capturing user data and putting it on a queue and the “worker role” instances asynchronously picking up, processing and storing the data
- data relevant for the “web role” instances is available in distributed cache
- processed data is stored in Azure Storage’s blobs & tables (i.e. not in Azure SQL)
- static files are offloaded to Azure’s CDN
The application handled a huge amount of traffic the first two days. Due to circumstances the load was especially high on Thursday morning (with over 800 HTTP-requests/second), but performance and availability remained perfect. It was like walking on this fluffy cloud, really: