CHAPTER 1
If you have been developing software, managing infrastructure or even just watching television in the past several years, you have been inundated with references to cloud computing. You also may have been left scratching your head trying to figure out what it all means. It seems that every vendor has a slightly different definition for what cloud computing is and, appropriately, each vendor’s definition is tailored to the products and services that they offer. In simplest terms, cloud computing is just a compelling name to describe the concept of distributed computing over a network that has been a staple of application development for decades (much like when Google popularized the term “Ajax” in the early 2000s and people perceived a new paradigm).
Most vendors do agree on a set of categories into which most cloud computing applications can be placed. The categories are based on the characteristics of the application, most commonly driven by the management tasks distributed among the host platform and customer. These categories (described in more detail later) include Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). For the purposes of discussion, we’ll start with the assumption that a typical enterprise application has the following set of concerns at the infrastructure level (shown in Figure 1):

On-premises solution is a term used to describe the traditional data center where all of the infrastructure and equipment is managed by the owner of the application. It is not a cloud computing model but is included in this discussion to establish a baseline for when cloud computing is not being used. It is also included because some scenarios will include resources that are not hosted in a cloud environment. In this model, all aspects displayed in Figure 1 are under the control and the responsibility of the application owner. When managed well, this often results in having to keep several departments’ worth of specialized staff to operate the pieces of the application as well as significant ongoing capital expenditure.
The Infrastructure as a Service (IaaS) model takes everything below the host operating system on the application stack as the responsibility of the host or host platform, leaving the host operating system and everything above it on the stack as the responsibility of the application owner. This arrangement (shown in Figure 2) allows for fine-grained control of the operating characteristics of the application and its host operating system. It is often seen as the first step that a company takes towards achieving a virtual data center because virtualized servers running the application can often be transferred to the hosted environment with no code changes to the application itself (and with only the configuration changes necessary to reflect that the application has a new home).
Organizations that move from an on-premises model to IaaS typically find cost savings in the form of reduced utility costs from no longer needing to power and cool servers, reduced capital equipment costs from no longer needing to purchase big servers, and reduced personnel expenses from no longer needing staff to perform the physical portions of managing server hardware in the data center.
While significant savings can be achieved with IaaS, organizations maintain the ability and responsibility to control the configuration and management of pieces of the stack that are not directly related to the application code or its data—namely, the host operating system, middleware, and application run time. This can be beneficial in some cases because of the additional control it gives to the owner of the application. But it also requires attention and specialized skills, which makes the IaaS option most appropriate when there is something special about the needs of an application that makes it unsuitable to give up control over these pieces of the stack.

The Platform as a Service (PaaS) model further reduces the pieces of the application stack that must be managed by the application owner to only the application data and application code itself as shown in Figure 3. In this model, the application owner writes code that is designed to run within an application run time that is hosted by the service provider—sometimes limited to a specific set of application programming interface (API) functionality. This model requires far less specific knowledge and skill in the operation and management of network and infrastructure, but leaves some application owners with the uneasy feeling of having critical business assets outside of their reach or control. The mitigation for this uneasiness is often a combination of growing accustomed to the model and finding a partner that can be trusted to keep these assets protected—whether that protection comes from their ability to keep things safe or from a contractual commitment to provide adequate relief if a compromise occurs.

The Software as a Service (SaaS) cloud computing model takes all of the configuration and management responsibilities away from the application owner (as illustrated in Figure 4) and allows the application to simply be used as is (although sometimes with limited customization through configuration) to meet specific goals. This model is often seen used with general-purpose software such as email, word processing, and collaboration tools as well as with certain specific-use offerings that have use across industries. Some examples of SaaS offerings include Microsoft’s Outlook.com and Office365 as well as out-of-the-box Salesforce.com (Salesforce also has a PaaS offering that allows you to build your own custom applications).

While we have looked at on-premises, IaaS, PaaS, and SaaS as distinct models with clearly defined responsibilities (marking the difference between which model an organization is participating in), the reality is most organizations have either settled on an approach that is some combination of these models or are in a transitory state—moving to a desired future state that is one model but still retaining some portion of their previous model. These organizations will either temporarily or permanently use a hybrid model that is some combination of two or more of these models. One example of a hybrid model would be a customer application built on the IaaS or PaaS model, connecting to an on-premises mainframe application that is critical to the organization’s business goals but cannot be migrated to a hosted environment.
In this book we will be looking at the suite of products and services designed to enable cloud computing that Microsoft collectively markets under the Windows Azure brand. Our main focus will be on a specific product of that suite called Windows Azure Web Sites which provides the facilities to quickly and simply host data-driven websites that are suitable for many people’s needs—without additional services and complexity. We will also, at times, look beyond the out-of-the-box features of Windows Azure Web Sites at the other capabilities of Windows Azure products to meet more advanced needs that aren’t covered by the Windows Azure Web Site product.
Note: Windows Azure implements a pay-as-you-go model, so care will be taken in this book to call out when features that incur additional costs are being described. With any cloud-based product, you should make sure that you fully understand the costs of the features that you are using.