How can a company create an application that has truly global reach and that can scale rapidly to meet sudden, massive spikes in demand? Historically, companies had to invest in building an infrastructure capable of supporting such an application themselves and, typically, only large companies would have the resources available to risk such an enterprise. Building and managing this kind of infrastructure is not cheap, especially because you have to plan for peak demand, which often means that much of the capacity sits idle for much of the time. The cloud has changed the rules of the game. By making the infrastructure available on a “pay as you go” basis, creating a massively scalable, global application is within the reach of both large and small companies.
The cloud platform provides you with access to capacity on demand, fault tolerance, distributed computing, data centers located around the globe, and the capability to integrate with other platforms. Someone else is responsible for managing and maintaining the entire infrastructure, and you only pay for the resources that you use in each billing period. You can focus on using your core domain expertise to build and then deploy your application to the data center or data centers closest to the people who use it. You can then monitor your applications, and scale up or scale back as and when the capacity is required.
Yes, by locating your applications in the cloud you're giving up some control and autonomy, but you're also going to benefit from reduced costs, increased flexibility, and scalable computation and storage. This guide shows you how to do this.
Who This Guide Is For
This guide is the second volume in a series about Windows Azure. Volume 1, Moving Applications to the Cloud,discusses the hosting options, cost model, and application life cycle management for cloud-based applications; and describes several scenarios for migrating an existing ASP.NET application to the cloud. This guide demonstrates how you can create from scratch a multi-tenant, Software as a Service (SaaS) application to run in the cloud by using the latest versions of the Windows Azure tools and the latest features of Windows Azure.
The guide is intended for any architect, developer, or information technology (IT) professional who designs, builds, or operates applications and services that run on or interact with the cloud. Although applications do not need to be based on the Microsoft Windows operating system to work in Windows Azure, or be written using a .NET language, this guide is written for people who work with Windows based systems. You should be familiar with the Microsoft .NET Framework, Microsoft Visual Studio development system, ASP.NET MVC, and Microsoft Visual C#.
Why This Guide Is Pertinent Now
In general, the cloud has become a viable option for making your applications accessible to a broad set of customers. In particular, Windows Azure now has in place a complete set of tools for developers and IT professionals. Developers can use the tools they already know, such as Visual Studio, to write their applications for the cloud. In addition, Windows Azure SDK includes a storage emulator and a compute emulator that developers can use to locally write, test, and debug their applications before they deploy them to the cloud. There are also tools and an API to manage your Windows Azure accounts. This guide shows you how to use all these tools in the context of a common scenario—how to develop a brand new, multi-tenant, SaaS application for Windows Azure.
How This Guide Is Structured
Here is the tube map for the guide:
“The Tailspin Scenario” introduces you to the Tailspin company and the Surveys application. It provides an architectural overview of the Surveys application; the following chapters provide more information about how Tailspin designed and implemented the Surveys application for the cloud. Reading this chapter will help you understand Tailspin's business model, its strategy for adopting the cloud platform, and some of its concerns. It will also help you to understand some of the fundamental choices Tailspin had to make when designing the application.
“Hosting a Multi-tenant Application on Windows Azure” discusses the major considerations that surround architecting and building multi-tenant applications to run on Windows Azure. It describes the benefits of a multi-tenant architecture and the trade-offs that you must consider. This chapter provides a conceptual framework that helps you understand the topics that are discussed in more detail in the subsequent chapters.
“Choosing a Multi-tenant Data Architecture” describes the important factors to consider when designing the data model for multi-tenant applications. The major factors are how you can partition data, plan for extensibility and scalability, and how you can apply your design using Windows Azure storage and a relational database. The chapter describes how the Surveys application stores data in both Windows Azure tables and blobs, and how the developers at Tailspin designed their storage classes to be extensible and testable. It also describes the role that Windows Azure SQL Database plays in the Surveys application.
“Partitioning Multi-tenant Applications” describes how you can partition your application code for multiple tenants. This includes how you can use Cloud Services web and worker roles, queues, and the Model View Controller pattern to best effect in a multi-tenant application. The chapter also discusses issues around caching, and how Tailspin solved some specific problems related to implementing session state.
“Maximizing Availability, Scalability, and Elasticity” describes techniques you can use to get the best performance and responsiveness for your applications, especially when they are designed to support multiple tenants. The chapter covers topics such as hosting the application in multiple geographic locations, using the Content Delivery Network (CDN) to cache content, read and write patterns using queues, paging and displaying data, and autoscaling the role instances.
“Securing Multi-tenant Applications” describes authentication and authorization scenarios for multi-tenant applications when supporting individual subscribers and users, and through trust relationships. It also examines how Tailspin implemented protection and isolation of sensitive data, and how it protects session tokens.
“Managing and Monitoring Multi-tenant Applications” examines application lifecycle management (ALM) considerations for multi-tenant applications, how Tailspin manages and monitors the application, and how the application supports on-boarding, customization, and billing for customers.
What You Need to Use the Code
These are the system requirements for running the scenarios:
- Microsoft Windows 7 with Service Pack 1, Microsoft Windows 8, Microsoft Windows Server 2008 R2 with Service Pack 1, or Microsoft Windows Server 2012 (32-bit or 64-bit editions).
- Microsoft .NET Framework version 4.0.
- Microsoft Visual Studio 2010 Ultimate, Premium, or Professional edition with Service Pack 1 installed, or Visual Studio 2012 Ultimate, Premium, or Professional edition.
- Windows Azure SDK (includes the Windows Azure Tools for Visual Studio). See the Release Notes for information on the specific version required.
- Microsoft SQL Server 2012, SQL Server Express 2012, SQL Server 2008, or SQL Server Express 2008. See the Release Notes for information on specific versions depending on your operating system.
- ASP.NET MVC 4 Framework.
- Windows Identity Foundation. This is required for claims-based authorization.
- WebAii testing framework. This is required only if you want to run the functional tests. Place the assembly ArtOfTest.WebAii.dll in the Lib\WebAii folder of the examples.
Other components and frameworks required by the examples are installed using NuGet when you run the solutions. See the Release Notes included with the examples for instructions on installing and configuring them.
Where to Go for More Information
There are a number of resources listed in text throughout the book. These resources will provide additional background, bring you up to speed on various technologies, and so forth. For your convenience, there is a bibliography online that contains all the links so that these resources are just a click away.
A panel of experts comments on Tailspin’s development efforts and on the example application provided for this guide. The panel includes a cloud specialist, a software architect, a software developer, and an IT professional. The delivery of the application can be considered from each of these points of view. The following table lists these experts.
Bharath is a cloud specialist. He checks that a cloud-based solution will work for a company and provide tangible benefits. He is a cautious person, for good reasons.
“Implementing a single-tenant application for the cloud is easy. Realizing the benefits that a cloud-based solution can offer to multi-tenant applications is not always so straight-forward.”
Jana is a software architect. She plans the overall structure of an application. Her perspective is both practical and strategic. In other words, she considers the technical approaches that are needed today and the direction a company needs to consider for the future.
“It's not easy to balance the needs of the company, the users, the IT organization, the developers, and the technical platforms we rely on.”
Markus is a senior software developer. He is analytical, detail-oriented, and methodical. He's focused on the task at hand, which is building a great cloud-based application. He knows that he's the person who's ultimately responsible for the code.
“For the most part, a lot of what we know about software development can be applied to the cloud. But, there are always special considerations that are very important.”
Poe is an IT professional who's an expert in deploying and running applications in the cloud. Poe has a keen interest in practical solutions; after all, he's the one who gets paged at three o’clock in the morning when there's a problem.
“Running applications in the cloud that are accessed by thousands of users involves some big challenges. I want to make sure our cloud apps perform well, are reliable, and are secure. The reputation of Tailspin depends on how users perceive the applications running in the cloud.”
If you have a particular area of interest, look for notes provided by the specialists whose interests align with yours.