Learning about Windows Azure

To prepare for a new role I’m transitioning into at Microsoft (SDE II – finally!) I’m ramping up on Windows Azure.

For one it sounds a lot like the “distributed operating system” that was alluded to in grad school. Analogies abound. So, for instance, the relationship between Windows (or any other OS) running on a single machine is similar to the relationship between Windows Azure running on lots of machines (more specifically, virtual machines).

Windows provides a program with access to the resources of a machine; CPU, storage, memory, network, etc…

Windows Azure provides a program with access to the resources of a cluster of machines: compute, storage, etc…

The analogy falls apart if extended too far because on Windows traditional applications are single instance. That is, a user launches an executable and uses that single instance of the running process to accomplish whatever functionality the program provides.

Windows Azure, on the other hand, seems to imply an organization of work more similar to the way the Web works. To access a program on the web you enter its URL (analogous to clicking on the executable). If it’s a popular program (e.g., amazon, hotmail, etc…) then there’s a good chance that a single request can be serviced by 1 of several load balanced servers. And the next request (say, clicking on a link to your account data) might well be serviced by a different web server.

In Windows Azure parlance this maps to Roles executing in Instances. Any 1 of several Instances may provide the program’s functionality.

There’s more to it of course but the same issues that you run into moving from a traditional client program (single instance, built in semi-persistent/stateful) to a web application (multiple instances, no built in persistence/stateless) apply.