Building Elastic And Resilient Cloud Applications Jeremi Bourgault
Building Elastic And Resilient Cloud Applications Jeremi Bourgault
Building Elastic And Resilient Cloud Applications Jeremi Bourgault
Building Elastic And Resilient Cloud Applications Jeremi Bourgault
1. Building Elastic And Resilient Cloud
Applications Jeremi Bourgault download
https://ebookbell.com/product/building-elastic-and-resilient-
cloud-applications-jeremi-bourgault-4686076
Explore and download more ebooks at ebookbell.com
2. Here are some recommended products that we believe you will be
interested in. You can click the link to download.
Building Elastic And Resilient Cloud Applications Jeremi Bourgault
https://ebookbell.com/product/building-elastic-and-resilient-cloud-
applications-jeremi-bourgault-4686078
Vector Search For Practitioners With Elastic A Toolkit For Building
Nlp Solutions For Search Observability And Security Using Vector
Search Azarmi
https://ebookbell.com/product/vector-search-for-practitioners-with-
elastic-a-toolkit-for-building-nlp-solutions-for-search-observability-
and-security-using-vector-search-azarmi-55322618
Building Spas With Django And Html Over The Wire Learn To Build
Realtime Single Page Applications With Python 1st Edition Andros
Fenollosa
https://ebookbell.com/product/building-spas-with-django-and-html-over-
the-wire-learn-to-build-realtime-single-page-applications-with-
python-1st-edition-andros-fenollosa-44868684
Building The Snowflake Data Cloud Monetizing And Democratizing Your
Data Andrew Carruthers
https://ebookbell.com/product/building-the-snowflake-data-cloud-
monetizing-and-democratizing-your-data-andrew-carruthers-44888670
3. Building Web Applications With Vuejs Mvvm Patterns For Conventional
And Singlepage Websites Ralph Steyer
https://ebookbell.com/product/building-web-applications-with-vuejs-
mvvm-patterns-for-conventional-and-singlepage-websites-ralph-
steyer-44898498
Building Bridges Between Soft And Statistical Methodologies For Data
Science Luis A Garcaescudero
https://ebookbell.com/product/building-bridges-between-soft-and-
statistical-methodologies-for-data-science-luis-a-
garcaescudero-44905084
Building Microservices Designing Finegrained Systems 2nd Edition 2nd
Release 2nd 20220708 Second Release Sam Newman
https://ebookbell.com/product/building-microservices-designing-
finegrained-systems-2nd-edition-2nd-release-2nd-20220708-second-
release-sam-newman-45010590
Building Python Microservices With Fastapi Build Secure Scalable And
Structured Python Microservices From Design Concepts To Infrastructure
1st Sherwin John C Tragura
https://ebookbell.com/product/building-python-microservices-with-
fastapi-build-secure-scalable-and-structured-python-microservices-
from-design-concepts-to-infrastructure-1st-sherwin-john-c-
tragura-45036900
Building Resilient Organizations Predicaments Prospects Falguni H
Pandya
https://ebookbell.com/product/building-resilient-organizations-
predicaments-prospects-falguni-h-pandya-45209622
5. BU I L D I N G EL ASTI C
AN D RE S I L I E NT
CLOU D APPLICATIONS
Dominic Betts
Jérémi Bourgault
Julian Dominguez
Ercenk Keresteci
Grigori Melnik
Fernando Simonazzi
Erwin van der Valk
Developer’s Guide to the
Enterprise Library Integration
Pack for Windows Azure™
• • • • • •
• • • • • • • •
• • • • • • •
• • • • •
8. Building Elastic and
Resilient Cloud Applications
Developer’s Guide to the Enterprise Library
Integration Pack for Windows AzureTM
Authors
Dominic Betts
Jérémi Bourgault
Julian Dominguez
Ercenk Keresteci
Grigori Melnik
Fernando Simonazzi
Erwin van der Valk
10. Contents
foreword ix
preface xiii
Who This Book Is For xiv
Why This Book Is Pertinent Now xiv
How This Book Is Structured xv
What You Need to Use the Code xv
Who’s Who xvi
acknowledgments xix
The Team Who Brought You This Guide xix
The Enterprise Library Integration Pack
for Windows Azure Development Team xix
Advisors xx
Advisory Council xx
Community xx
1 Introduction to Windows Azure 1
About Windows Azure 1
Windows Azure Services and Features 3
Compute Environment 3
Data Management 4
Networking Services 5
Other Services 7
Developing Windows Azure Applications 7
Managing, Monitoring, and Debugging
Windows Azure Applications 8
Managing SQL Azure Databases 9
Upgrading Windows Azure Applications 9
Windows Azure Subscription and Billing Model 10
Estimating Your Costs 12
More Information 12
11. 2 Introduction to Enterprise Library
Integration Pack for Windows Azure 17
What Is Enterprise Library? 17
What Is the Enterprise Library Integration Pack
for Windows Azure? 20
More Information 21
3 The Tailspin Scenario 23
The Tailspin Company 23
Tailspin’s Strategy 24
The Surveys Application 24
Tailspin’s Goals and Concerns 26
The Surveys Application Architecture 27
More Information 29
4 Autoscaling and Windows Azure 31
What is Autoscaling? 31
What is the Autoscaling Application Block? 32
Instance Autoscaling 34
Application Throttling 35
Rules and Actions 36
Constraint Rules 36
Reactive Rules 39
Logging 42
The Autoscaling Lifecycle 43
Determine Requirements and Constraints 44
Specify Rules 44
Run the Application 44
Collect and Analyze the Results 44
When Should You Use the Autoscaling
Application Block? 45
You Want Your Application to Respond
Automatically to Changes in Demand 45
You Want to Manage the Costs Associated
with Running Your Application 45
You Have Predictable Times When Your Application
Requires Additional Resources 46
When Should You Not Use the
Autoscaling Application Block 46
Simple Applications 46
Controlling Costs 47
Applications That Are Not Scalable 47
Using the Autoscaling Application Block 47
Adding the Autoscaling Application
Block to Your Visual Studio Project 49
12. Hosting the Autoscaling Application Block 50
Changes to Your Windows Azure
Application 51
The Service Information 52
Adding Throttling Behavior
to Your Application 54
Using Instance Autoscaling and Throttling Together 54
The Autoscaling Rules 55
Implementing Schedule-based Autoscaling
Without Reactive Rules 57
Monitoring the Autoscaling
Application Block 58
Advanced Usage Scenarios 60
Scale Groups 60
Using Notifications 62
Integrating with the Application Lifecycle 63
Extending the Autoscaling Application Block 65
Using the WASABiCmdlets 66
Sample Configuration Settings 67
Average Rule Evaluation Period 69
Long Rule Evaluation Period 70
Configuring the Stabilizer 70
Using the Planning Tool 72
How the Autoscaling Application Block Works 73
The Metronome 74
The Data Collectors 74
The Service Information Store 75
The Data Points Store 75
The Rule Evaluator 75
The Rules Store 75
The Logger 76
The Scaler 76
The Tracker 76
More Information 77
5 Making Tailspin Surveys More Elastic 83
The Premise 83
Goals and Requirements 84
Overview of the Autoscaling Solution 86
Using the Autoscaling Application Block
in Tailspin Surveys 86
Features of the Autoscaling Application Block 86
Hosting the Autoscaling Application Block
in Tailspin Surveys 87
Scale Groups in Tailspin Surveys 88
13. Autoscaling Rules in Tailspin Surveys 88
Collecting Autoscaling History Data
in Tailspin Surveys 91
An Autoscaling Configuration UI 92
Notifying Operators by SMS When
a Scaling Operation Takes Place 92
Inside the Implementation 92
Enabling the Autoscaling Application Block
to Read from the .cscfg File 93
Tailspin’s Service Information Definition 93
Tailspin’s Autoscaling Rules 95
Tailspin Surveys Constraint Rules 95
Tailspin Surveys Reactive Scaling Rules 96
Tailspin Surveys Reactive Throttling Rules 99
Tailspin Surveys Operands 101
Collecting Performance Counter Data
from Tailspin Surveys 102
Implementing Throttling Behavior 105
Editing and Saving Rules 107
Discovering the Location of the Rules Store 107
Reading and Writing to the Rules Store 107
Creating Valid Autoscaling Rules 109
Validating Target Names in the Rule Definitions 110
Editing and Saving the Service
Information 111
Visualizing the Autoscaling Actions 111
Implementing a Custom Action 115
Integrating a Custom Action with the
Autoscaling Application Block 115
Integrating a Custom Action with the
Tailspin Surveys Rule Editor 118
Implementing Custom Operands 119
Integrating a Custom Operand with the
Autoscaling Application Block 119
Integrating a Custom Operand with the
Tailspin Surveys Rule Editor 124
Configuring Logging in Tailspin Surveys 124
Setup and Physical Deployment 126
Certificates and Tailspin Surveys
14. Deployment 126
Deploying a Service Certificate to Enable SSL 126
Deploying the Management Certificate
to Enable Scaling Operations 127
Deploying Tailspin Surveys in Multiple
Geographic Locations 128
Data Transfer Costs 130
Role Instances 131
Configuration Differences 131
Application Differences 131
More Information 132
6 Transient Fault Handling 133
What Are Transient Faults? 133
What Is the Transient Fault Handling
Application Block? 134
Historical Note 135
Using the Transient Fault Handling
Application Block 136
Adding the Transient Fault Handling Application
Block to Your Visual Studio Project 136
Instantiating the Transient Fault
Handling Application Block Objects 137
Defining a Retry Strategy 137
Defining a Retry Policy 138
Executing an Operation
with a Retry Policy 139
When Should You Use the Transient
Fault Handling Application Block? 140
You are Using a Windows Azure Service 140
You Are Using a Custom Service 140
More Information 141
7 Making Tailspin Surveys More Resilient 143
The Premise 143
Goals and Requirements 144
Overview of the Transient Fault Handling
Application Block Solution 144
Inside the Implementation 145
Setup and Physical Deployment 148
More Information 148
15. appendices
a Sample Configurations For Deploying
Tailspin Surveys To Multiple Data Centers 149
Option 1 149
Service Model 149
Rules 151
Option 2 154
Service Model 155
Rules 156
b Tailspin Surveys Installation Guide 159
Introduction 159
Prerequisites 160
Install Source Code and Dependencies 160
Prepare Your Windows Azure Subscription
for Deployment 162
Generate the Windows Azure Management
Certificate and Export as .pfx File 162
Generate the SSL Certificate 165
Create the Required Hosted Services 167
Upload Certificates as Hosted Services’
Service Certificates 169
Create the Storage Account 170
Building the Solution 172
Install NuGet Packages 172
Modify the Certificates in the Visual Studio
Cloud Projects 173
Prepare the Settings in the Cloud Projects 175
Build the Solution 177
Deploy to Windows Azure 178
Deploying Tailspin to the Staging Slot 178
Testing If Tailspin Surveys Works 180
Public Website 180
Tenant Website 180
Management Website 180
Configuring Tailspin Autoscaling Functionality 181
Configuring the Service Information Store 181
Uploading the Sample Rules 182
Running Tailspin Surveys Locally in Debug Mode 182
Running the Management Application
in Simulated Mode 183
Known Issues 184
More Information 185
c Glossary 187
index 191
16. xi
Foreword
Energy use in the IT sector is growing faster than in any other industry
as society becomes ever more dependent on the computational and
storage capabilities provided by data centers. Unfortunately, a combi-
nation of inefficient equipment, outdated operating practices, and
lack of incentives means that much of the energy used in traditional
data centers is wasted.
Most IT energy efficiency efforts have focused on physical infra-
structure—deploying more energy-efficient computer hardware and
cooling systems, using operating system power management features,
and reducing the number of servers in data centers through hardware
virtualization.
But a significant amount of this wasted energy stems from how
applications are designed and operated. Most applications are provi-
sioned with far more IT resources than they need, as a buffer to ensure
acceptable performance and to protect against hardware failure. Most
often, the actual needs of the application are simply never measured,
analyzed, or reviewed.
Once the application is deployed with more resources than it
typically needs, there is very little incentive for the application devel-
opers to instrument their application to make capacity planning easi-
er. And when users start complaining that the application is perform-
ing slowly, it’s often easier (and cheaper) to simply assign more
resources to the application. Very rarely are these resources ever re-
moved, even after demand for the application subsides.
Cloud computing has the potential to break this dynamic of
over-provisioning applications. Because cloud platforms like Windows
Azure charge for resource use in small increments (compute-hours)
on a pay-as-you-go basis, developers can now have a direct and con-
trollable impact on IT costs and associated resource use.
Applications that are designed to dynamically grow and shrink
their resource use in response to actual and anticipated demand are
not only less expensive to operate, but are significantly more efficient
17. xii
with their use of IT resources than traditional applications. Develop-
ers can also reduce hosting costs by scheduling background tasks to
run during less busy periods when the minimum amount of resources
are assigned to the application.
While the cloud provides great opportunities for saving money on
hosting costs, developing a cloud application that relies on other
cloud services is not without its challenges. One particular problem
that developers have to deal with is “transient faults.” Although infre-
quent, applications have to be tolerant of intermittent connectivity
and responsiveness problems in order to be considered reliable and
provide a good user experience.
Until now, developers on Windows Azure had to develop these
capabilities on their own. With the release of the Enterprise Library
Integration Pack for Windows Azure, developers can now easily build
robust and resource efficient applications that can be intelligently
scaled, and throttled. In addition, these applications can handle tran-
sient faults.
The first major component contained within the Integration Pack
is the Autoscaling Application Block, otherwise known as “WASABi.”
This application block helps developers improve responsiveness and
control Windows Azure costs by automatically scaling the number of
web and worker roles in Windows Azure through dynamic provision-
ing and decommissioning of role instances across multiple hosted
services. WASABi also provides mechanisms to help control resource
use without scaling role instances through application throttling.
Developers can use this application block to intelligently schedule or
defer background processing to keep the number of role instances
within certain boundaries and take advantage of idle periods.
One of the major advantages of WASABi is its extensibility, which
makes your solutions much more flexible. Staying true to the design
principles of other application blocks, WASABi provides a mechanism
for plugging in your own custom metrics and calling custom actions.
With these, you can design a rule set that takes into account your
business scenarios and not just standard performance counters avail-
able through the Windows Azure Diagnostics.
The optimizing stabilizer will ensure that you do not end up scal-
ing too quickly. It can also make sure scale actions correspond to the
most optimal compute hour pricing charges. For applications that
expect significant usage beyond more than a few instances, this ap-
plication block will help developers save money on hosting costs
while improving the “green credentials” of their application. It will also
help your application meet target SLAs.
The other major component is the Transient Fault Handling Ap-
plication Block (also known as “Topaz”) that helps developers make
their applications more robust by providing the logic for detecting
18. xiii
and handling transient fault conditions for a number of common
cloud-based services.
More than ever before, developers have an important role to play
in controlling IT costs and improving IT energy efficiency, without
sacrificing reliability. The Enterprise Library Integration Pack for Win-
dows Azure can assist them in rapidly building Windows Azure-based
applications that are reliable, resource efficient, and cost effective.
The Developer’s Guide you are holding in your hands is written by
the engineering team who designed and produced this integration
pack. It is full of useful guidance and tips to help you learn quickly.
Importantly, the coverage includes not only conceptual topics, but the
concrete steps taken to make the accompanying reference implemen-
tation (Tailspin Surveys) more elastic, robust, and resilient.
Moreover, the guidance from the Microsoft patterns & practices
team is not only encapsulated in the Developer’s Guide and the refer-
ence implementation. Since the pack ships its source code and all its
unit tests, a lot can be learned by examining those artifacts.
I highly recommend both the Enterprise Library Integration Pack
for Windows Azure and this Developer’s Guide to architects, soft-
ware developers, administrators, and product owners who design new
or migrate existing applications to Windows Azure. The practical ad-
vice contained in this book will help make your applications highly
scalable and robust.
Mark Aggar, Senior Director
Environmental Sustainability
Microsoft Corporation
20. xv
Preface
The Windows Azure™ technology platform offers exciting new op-
portunities for companies and developers to build large and complex
applications to run in the cloud. Windows Azure enables you to take
advantage of a pay-as-you-go billing model for your application infra-
structure and on-demand computing resources.
By combining the existing Microsoft® Enterprise Library applica-
tion blocks that help you design applications that are robust, configu-
rable, and easy to manage, with new blocks designed specifically for
the cloud, you can create highly scalable, robust applications that can
take full advantage of Windows Azure.
This book describes a scenario based on a fictitious company
named Tailspin that has decided to enhance its existing Windows
Azure hosted application by using the new Autoscaling Application
Block and Transient Fault Handling Block. Its Windows Azure-based
application, named Surveys, is described in detail in a previous book
in this series, “Developing Applications for the Cloud” at http://msdn.
microsoft.com/en-us/library/ff966499.aspx.
This guide accompanies a reference implementation, which we
encourage you to study and play with to better understand how the
new application blocks operate.
In addition to describing the Windows Azure application and how
it uses the Enterprise Library blocks, this book provides a description
of the key features of the blocks and general guidance on how you
can use them in your own applications.
The result is that, after reading this book, you will be familiar
with how to incorporate the Autoscaling Application Block and the
Transient Fault Handling Application Block in your Windows Azure
applications.
21. xvi
Who This Book Is For
This book demonstrates how you can use the Enterprise Library Inte-
gration Pack for Windows Azure in an existing Windows Azure ap-
plication to enhance the maintainability, manageability, scalability,
stability, and extensibility of the application. The book is intended for
any architect, developer, or information technology (IT) professional
who designs, builds, or operates applications and services that are ap-
propriate for the cloud and who wants to learn how to realize the
benefits of using Enterprise Library in a cloud-based application. You
should be familiar with Windows Azure, the Microsoft .NET Frame-
work, Microsoft Visual Studio® development system, ASP.NET, and
Microsoft Visual C#® to derive full benefit from reading this guide.
The next two chapters offer overviews of Windows Azure and the
Enterprise Library Integration Pack for Windows Azure to help you
get started.
Why This Book Is Pertinent Now
In general, the cloud has become a viable option for making your ap-
plications accessible to a broad set of customers. You may have already
built and deployed applications to Windows Azure using the tools
available for Visual Studio and the Windows Azure SDK for .NET. Just
as Enterprise Library has helped you to address common, crosscutting
concerns, such as logging and exception management, in your on-
premises applications, the Integration Pack and its associated guid-
ance will help you address the crosscutting concerns common to
many cloud applications. Some of these crosscutting concerns will be
the same as those in your on-premises applications, such as exception
management and caching; some will be different, such as auto-scaling
to meet elastic demand. This book shows you how you can address
these concerns in the context of a common scenario: enhancing an
existing Windows Azure application.
22. xvii
preface
How This Book Is Structured
What You Need to Use the Code
In order to run the Tailspin Surveys application, you will need the
following:
• A development machine running Microsoft Visual Studio® 2010
development system SP1.
• All required Microsoft Windows® updates.
• NuGet Package Manager (for more information, see http://
nuget.codeplex.com/ ).
• A Windows Azure subscription with room for two hosted
services (if you want to run the Tailspin Surveys application,
the Autoscaler Host, and the Management Web application
in Windows Azure).
23. xviii
• A Windows Azure storage account.
• The Dependency Checker, which will verify that you have the
prerequisites listed below installed. If not, it will help you install
them.
• Visual Studio 2010
• MVC 3 Framework
• Windows Azure SDK for .NET and Windows Azure Tools for
Microsoft Visual Studio – November 2011 Release
• Windows Identity Foundation Runtime
• Optional: Internet Information Services 7 (IIS) – This is required
if you want to run the management site in simulated mode or
want to deploy the autoscaler role locally.
Who’s Who
As mentioned earlier, this book employs scenarios that demonstrate
how to use the Enterprise Library Integration Pack for Windows
Azure in a reference implementation. A panel of experts comments
on the development efforts. The panel includes a cloud specialist, a
business manager, a software architect, a software developer who is
knowledgeable about Enterprise Library, a software developer who is
new to Enterprise Library, and an IT professional. The scenarios can
be considered from each of these points of view. The following table
lists the experts for these scenarios.
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.
Developing a single application to the cloud is easy.
Realizing the benefits that a cloud-based solution
can offer is not always so straightforward.
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
not only what technical approaches are needed today, but also what direction
a company needs to consider for the future. Jana has worked on many
projects that have used Enterprise Library.
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.
24. xix
Markus is a software developer who is new to Enterprise Library. 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.
I don’t care what platform you want to use for
the application, I’ll make it work.
Ed is an experienced software developer and Enterprise Library expert.
As a true professional, he is well aware of the common crosscutting concerns
that developers face when building line-of-business (LOB) applications for
the enterprise. In the past, he has built his own libraries to satisfy these
concerns, but in the last several years he has used Enterprise Library for
most of these
applications. Our applications use Enterprise Library for crosscutting
concerns. This provides a level of uniformity across all our
systems that make them easier to support and maintain.
We have invested heavily in our on premises applications
and we must be able to reuse this investment in the cloud.
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 3:00 AM when there’s a problem.
Migrating applications in the cloud involves different
challenges from managing on-premises applications.
I want to make sure our cloud apps are as reliable and
secure as our on-premise apps.
Beth is a business manager. She helps companies to plan how their business
will develop. She understands the market that the company operates in,
the resources that the company has available, and the goals of the company.
She has both a strategic view, and an interest in the day-to-day operations
of the company.
Organizations face many conflicting demands on their
resources. I want to make sure that our company balances
those demands and adopts a business plan that will make
us successful in the medium and long term.
preface
If you have a particular area of interest, look for notes provided
by the specialists whose interests align with yours.
26. xxi
Acknowledgments
The Team Who Brought You This Guide
Authors Dominic Betts, Jérémi Bourgault, Julian Dominguez, Ercenk
Keresteci, Grigori Melnik, Fernando Simonazzi, and Erwin van
der Valk
Technical Reviewers Neil Mackenzie, Valery Mizonov, Eugenio Pace, Paweł Wilkosz,
and Michael Wood
Book Designer John Hubbard
Graphic Artist Katie Niemer
Editors RoAnn Corbisier, Nelly Delgado, and Nancy Michell
The Enterprise Library Integration Pack
for Windows Azure Development Team
Product/Program Grigori Melnik (Microsoft Corporation)
Management
Architecture/ Julian Dominguez (Microsoft Corporation), Fernando Simonazzi
Development (Clarius Consulting), Jérémi Bourgault (nVentive Inc.), and Ercenk
Keresteci (Full Scale 180 Inc)
Testing Mani Krishnaswami and Carlos Farre (Microsoft Corporation),
Neeraj Jain, Murugesh Muthuvilavan, Karthick Natarajan,
Thamilarasi Nataraj and Rathi Velusamy (Infosys Technologies Ltd.)
User Experience/ Dominic Betts, Nancy Michell (Content Master Ltd.), Rick Carr
Documentation (DCB Software Testing, Inc.), Nelly Delgado (Microsoft
Corporation) and Erwin van der Valk (Erwin van der Valk)
Release Management Richard Burte (ChannelCatalyst.com, Inc.), Grigori Melnik
(Microsoft Corporation), and Jérémi Bourgault (nVentive Inc.)
Administrative Support Kerstin Scott (Microsoft Corporation)
27. xxii
Advisors
Many people contributed to this release. We are grateful to all of them!
Advisory Council Nikolai Blackie (Adaptiv), Ivan Bodyagin (ABBYY), Federico
Boerr (Southworks), Leandro Boffi (Tellago), Michael Collier
(Independent), Hans De Graaf (New Day at Work), Jason
De Oliveira (Capgemini Sogeti), Dave Fellows (Green
Button), Ştefan Filip (HPC Consulting), Sam Fold
(Arkadium), Nuno Filipe Godinho (Independent), Neil
Mackenzie (Independent), Daniel Piessens (Zywave), Marc
Remmers (42windmills), Keith Stobie (Independent),
François Tanguay (nVentive), Mihai Tataran (HPC
Consulting), Stas Tkachenko (Arkadium), Trent Swenson
(Full Scale 180), Gabriel Szletchman (3mellons), Philippe
Vialatte (Independent), Guido Vilariño (3mellons/Disney),
Oleg Volkov (New Day At Work), Paweł Wilkosz (Motorola
Solution Systems), Michael Wood (Cumulux Inc.), and our
Microsoft colleagues: Mark Aggar, David Aiken, Kashif Alam,
Jaime Alva Bravo, Cihan Biyikoglu, Jim Davis, John Dawson,
Scott Densmore, Lenny Fenster, Danny Garber, Rick Hines,
Tom Hollander, Dmitri Martynov, Steve Marx, Tony Meleg,
Suren Machiraju, Ade Miller, Valery Mizonov, Walter Myers,
Masashi Narumoto, Bhushan Nene, Eugenio Pace, Curt
Peterson, James Podgorski, Srilatha Rayasam, Paolo Salvatori,
Marc Schweigert, Mark Simms, Eric Slippern, Vijay Sen, and
Tim Wieman.
The contributions of Valery Mizonov and the whole AppFabric Customer Advisory
Team (CAT) deserve a special mention. The Transient Fault
Handling Application Block is based on the detection and
retry strategies originally developed by the AppFabric CAT
team. The enhanced Transient Fault Handling Application
Block is a collaboration between the patterns & practices
and the AppFabric CAT teams.
We’d also like to highlight our exceptional collaboration with Microsoft Consulting
Services (Lenny Fenster, Danny Garber, Rick Hines, Walter
Myers, and Marc Schweigert) whose regular feedback
helped us stay grounded in the real world scenarios. Thank
you for not letting us overlook many important ones.
Community
Many thanks to Rahul Rai, Sudhakar Reddy D V, Maarten Baaliauw, Zoiner Tejada and all
who voted on the backlog, beta tested our early code drops,
and provided meaningful feedback. Also, we thank the
attendees of the patterns & practices symposia, TechReady,
and TechEd conferences who provided informal feedback.
28. 1
1
This chapter provides a brief description of the Windows Azure™
technology platform, the services it provides, and the opportunities it
offers for on-demand, cloud-based computing where the cloud is a set
of interconnected computing resources located in one or more data
centers. The chapter also provides links to help you find more infor-
mation about the features of Windows Azure, the techniques and
technologies used in this series of guides, and the sample code that
accompanies them.
The primary purpose of this developer guide is to show how to
use the Enterprise Library Integration Pack for Windows Azure with
your Windows Azure applications. The accompanying reference im-
plementation (sample demo), and the associated hands-on labs utilize
many of the features and services available in Windows Azure, so it is
useful to have an understanding of Windows Azure itself before you
begin using the Enterprise Library Integration Pack for Windows
Azure. If you are already familiar with Windows Azure, you can skip
this chapter and move on to the chapters that describe the Enterprise
Library Integration Pack for Windows Azure and the reference imple-
mentation, called the Tailspin Surveys application.
About Windows Azure
Organizations can use the cloud to deploy and run applications and
to store data. On-premises applications can use cloud-based resourc-
es as well. For example, an application located on an on-premises
server, a rich client that runs on a desktop computer, or one that runs
on a mobile device can use storage that is located on the cloud.
For more information about hybrid solutions, see the integration
guide at http://wag.codeplex.com/.
Windows Azure abstracts hardware resources through virtualiza-
tion. Each application that is deployed to Windows Azure runs on one
or more virtual machines (VMs). These deployed applications behave
Introduction to
Windows Azure
Windows Azure is a
fast-moving platform,
so for the very latest
information about
any of the features
described in this
chapter, you should
follow the provided
links.
29. 2 chapter one
as though they were on a dedicated computer, although they might
share physical resources such as disk space, network I/O, or CPU cores
with other VMs on the same physical host. Two key benefits of an
abstraction layer above the physical hardware are portability and scal-
ability. Virtualizing a service allows it to be moved to any number of
physical hosts in the data center. By combining virtualization tech-
nologies, commodity hardware, multi-tenancy, and aggregation of
demand, Microsoft and our customers can achieve economies of
scale. Such economies generate higher data center utilization (that is,
more useful work-per-dollar hardware cost) and, subsequently, savings
that are passed along to you.
Virtualization also allows you to have both vertical scalability and
horizontal scalability. Vertical scalability means that, as demand in-
creases, you can increase the number of resources, such as CPU cores
or memory, on a specific VM. Horizontal scalability means that you
can add more instances of VMs that are copies of existing services. All
these instances are load balanced at the network level so that incom-
ing requests are distributed among them.
At the time of this writing, Windows Azure encompasses Win-
dows Azure and SQL Azure.
Windows Azure provides a Microsoft® Windows Server®-based
computing environment for applications and persistent storage for
both structured and unstructured data, as well as asynchronous mes-
saging. Windows Azure also provides a range of services that helps
you connect users and on-premises applications to cloud-hosted ap-
plications, manage authentication, use inter-service messaging, and
implement data management and related features such as caching.
Windows Azure also includes a range of management services
that allows you to control all these resources, either through a web-
based user interface (a web portal) or programmatically. In most cases
there is a REST-based API that can be used to define how your ser-
vices will work. Most management tasks that can be performed
through the web portal can also be performed using the API.
SQL Azure is essentially SQL Server® provided as a service in the
cloud.
Finally, there is a comprehensive set of tools and software devel-
opment kits (SDKs) that allow you to develop, test, and deploy your
applications. For example, you can develop and test your applications
in a simulated local environment, provided by the Compute Emulator
and the Storage Emulator. Most tools are also integrated into develop-
ment environments such as Microsoft Visual Studio® development
system. In addition, there are third-party management tools available.
Windows Azure can
help you achieve
portability and
scalability for your
applications, and
reduce your running
costs and total cost
of ownership (TCO).
30. 3
introduction to windows azure
Windows Azure Services and Features
The range of services and features available on Windows Azure and
SQL Azure target specific requirements for your applications. When
you subscribe to Windows Azure, you can choose which of the fea-
tures you require, and you pay only for the features you use. You can
add and remove features from your subscription whenever you wish.
The billing mechanism for each service depends on the type of
features the service provides. For more information on the billing
model, see “Windows Azure Subscription and Billing Model,” later in this
chapter.
The services and features available change as Windows Azure
continues to evolve. The following four sections of this chapter
briefly describe the main services and features available at the time of
this writing, subdivided into the categories of Compute Environment,
Data Management, Networking Services, and Other Services.
For more information about all of the Windows Azure services
and features, see “Windows Azure Features” on the Windows Azure
Portal. For specific development and usage guidance on each feature
or service, see the resources referenced in the following sections.
To use any of these features and services you must have a
subscription to Windows Azure. A valid Windows Live® ID
is required when signing up for a Windows Azure account.
For more information, see “Windows Azure Offers.”
Compute Environment
The Windows Azure compute environment consists of a platform for
applications and services hosted within one or more roles. The types
of roles you can implement in Windows Azure are:
• Windows Azure Compute (Web and Worker Roles). A
Windows Azure application consists of one or more hosted
roles running within the Azure data centers. Typically there will
be at least one web role that is exposed for access by users of
the application. A web role is supported by Internet Information
Service (IIS) 7.0 and ASP.NET. The application may contain
additional roles, including worker roles, that are typically used to
perform background processing and support tasks for web roles.
For more detailed information, see “Overview of Creating a
Hosted Service for Windows Azure” and “Building an Application
that Runs in a Hosted Service.”
• Virtual Machine (VM role). This role allows you to host your
own custom instance of the Windows Server 2008 R2 Enter-
prise or Windows Server 2008 R2 Standard operating system
Windows Azure
includes a range of
services that can
simplify develop-
ment, increase
reliability, and make
it easier to manage
your cloud-hosted
applications.
31. 4 chapter one
within a Windows Azure data center. For more detailed infor-
mation see “Creating Applications by Using a VM Role in Windows
Azure.”
The Tailspin Surveys application uses both web and worker roles.
For additional information and guidance about the use of web and
worker roles see the associated guides “Moving Applications to the
Cloud” and “Developing Applications for the Cloud” which are available
at Cloud Development on MSDN. Each of these guides also includes a
set of hands-on labs.
Data Management
Windows Azure, SQL Azure, and the associated services provide op-
portunities for storing and managing data in a range of ways. The
following data management services and features are available:
• Windows Azure Storage. This provides four core services for
persistent and durable data storage in the cloud. The services
support a REST interface that can be accessed from within
Windows Azure-hosted or on-premises (remote) applications.
For information about the REST API, see “Windows Azure
Storage Services REST API Reference.” The four storage services
are listed below.
• The Windows Azure Table Service provides a table-structured
storage mechanism and supports queries for managing the data.
The Azure Table Service is a NoSQL offering that provides
schema-less storage. It is primarily aimed at scenarios where
large volumes of data must be stored, while being easy to access
and update. For more detailed information see “Table Service
Concepts” and “Table Service REST API.”
• The Binary Large Object (BLOB) Service provides a series of
containers aimed at storing text or binary data. It provides both
Block BLOB containers for streaming data, and Page BLOB
containers for random read/write operations. For more detailed
information see “Understanding Block Blobs and Page Blobs” and
“Blob Service REST API.”
• The Queue Service provides a mechanism for reliable, persis-
tent messaging between role instances, such as between a web
role and a worker role. For more detailed information see
“Queue Service Concepts” and “Queue Service REST API.”
• Windows Azure Drives provide a mechanism for applications
to mount a single volume NTFS VHD as a Page BLOB, and
upload and download VHDs via the BLOB. For more detailed
information see “Windows Azure Drive.”
32. 5
introduction to windows azure
• SQL Azure Database. This is a highly available and scalable
cloud database service built on SQL Server technologies, that
supports the familiar T-SQL-based relational database model. It
can be used with applications hosted in Windows Azure, and
with other applications running on-premises or hosted else-
where. For more detailed information see “SQL Azure Database.”
• Data Synchronization. SQL Azure Data Sync is a cloud-based
data synchronization service built on Microsoft Sync Frame-
work technologies. It provides bi-directional data synchroniza-
tion and data management capabilities, allowing data to be easily
shared between multiple SQL Azure databases and between
on-premises and SQL Azure databases. For more detailed
information see “Microsoft Sync Framework Developer Center.”
• Caching. This service provides a distributed, in-memory, low
latency and high throughput application cache service that
requires no installation or management, and dynamically in-
creases and decreases the cache size as required. It can be used
to cache application data, ASP.NET session state information,
and for ASP.NET, page output caching. For more detailed
information see “Windows Azure Caching Service.”
The Tailspin Surveys application uses both Windows Azure stor-
age and SQL Azure. For additional information and guidance about
the use of Windows Azure storage and SQL Azure see the associated
guides “Moving Applications to the Cloud” and “Developing Applications
for the Cloud” which are available at Cloud Development on MSDN.
Each of these guides also includes a set of hands-on labs.
Networking Services
Windows Azure provides several networking services that you can
take advantage of to maximize performance, implement authentica-
tion, and improve manageability of your hosted applications. These
services include the following:
• Content Delivery Network (CDN). The CDN allows you to
cache publicly available static data for applications at strategic
locations that are closer (in network delivery terms) to end
users. The CDN uses a number of data centers at many locations
around the world, which store the data in BLOB storage that
has anonymous access. These do not need to be locations where
the application is actually running. For more detailed informa-
tion see “Delivering High-Bandwidth Content with the Windows
Azure CDN.”
• Virtual Network Connect. This service allows you to configure
roles of an application running in Windows Azure and comput-
ers on your on-premises network so that they appear to be on
33. 6 chapter one
the same network. It uses a software agent running on the
on-premises computer to establish an IPsec-protected connec-
tion to the Windows Azure roles in the cloud, and provides the
capability to administer, manage, monitor, and debug the roles
directly. For more detailed information see “Connecting Local
Computers to Windows Azure Roles.”
• Virtual Network Traffic Manager. This is a service that allows
you to set up request redirection and load balancing based on
three different techniques. Typically you will use Traffic Man-
ager to maximize performance by using the Performance
technique to redirect requests to the instance of your applica-
tion in the data center closest to the user. Alternative load
balancing methods available are Failover and Round Robin. For
more detailed information see “Windows Azure Traffic Manager.”
• Access Control (ACS). This is a standards-based service for
identity and access control that makes use of a range of identity
providers (IdPs) that can authenticate users. ACS acts as a
Security Token Service (STS), or token issuer, and makes it easier
to take advantage of federation authentication techniques
where user identity is validated in a realm or domain other than
that in which the application resides. An example is controlling
user access based on an identity verified by an identity provider
such as Windows Live® ID or Google. For more detailed
information see “Access Control Service 2.0” and “A Guide to
Claims-Based Identity and Access Control (2nd Edition).”
• Service Bus. This provides a secure messaging and data flow
capability for distributed and hybrid applications, such as
communication between Windows Azure hosted applications
and on-premises applications and services, without requiring
complex firewall and security infrastructures. It can use a range
of communication and messaging protocols and patterns to
provide delivery assurance and reliable messaging, can scale to
accommodate varying loads, and can be integrated with on-
premises BizTalk Server artifacts. For more detailed information
see “Service Bus.”
For additional information and guidance about the use of Win-
dows Azure storage and SQL Azure see the associated guides “Moving
Applications to the Cloud” and “Developing Applications for the Cloud”
which are available at Cloud Development on MSDN. Each of these
guides also includes a set of hands-on labs.
Detailed guidance on using ACS can be found in the associated
document, “A Guide to Claims-Based Identity and Access Control (2nd
Edition)” and in the hands-on labs for that guide.
34. 7
introduction to windows azure
Other Services
Windows Azure provides the following additional services:
• Business Intelligence Reporting. This service allows you to
develop and deploy to the cloud business operational reports
generated from data stored in a SQL Azure database. It is built
upon the same technologies as SQL Server Reporting Services,
and lets you use familiar tools to generate reports. Reports can
be easily accessed through the Windows Azure Management
Portal, through a web browser, or directly from within your
Windows Azure and on-premises applications. For more de-
tailed information see “SQL Azure Reporting.”
• Marketplace. This is an online facility where developers can
share, find, buy, and sell building block components, training,
service templates, premium data sets, and finished services and
applications needed to build Windows Azure applications. For
more detailed information see “Windows Azure Marketplace” on
MSDN and “Windows Azure Marketplace” (AppMarket).
Developing Windows Azure Applications
Typically, on Microsoft® Windows®, you will use Visual Studio 2010
with the Windows Azure Tools for Microsoft Visual Studio. The Win-
dows Azure Tools provide everything you need to create Windows
Azure applications, including local compute and storage emulators
that run on the development computer. This means that you can
write, test, and debug applications before deploying them to the
cloud. The tools also include features to help you deploy applications
to Windows Azure and manage them after deployment.
You can download the Windows Azure Tools for Microsoft Vi-
sual Studio, and development tools for other platforms and languages
such as iOS, Eclipse, Java, Ruby, and PHP from “Windows Azure Tools.”
For a useful selection of videos, QuickStart examples, and hands-
on labs that cover a range of topics to help you get started building
Windows Azure applications, see “Learn Windows Azure and SQL
Azure” and “Design. Code. Scale.”
The MSDN “Developing Applications for Windows Azure” topic
includes specific examples and guidance for creating hosted services,
using the Windows Azure Tools for Microsoft Visual Studio to pack-
age and deploy applications, and a useful QuickStart example.
The Windows Azure Training Kit contains hands-on labs to get you
started quickly.
To understand the execution lifecycle and how a Windows Azure
role operates, see “Real World: Startup Lifecycle of a Windows Azure
Role.”
You can build and
test Windows Azure
applications using the
compute and storage
emulators on your
development
computer.
35. 8 chapter one
For a list of useful resources for developing and deploying data-
bases in SQL Azure, see “Development (SQL Azure Database).”
For a list of tools that can help with planning the migration of an
application to Windows Azure, see “Planning and Designing Windows
Azure Applications.”
Managing, Monitoring, and Debugging
Windows Azure Applications
All storage and management subsystems in Windows Azure use REST-
based interfaces. They are not dependent on any .NET Framework or
Windows operating system technology. Any technology that can is-
sue HTTP or HTTPS requests can access Windows Azure facilities.
To learn about the Windows Azure managed and native library
APIs, and the storage services REST API, see “API References for
Windows Azure.”
The REST-based service management API can be used as an alter-
native to the Windows Azure web management portal. The API in-
cludes features to work with storage accounts, hosted services, cer-
tificates, affinity groups, locations, and subscription information. For
more information, see “Windows Azure Service Management REST API
Reference.” In addition, Windows Azure provides diagnostic services
and APIs for activities such as monitoring an application’s health. You
can use the Windows Azure Management Pack and System Center
Operations Manager 2007 R2 to discover Windows Azure applica-
tions, get the status of each role instance, and collect and monitor
performance information, Windows Azure events, and the .NET
Framework trace messages from each role instance. For more informa-
tion, see “Monitoring Windows Azure Applications.”
You can also use the Windows Azure PowerShell Cmdlets to browse
and manage Windows Azure compute and storage services, automate
deployment, and upgrade your Windows Azure applications, as well
as manage your diagnostics data.
For information about using the Windows Azure built-in trace
objects to configure diagnostics and instrumentation without using
Operations Manager, and about downloading the results, see “Collect-
ing Logging Data by Using Windows Azure Diagnostics.”
For information about debugging Windows Azure applications,
see “Troubleshooting and Debugging in Windows Azure” and “Debugging
Applications in Windows Azure.”
Chapter 7, “Application Life Cycle Management for Windows
Azure Applications” in the guide “Moving Applications to the
Cloud” contains information about managing Windows Azure
applications.
Windows Azure
includes features that
allow you to monitor
and debug cloud-
hosted services.
36. 9
introduction to windows azure
Managing SQL Azure Databases
Applications access SQL Azure databases in exactly the same way
they access locally installed SQL Server instances using the managed
ADO.NET data access classes, Enterprise Library Data Access Applica-
tion Block (DAAB), OData, native ODBC, PHP, Ruby, or JDBC data
access technologies.
SQL Azure databases can be managed through the web portal,
SQL Server Management Studio, Visual Studio 2010 database tools,
and a range of other tools for activities such as moving and migrating
data, as well as command-line tools for deployment and administra-
tion.
A database manager is also available to make it easier to work
with SQL Azure databases. For more information see “Management
Portal for SQL Azure.“ For a list of other tools, see “Windows Azure
Downloads.“
SQL Azure supports a management API as well as management
through the web portal. For information about the SQL Azure man-
agement API see “Management REST API Reference.”
Upgrading Windows Azure Applications
After you deploy an application to Windows Azure, you will need to
update it as you change the role services in response to new require-
ments, code improvements, or to fix bugs. You can simply redeploy a
service by suspending and then deleting it, and then deploy the new
version. However, you can avoid application downtime by performing
staged deployments (uploading a new package and swapping it with
the existing production version), or by performing an in-place upgrade
(uploading a new package and applying it to the running instances of
the service).
For information about how you can perform service upgrades by
uploading a new package and swapping it with the existing produc-
tion version, see “How to Deploy a Service Upgrade to Production by
Swapping VIPs in Windows Azure.”
For information about how you can perform in-place upgrades,
including details of how services are deployed into upgrade and fault
domains and how this affects your upgrade options, see “How to Per-
form In-Place Upgrades on a Hosted Service in Windows Azure.”
If you only need to change the configuration information for a
service without deploying new code, you can use the web portal
or the management API to edit the service configuration file or
to upload a new configuration file.
37. 10 chapter one
Windows Azure Subscription and Billing Model
To use Windows Azure, you first create a billing account by signing up
for Microsoft Online Services or through the Windows Azure portal at
https://windows.azure.com/. The Microsoft Online Services customer
portal manages subscriptions to all Microsoft services. Windows
Azure is one of these, but there are others such as Business Productiv-
ity Online, Windows Office Live Meeting, and Windows Intune™
software and services.
This section is based on the information publicly available
at the time of this writing.
Every billing account has a single account owner who is identified
with a Windows Live ID. The account owner can create and manage
subscriptions, view billing information and usage data, and specify the
service administrator(s) for each subscription.
Administrators manage the individual hosted services for a Win-
dows Azure subscription using the Windows Azure portal at https://
windows.azure.com/. A Windows Azure subscription can include one
or more of the following:
• Hosted services, consisting of hosted roles and the instances
within each role. Roles and instances may be stopped, in
production, or in staging mode.
• Storage accounts, consisting of Table, BLOB, and Queue storage
instances.
• CDN instances.
• SQL Azure databases and Data Sync service.
• SQL Azure Reporting Services instances.
• Access Control, Service Bus, and Cache service instances.
• Virtual Network Connect and Traffic Manager instances.
Figure 1 illustrates the Windows Azure billing configuration for a
standard subscription.
The account owner
and the service
administrator for a
subscription can use
(and in many cases
should use) different
Live IDs.
38. 11
introduction to windows azure
figure 1
Windows Azure billing configuration for a standard subscription
For more information about Windows Azure billing, see “What
are the Billing Basics of Windows Azure?” and “Accounts and Billing in
SQL Azure.”
39. 12 chapter one
Estimating Your Costs
Windows Azure charges are based on how you consume services such
as compute time, storage, and bandwidth. Compute time charges are
calculated on an hourly rate as well as a rate for the instance size.
Storage charges are based on the number of gigabytes and the number
of transactions. Prices for data transfer vary according to the geo-
graphic location you are in and generally apply to transfers between
the Microsoft data centers and your premises, but not on transfers
within the same data center.
To estimate the likely costs of a Windows Azure subscription, see
the following resources:
• Subscription overview for the various purchasing models such
as the pay-as-you-go and subscription model, including a tool
for measuring consumption, at
http://www.microsoft.com/windowsazure/pricing/.
• Pricing calculator at http://www.microsoft.com/windowsazure/
pricing-calculator/.
• TCO calculator at http://www.microsoft.com/windowsazure/
offers/#tcoCompare-LB.
Chapter 4, “How Much Will It Cost?” of the guide “Moving
Applications to the Cloud” provides additional information about
estimating the costs of hosting applications in Windows Azure.
More Information
There is a great deal of information available about Windows
Azure in the form of documentation, training videos, and white
papers. Here are some websites you can visit to learn more:
• The portal to information about Windows Azure is at
http://www.microsoft.com/WindowsAzure/. It has links to white
papers, tools such as the Windows Azure SDK for .NET, and
many other resources. You can also sign up for a Windows
Azure account there.
• The Windows Azure learning portal at
http://www.microsoft.com/WindowsAzure/learn.
• Wade Wegner and Steve Marx have a series of Channel 9
discussions about Windows Azure on Cloud Cover, located at
http://channel9.msdn.com/shows/Cloud+Cover/.
• Find answers to your questions on the Windows Azure Forum
at http://social.msdn.microsoft.com/Forums/en-US/windowsazure-
development/threads
You are billed for role
resources that are
used by a deployed
service, even if the
roles on those
services are not
running. If you don’t
want to get charged
for a service, delete
the deployments
associated with the
service.
40. 13
introduction to windows azure
• Steve Marx is a Windows Azure Technical Product Manager. His
blog is at http://blog.smarx.com/. It is a great source of news and
information on Windows Azure.
• Wade Wegner is the Technical Evangelist Lead for Windows
Azure. His blog is full of technical details and tips. It is at
http://www.wadewegner.com/.
• Windows Azure Feature Voting backlog at
http://www.mygreatwindowsazureidea.com to provide feedback,
submit and vote on features requests.
• The community site for the patterns & practices series of guides
at http://wag.codeplex.com/ provides links to online resources,
sample code, hands-on labs, feedback, and more.
• The community site for this release at http://entlib.uservoice.
com/forums/101257-windows-azure-integration-pack provides
links to additional online resources, issue tracker and discussion
forum.
Below are the links to references in this chapter:
• Windows Azure Guidance on CodePlex:
http://wag.codeplex.com/
• Windows Azure Features:
http://www.microsoft.com/windowsazure/features/
• Windows Azure Offers:
http://www.microsoft.com/windowsazure/offers/
• Overview of Creating a Hosted Service for Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234572
• Building an Application that Runs in a Hosted Service:
http://go.microsoft.com/fwlink/?LinkID=234587
• Creating Applications by Using a VM Role in Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234590
• Cloud Development:
http://go.microsoft.com/fwlink/?LinkID=234613
• Windows Azure Storage Services REST API Reference:
http://msdn.microsoft.com/en-us/library/dd179355.aspx
• Table Service Concepts:
http://msdn.microsoft.com/en-us/library/dd179463.aspx
• Table Service REST API:
http://msdn.microsoft.com/en-us/library/dd179423.aspx
• Understanding Block Blobs and Page Blobs:
http://msdn.microsoft.com/en-us/library/ee691964.aspx
• Blob Service REST API:
http://msdn.microsoft.com/en-us/library/dd135733.aspx
41. 14 chapter one
• Queue Service Concepts:
http://msdn.microsoft.com/en-us/library/dd179353.aspx
• Queue Service REST API:
http://msdn.microsoft.com/en-us/library/dd179363.aspx
• Windows Azure Drive:
http://go.microsoft.com/?linkid=9710117
• SQL Azure Database:
http://msdn.microsoft.com/en-us/library/ee336279.aspx
• Microsoft Sync Framework Developer Center:
http://msdn.microsoft.com/en-us/sync
• Caching Service (Windows Azure):
http://go.microsoft.com/fwlink/?LinkID=234591
• Delivering High-Bandwidth Content with the Windows Azure
CDN:
http://go.microsoft.com/fwlink/?LinkID=234592
• Connecting Local Computers to Windows Azure Roles:
http://go.microsoft.com/fwlink/?LinkID=234593
• Windows Azure Traffic Manager:
http://go.microsoft.com/fwlink/?LinkID=234594
• Access Control Service 2.0:
http://go.microsoft.com/fwlink/?LinkID=234595
• A Guide to Claims-Based Identity and Access Control (2nd
Edition):
http://msdn.microsoft.com/en-us/library/ff423674.aspx
• Service Bus:
http://go.microsoft.com/fwlink/?LinkID=234596
• SQL Azure Reporting:
http://go.microsoft.com/fwlink/?LinkID=234597
• Windows Azure Marketplace:
http://go.microsoft.com/fwlink/?LinkID=234598
• Windows Azure Marketplace:
http://go.microsoft.com/fwlink/?LinkID=234599
• Windows Azure Tools:
http://www.microsoft.com/windowsazure/tools/
• Learn Windows Azure and SQL Azure:
http://www.microsoft.com/windowsazure/tutorials/
• Design. Code. Scale.:
http://www.microsoft.com/windowsazure/getstarted/
• Developing Applications for Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234600
42. 15
introduction to windows azure
• Windows Azure Training Kit:
http://go.microsoft.com/fwlink/?LinkID=234601
• Real World: Startup Lifecycle of a Windows Azure Role:
http://go.microsoft.com/fwlink/?LinkID=234602
• Development (SQL Azure Database):
http://go.microsoft.com/fwlink/?LinkID=234603
• Windows Azure Assessment/Planning:
http://www.microsoft.com/windowsazure/tools/#assessment
• API References for Windows Azure:
http://msdn.microsoft.com/en-us/library/ff800682.aspx
• Windows Azure Service Management REST API Reference:
http://msdn.microsoft.com/en-us/library/ee460799.aspx
• Monitoring Windows Azure Applications:
http://msdn.microsoft.com/en-us/library/gg676009.aspx
• Windows Azure PowerShell Cmdlets:
http://wappowershell.codeplex.com/
• Collecting Logging Data by Using Windows Azure Diagnostics:
http://go.microsoft.com/fwlink/?LinkID=234604
• Troubleshooting and Debugging in Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234605
• Debugging Applications in Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234606
• “Application Life Cycle Management for Windows Azure
Applications” in Moving Applications to the Cloud:
http://msdn.microsoft.com/en-us/library/ff803362.aspx
• Management Portal for SQL Azure:
http://go.microsoft.com/fwlink/?LinkID=234607
• Windows Azure Tools:
http://www.microsoft.com/windowsazure/tools/#sqlazure
• Management REST API Reference:
http://go.microsoft.com/fwlink/?LinkID=234608
• How to Deploy a Service Upgrade to Production by Swapping
VIPs in Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234609
• How to Perform In-Place Upgrades on a Hosted Service in
Windows Azure:
http://go.microsoft.com/fwlink/?LinkID=234610
• Microsoft Online Services:
https://mocp.microsoftonline.com/
43. 16 chapter one
• “What are the Billing Basics of Windows Azure?” in “Windows
Azure Platform”
http://go.microsoft.com/fwlink/?LinkID=234611
• Accounts and Billing in SQL Azure:
http://go.microsoft.com/fwlink/?LinkID=234612
• Subscription overview for the various purchasing models:
http://www.microsoft.com/windowsazure/pricing/
• Pricing calculator:
http://www.microsoft.com/windowsazure/pricing-calculator/
• TCO calculator:
http://www.microsoft.com/windowsazure/offers/#tcoCompare-LB
• “How Much Will It Cost?” in Moving Applications to the Cloud:
http://msdn.microsoft.com/en-us/library/ff803375.aspx
• Moving Applications to the Cloud, 2nd Edition:
http://msdn.microsoft.com/en-us/library/ff728592.aspx
To access web resources more easily, see the online version of the
bibliography on MSDN:
http://msdn.microsoft.com/en-us/library/hh749032(v=PandP.50).aspx
44. 17
2 Introduction to
Enterprise Library Integration
Pack for Windows Azure
The Microsoft® Enterprise Library Integration Pack for Windows
Azure extends Enterprise Library to include support for Windows
Azure™ technology platform applications. It includes additional ap-
plication blocks to meet the requirements of cloud-hosted applica-
tions.
What Is Enterprise Library?
Enterprise Library provides many highly configurable features that
make it much easier for you to manage the repetitive tasks, known as
crosscutting concerns, which occur in many places in your applica-
tions. These tasks include logging, validation, caching, exception
management, and more. In addition, the dependency injection con-
tainer provided by Enterprise Library can help you to simplify and
decouple your designs, make them more testable and understandable,
and help you to produce more efficient designs and implementations
of all kinds of applications.
Enterprise Library consists of a collection of application blocks
and a core infrastructure. All of these are reusable software compo-
nents designed to assist developers with common enterprise develop-
ment challenges. Each application block is designed to address a spe-
cific set of concerns. For example, the Logging Application Block
simplifies the implementation of common logging functions in your
application and enables you to write logging information to a variety
of locations; the Data Access Application Block simplifies the devel-
opment of common data access tasks such as reading data for display
in a UI or submitting changed data back to the underlying database
system.
45. 18 chapter two
As shown in Figure 1, the application blocks in Enterprise Library
are:
• The Caching Application Block. You can use this application block
to incorporate a local cache into your applications.
• The Cryptography Application Block. This application block can
be used to incorporate hashing and symmetric encryption into
your applications.
• The Data Access Application Block. Use this application block to
incorporate standard database functionality into your applica-
tions.
• The Exception Handling Application Block. Developers and policy
makers can use this application block to create a consistent
strategy for processing exceptions that occur throughout the
architectural layers of enterprise applications.
• The Logging Application Block. Developers can use this applica-
tion block to include standard logging functionality in their
applications and systems administrators can use the configura-
tion tool to adjust the granularity of logging at run time.
• The Policy Injection Application Block. This block contains legacy
code for backwards compatibility with existing applications. The
new functionality is available by using the Unity interception
mechanism and call handlers located in the related application
block assemblies.
• The Security Application Block. Developers can use this applica-
tion block to incorporate authorization and security caching
functionality into their applications.
• The Validation Application Block. Developers can use this applica-
tion block to create validation rules for business objects that
can be used across different layers of their applications.
• Unity Dependency Injection and Interception. Developers can use
these techniques to implement a lightweight, extensible depen-
dency injection container with support for constructor, prop-
erty, and method call injection, and to capture calls to target
objects and add additional functionality to the object.
46. 19
introduction to enterprise library integration pack for windows azure
figure 1
Enterprise Library components
Enterprise Library is configuration-driven and supports both pro-
grammatic and external configuration. As well as the application
blocks, Enterprise Library contains configuration tools, plus a set of
core functions that manage tasks applicable to all of the blocks.
The goals of Enterprise Library are the following:
• Consistency. All Enterprise Library application blocks feature
consistent design patterns and implementation approaches.
• Extensibility. All application blocks include defined extensibility
points that allow developers to customize the behavior of the
blocks by adding their own code.
• Ease of use. Enterprise Library offers numerous usability
benefits, including a graphical configuration tool, a simple
installation procedure, and clear and complete documentation
and samples.
• Integration. Enterprise Library application blocks are designed
to work well together and are tested to make sure that they do.
However, you do not have to use them together.
To learn more about Enterprise Library and the application blocks,
visit the main Enterprise Library site on MSDN® at Enterprise Library
5.0 – May 2011.
47. 20 chapter two
What Is the Enterprise Library Integration Pack
for Windows Azure?
The Enterprise Library Integration Pack for Windows Azure extends
Enterprise Library 5.0 to add additional support for developing and
managing Windows Azure applications. It shares the same benefits as
the Enterprise Library and helps developers achieve the same goals.
The Enterprise Library Integration Pack for Windows Azure in-
cludes:
• The Autoscaling Application Block to help you to automatically
scale your Windows Azure applications.
• The Transient Fault Handling Application Block to help you make
your Windows Azure applications more resilient when they
encounter transient fault conditions.
• The Blob configuration source to store your Enterprise Library
configuration in Azure blob storage.
• A protected configuration provider.
• Windows PowerShell® command line interface cmdlets to
manipulate the Autoscaling Application Block.
• Updated database creation scripts (for the Logging Application
Block and Caching Application Block) to use SQL Azure™
technology platform.
• Reference documentation.
• A developer’s guide.
• A reference implementation that illustrates the use of the new
application blocks.
The Enterprise Library Integration Pack for Windows Azure is
one of several existing and planned integration packs for Enterprise
Library.
For more information about Enterprise Library, see Microsoft
Enterprise Library 5.0 – May 2011 and the Developer’s Guide.
For more information about the Silverlight Integration Pack for
use with Microsoft Silverlight® browser plug-in applications, see
Enterprise Library 5.0 Silverlight Integration Pack.
48. 21
introduction to enterprise library integration pack for windows azure
More Information
For more information about the Enterprise Library application blocks,
see the following resources on MSDN:
• Microsoft Enterprise Library 5.0 – May 2011:
http://msdn.microsoft.com/en-us/library/ff632023.aspx
• Developer’s Guide:
http://msdn.microsoft.com/en-us/library/ff953181(v=PandP.50).
aspx
• Enterprise Library 5.0 Silverlight Integration Pack:
http://entlib.codeplex.com/wikipage?title=EntLib5Silverlight
• The Caching Application Block:
http://msdn.microsoft.com/en-gb/library/ff664753(PandP.50).aspx
• The Cryptography Application Block:
http://msdn.microsoft.com/en-gb/library/ff664484(PandP.50).aspx
• The Data Access Application Block:
http://msdn.microsoft.com/en-gb/library/ff664408(PandP.50).aspx
• The Exception Handling Application Block:
http://msdn.microsoft.com/en-gb/library/ff664698(PandP.50).aspx
• The Logging Application Block:
http://msdn.microsoft.com/en-gb/library/ff664569(PandP.50).aspx
• The Policy Injection Application Block:
http://msdn.microsoft.com/en-gb/library/ff664572(PandP.50).aspx
• The Security Application Block:
http://msdn.microsoft.com/en-gb/library/ff664771(PandP.50).aspx
• The Validation Application Block:
http://msdn.microsoft.com/en-gb/library/ff664356(PandP.50).aspx
• Unity Dependency Injection and Interception:
http://msdn.microsoft.com/unity
For more information about the Autoscaling Application Block,
see “The Autoscaling Application Block” on MSDN:
http://msdn.microsoft.com/en-us/library/hh680892(v=PandP.50).aspx
For more information about the Transient Fault Handling Applica-
tion Block, see “The Transient Fault Handling Application Block”
on MSDN:
http://msdn.microsoft.com/en-us/library/hh680934(v=PandP.50).aspx
To access web resources more easily, see the online version of the
bibliography on MSDN:
http://msdn.microsoft.com/en-us/library/hh749032(v=PandP.50).aspx
50. 23
3 The Tailspin Scenario
This chapter introduces a fictitious company named Tailspin. It de-
scribes Tailspin’s plan to use Microsoft Enterprise Library to further
develop its flagship online service named Surveys. Surveys is a cloud-
based service, hosted on the Windows Azure™ technology platform,
that enables other companies or individuals to conduct their own
online surveys and analyze the results. As with any company planning
to update one of its key applications, there are many issues to con-
sider and challenges to meet, particularly because this is the first time
the developers at Tailspin have used Enterprise Library. The chapters
that follow this one describe the benefits to Tailspin of using Enter-
prise Library and show, step by step, how Tailspin modified and re-
architected the Surveys application to use Enterprise Library.
The Tailspin Company
Tailspin is a startup ISV company of approximately 20 employees that
specializes in developing cloud solutions using Microsoft® technolo-
gies. The developers at Tailspin are knowledgeable about various Mi-
crosoft products and technologies, including Windows Azure, the
.NET Framework, ASP.NET MVC, SQL Server®, and Microsoft Visual
Studio® development system. These developers are aware of the ca-
pabilities of Enterprise Library, but have not yet incorporated it into
any of their cloud-based applications.
The Surveys application was the first of several innovative online
services that Tailspin took to market. As a startup, Tailspin decided to
specialize in cloud-hosted solutions in order to minimize its hardware
investments and maximize its ability to reach a global audience. Tail-
spin hoped that some of these cloud-hosted services would grow
rapidly, and the company wanted to have the ability to respond
quickly to increasing demand. Similarly, it fully expects some of these
cloud-based services to fail, and it does not want to be left with re-
dundant hardware on its hands. The Surveys application has been a
51. 24 chapter three
major success for Tailspin, with thousands of existing customers
around the world, and new customers signing up every day.
Tailspin’s Strategy
Tailspin is an innovative and agile organization, well placed to exploit
new technologies and the business opportunities offered by the
cloud. Tailspin’s strategy has been to embrace the cloud and gain a
competitive advantage as an early adopter, rapidly gaining some expe-
rience, and then quickly expanding on what it has learned. This strat-
egy can be described as “try, fail fast, learn, and then try again.” The
Surveys application has been a huge commercial success for Tailspin,
but its success has revealed some problems with the initial implemen-
tation in terms of its flexibility, manageability, and maintainability.
The Surveys Application
The Surveys application enables Tailspin’s customers to design a sur-
vey, publish it, and collect the results for analysis. A survey is a collec-
tion of questions, each of which can be one of several types, such as
multiple choice, numeric range, or free text. Customers begin by cre-
ating a subscription with the Surveys service, which they use to man-
age their surveys and to apply branding by using styles and logo im-
ages. Customers can also select a geographic location for their
account, so that they can host their surveys as close as possible to the
survey audience. The Surveys application allows users to try out the
application for free, and to sign up for one of several different pack-
ages that offer different collections of services for a monthly fee.
Figure 1 illustrates the Surveys application and highlights the
three different groups of users (customers, Tailspin administrators,
and Surveys participants) who interact with it.
52. 25
the tailspin scenario
figure 1
The Surveys application
Customers who have subscribed to the Surveys service (or who
are using a free trial) access the Subscriber website, which enables
them to design their own surveys, apply branding and customization,
and collect and analyze the survey results. Depending on the package
they select, they have access to different levels of functionality
within the Surveys application. Tailspin expects its customers to be of
various sizes and from all over the world, and customers can select a
geographic location for their account and surveys.
Tailspin wants to design the service in such a way that most of the
administrative and configuration tasks are “self-service” and can be
performed by the subscriber with minimal intervention by Tailspin
staff.
The public website enables the people participating in the survey
to complete their responses to the survey questions. The survey cre-
ator will let their survey audience know what URL to visit to complete
the survey.
The Tailspin website enables staff at Tailspin to manage the ap-
plication and manage the subscriber accounts. All three websites
(Subscriber, Public, and Tailspin) interact with the core services that
comprise the Surveys application and provide access to the applica-
tion’s data storage.
In the world of
Software as a Service
(SaaS), subscribers
are commonly known
as “Tenants.” We
commonly refer to
applications like
Tailspin Surveys as
“multi-tenant”
applications.
53. 26 chapter three
Tailspin’s Goals and Concerns
Tailspin faces several challenges with the current version of the Sur-
veys application. The initial development was done quickly in order to
be early to market. This resulted in some compromises during the
development process whereby some features were sacrificed, and the
design process was tailored to meet tight deadlines, not to optimize
maintainability and extensibility. Tailspin sees this next phase in the
life of the Surveys application as a consolidation phase that will lay
the groundwork for the future development of the application and
address the shortcomings of the initial implementation.
Here is how the original application works. First, customers create
surveys. These might be associated with product launches or market-
ing campaigns, or they might be seasonal, perhaps associated with a
holiday period. Often, customers who use the survey application set
up these surveys with a very short lead time. Surveys usually run for a
fixed, short period of time but may have a large number of respon-
dents. This means that the Surveys application experiences bursts of
usage, and Tailspin has very little warning of when these bursts occur.
Tailspin now offers the Surveys application to customers around the
world, and because the nature of the Surveys application includes
sudden bursts in demand, it must be able to quickly expand or con-
tract its infrastructure in different geographical locations. Up until
now, Tailspin has relied on a process that requires an operator to
manually add and remove role instances based on performance data
collected from the application or in anticipation of known or planned
events. In order to better serve its increasing number of customers
and to control its costs, Tailspin would like to automate the scaling
process.
The subscriber and public websites also have different scalability
requirements. Thousands of users might complete a survey, but only
a handful of users from each subscriber will edit existing surveys or
create new surveys. Tailspin wants to optimize the resources for each
of these scenarios.
When problems occur in the Surveys application, Tailspin some-
times struggles to resolve them quickly enough to meet its service-
level agreements (SLA). Tailspin wants to be able to respond to issues
and problems with the Surveys application more effectively by having
better diagnostics data that is easily accessible.
Resource elasticity
and geo-distribution
are key properties of
the Windows Azure
platform.
54. 27
the tailspin scenario
Tailspin wants to be able to maintain its competitive advantage by
rapidly rolling out new features to existing services or gain competi-
tive advantage by being first to market with new products and ser-
vices. For the Surveys application, Tailspin wants a platform with a
clear, consistent architecture that is easy to extend and enhance.
The Tailspin business model is to charge subscribers a monthly fee
for a service such as the Surveys application and, because of the
global market they are operating in, Tailspin wants its prices to be
competitive. Tailspin must then pay the actual costs of running the
application, so in order to maintain their profit margin Tailspin must
tightly control the running costs of the services they offer to their
customers.
In this scenario, Tailspin’s customers (the subscribers) are not
Windows Azure customers. Subscribers pay Tailspin, who in
turn pays Microsoft for their use of Windows Azure features.
Tailspin wants to ensure that customer’s data is kept safe. For
example, a customer’s data must be private to that customer, there
must be multiple physical copies of the survey data, and customers
should not be able to lose data by accidently deleting a survey. In ad-
dition, all existing survey data must be preserved whenever Tailspin
updates the application.
As the number of subscribers grows, Tailspin wants to improve
the resilience of the Surveys application to ensure that it can continue
to meet its SLAs. This is particularly important for some of Tailspin’s
larger customers.
Finally, Tailspin would like to be able to leverage the existing skills
of its developers, minimize any retraining necessary to build the Sur-
veys application, and make it easy for developers to leverage the ex-
perience they have gained working on the Surveys application in
Tailspin’s other products.
The Surveys Application Architecture
To achieve the goals of the Surveys application, Tailspin implemented
the application as a cloud-based service using Windows Azure. Figure
2 shows a high-level view of this architecture.
56. THE WRONG NICKEL. See
GENERAL ELECTRIC'S TRUE.
WRONG ODDS. See
CORONADO 9.
WRONG RECOMMENDATIONS. See
BELL SYSTEM SALES DEVELOPMENT COURSE.
F-12.
THE WRONG ROBBIE. See
MY THREE SONS.
WRONG ROPE. See
PONY EXPRESS. 7121.
WRONG USAGE PROSPECTING. See
BELL SYSTEM SALES DEVELOPMENT COURSE.
F-10.
WRONG WAY CORRIGAN LANDS IN DUBLIN,
JULY 18, 1938. See
ALMANAC NEWSREEL. July 18, 1960.
WRONG WAY FELDMAN. See
GILLIGAN'S ISLAND.
62. Y
THE YACHT CLUB GANG. See
CHECKMATE.
THE YACHTING PARTY. See
HOW TO MARRY A MILLIONAIRE.
YACHTSMAN MAGOO. See
MISTER MAGOO.
THE YADWIN REPORT. See
THE BING CROSBY SHOW.
YAHOO. See
LAREDO.
YAK, YAK, YAK. See
PETE AND GLADYS.
YALE BOWL SEES ARMY VICTOR. See
SPORTFOLIO.
YALE UNIVERSITY CHEMISTRY FILMS. See
65. YANKS OCCUPY TOKYO. See
GREATEST HEADLINES OF THE CENTURY.
YANKS ON AFRICAN SOIL. See
GREATEST HEADLINES OF THE CENTURY.
YANKS SMASH ACROSS RHINE. See
GREATEST HEADLINES OF THE CENTURY.
YANKS STORM AACHEN. See
GREATEST HEADLINES OF THE CENTURY.
YANKS WIN FIFTH STRAIGHT SERIES. See
SPORTFOLIO.
YANQUI GO HOME. See
THE BARBARA STANWYCK SHOW.
WIDE COUNTRY.
YARD BIRDS. See
LEAVE IT TO BEAVER.
YAWKEY. See
LAWMAN.
YE FAITHFUL. Brian Kellman & Charles
W. Tamulonis. 9 min., sd., b&w,
73. HARRIGAN AND SON.
WENDY AND ME.
YOU CAN'T ALWAYS BE A HERO. See
THE REAL MCCOYS. 36.
YOU CAN'T BE A LITTLE GIRL ALL YOUR
LIFE. See
ALFRED HITCHCOCK PRESENTS.
YOU CAN'T BEAT THE ARMY. See
THE REAL MCCOYS.
YOU CAN'T BEAT THE PERCENTAGE. See
MAVERICK.
YOU CAN'T BEAT THE SYSTEM. See
EAST SIDE/WEST SIDE.
YOU CAN'T CHEAT AN HONEST MAN. See
THE REAL MCCOYS. 6.
YOU CAN'T FIGHT CITY HALL. See
THE LIFE AND LEGEND OF WYATT EARP.
THE ROARING 20'S.
74. YOU CAN'T GO HOME AGAIN. See
GUESTWARD HO.
YOU CAN'T PICK THE NUMBER. See
THE UNTOUCHABLES. NO. 5118-5.
YOU CAN'T RAISE CHILDREN BY THE
BOOK. See
WOMAN!
YOU CAN'T TRUST A MAN. See
ALFRED HITCHCOCK PRESENTS.
YOU CAN'T WIN 'EM ALL. See
SCHLITZ-LUX PLAYHOUSE.
YOU CHALLENGE ME TO A WHAT? See
THE MOTHERS-IN-LAW. No. 12.
YOU COULD DIE LAUGHING. See
THE NURSES.
YOU DON'T HAVE TO POLISH A SUBWAY. See
FAIR EXCHANGE.
YOU DON'T LIVE HERE. See
GEORGE SANDERS MYSTERY THEATRE. 4.
86. Welcome to our website – the perfect destination for book lovers and
knowledge seekers. We believe that every book holds a new world,
offering opportunities for learning, discovery, and personal growth.
That’s why we are dedicated to bringing you a diverse collection of
books, ranging from classic literature and specialized publications to
self-development guides and children's books.
More than just a book-buying platform, we strive to be a bridge
connecting you with timeless cultural and intellectual values. With an
elegant, user-friendly interface and a smart search system, you can
quickly find the books that best suit your interests. Additionally,
our special promotions and home delivery services help you save time
and fully enjoy the joy of reading.
Join us on a journey of knowledge exploration, passion nurturing, and
personal growth every day!
ebookbell.com