A. We're constantly hearing about "the cloud" and one of the cloud services from Microsoft is the Windows Azure platform. However, many people are unsure what this is and how it compares to other cloud services.

At the most basic level, Azure can be thought of as an application platform that's hosted by Microsoft where you can run your applications that have been designed for Azure. It's an open platform, but there are a few considerations, because your application will be running in a distributed manner. As a customer, your only requirement is to develop the application to meet the Azure platform requirements—you don't need to worry about any infrastructure components.

Windows Azure is made up of three major layers:

  • The fabric - The abstracted set of computing resources that are used to run applications. The fabric is essentially a collection of computers.
  • Storage - A location to store data that can be accessed by the entire datacenter. Storage can contain binary large objects (BLOBs) that can contain any type of data (such as images and media), tables for structured data (but not relational data) and queues (place items on, take off for asynchronous messaging). Three replicas of all data exist at all times to provide resiliency for your data. Windows Azure also supports Windows Azure Drives, which are essentially mountable NTFS volumes that can be accessed by the applications as a disk instead of as BLOBs, tables, or queues. Windows Azure Drives only supports one concurrent writer, but it supports multiple concurrent readers. Note that if you need relational database functionality, there's a separate SQL Azure service that can be used to provide relational functionality found in SQL Server. Also note that while queues can be used for asynchronous communication, Windows Azure also supports synchronous communication between roles through the Azure API, which facilitates communication between distributed instances of the roles for the application. Queues are considered reliable and durable while synchronous communication is considered unreliable, which means you need to handle no response situations within the application when using synchronous communication.
  • Developer Experience/SDK - This layer focuses on letting developers create rich applications to run in Windows Azure. Generally, the only specific consideration for Azure is to not create applications with state information, because the application is running on multiple servers and so would not maintain the state cross-box.

Think of Windows Azure as a place to run your applications in a Microsoft hosted environment. Azure is a highly scalable and available environment and users are billed based on actual usage, a utility model—you just pay for what you use and that can vary over time.

Typical usages of Windows Azure include:

  1. Web applications that require scalability today or in the future.
  2. Grid computing where you have a limited-run workload that requires large amounts of processing but is a one-time event. Consider a large data file conversion. You can upload the data to the Windows Azure storage, perform the conversion, then shut down the service.
  3. On-premise applications that need access to massive amounts of storage. On-premise applications can connect to the Windows Azure storage over HTTP without running the actual applications in the Windows Azure fabric.
  4. Legacy application migration. This can give you greater scalability and availability and less administrative overhead (because the application is no longer hosted in-house).

It should be noted that while .NET managed code was the initial requirement to run in Windows Azure, this is no longer the case. You have greater flexibility to use other developer toolsets, such as  PHP and native code. Think of Windows Azure as being like Windows—it's the platform for your applications, but the actual applications aren't limited to a specific developer toolset.

How does this differ from other cloud solutions? Amazon services is more of a virtual infrastructure service,where they run your virtual machines. With Azure, you focus only on the application. Google Apps is more like Azure in that it's an application hosting solution, but it has a limited set of developer tools that are supported, giving less flexibility.

For more information, see Microsoft's site about Azure.