building azure applications ireland
DESCRIPTION
These slides are from Scott Guthrie's Building Azure Applications talk presented on December 3rd 2013 in National College of Ireland. They provide a detailed view of building in Windows Azure and how to manage development of large application on a Cloud platform.TRANSCRIPT
![Page 1: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/1.jpg)
BUILDING REAL WORLD CLOUD APPS WITH WINDOWS AZURE
Scott GuthrieCorporate Vice PresidentWindows Azure
Email: [email protected]: @scottgu
![Page 2: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/2.jpg)
Today’s Goal
Go much deeper than “hello world” and cover key development patterns and practices that will help you build real world cloud apps
![Page 3: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/3.jpg)
Cloud Patterns we will CoverPart 1:• Automate Everything• Source Control• Continuous Integration &
Delivery• Web Dev Best Practices• Enterprise Identity
Integration• Data Storage Options• Data Partitioning Strategies
Part 2:• Unstructured Blob
Storage• Designing to Survive
Failures• Monitoring & Telemetry• Transient Fault Handling• Distributed Caching• Queue Centric Work
Pattern
![Page 4: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/4.jpg)
demo
Quick FixIt Demo
![Page 5: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/5.jpg)
Cloud Patterns we will discussPart 1:• Automate Everything• Source Control• Continuous Integration &
Delivery• Web Dev Best Practices• Enterprise Identity
Integration• Data Storage Options
Part 2:• Data Partitioning
Strategies• Unstructured Blob
Storage• Designing to Survive
Failures• Monitoring & Telemetry• Transient Fault Handling• Distributed Caching• Queue Centric Work
Pattern
![Page 6: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/6.jpg)
Pattern 1: Automate Everything
![Page 7: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/7.jpg)
Dev/Ops Workflow
Develop
Deploy
Operate
Learn
Repeatable Reliable Predictable Low Cycle
Time
![Page 8: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/8.jpg)
demo
Automated Environment Creation and App Deployment
![Page 9: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/9.jpg)
Pattern 2: Source Control
![Page 10: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/10.jpg)
Source Control• Use it!
• Treat automation scripts as source code and version it together with your application code
• Parameterize automation scripts –> never check-in secrets
• Structure your source branches to enable DevOps workflow
![Page 11: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/11.jpg)
Example Source Branch StructureMaste
rStaging
Development
Feature Branch A
Feature Branch B
Feature Branch C
Code that is live in production
Code in final testing before production
Where features are being integrated
![Page 12: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/12.jpg)
Need to make a quick hotfix?
MasterStaging
Development
Feature Branch A
Feature Branch B
Feature Branch C
Hotfix 145
![Page 13: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/13.jpg)
Pattern 3: Continuous Integration and Continuous Delivery
![Page 14: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/14.jpg)
Continuous Integration & Delivery• Each check-in to Development, Staging and
Master branches should kick off automated build + check-in tests
• Use your automation scripts so that successful check-ins to Development and Staging automatically deploy to environments in the cloud for more in-depth testing
• Deploying Master to Production can be automated, but more commonly requires an explicit human to sign-off before live production updated
![Page 15: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/15.jpg)
Visual Studio Online• TFS and Git support• Elastic Build Service• Continuous
Integration• Continuous Delivery• Load Testing Support• Team Room
Collaboration• Agile Project
Management
![Page 16: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/16.jpg)
Pattern 4: Web Dev Best Practices
![Page 17: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/17.jpg)
Web Development Best Practices• Scale-out your web tier using stateless web
servers behind smart load balancers
• Dynamically scale your web tier based on actual usage load
![Page 18: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/18.jpg)
Windows Azure Web Sites Build with ASP.NET, Node.js, PHP or
Python Deploy in seconds with FTP,
WebDeploy, Git, TFS Easily scale up as demand grows
![Page 19: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/19.jpg)
Load Balancer(1 of n)
Reserved InstanceVirtual Machine with
IIS already setup(1 of n…)
Windows Azure Web Site Service
Load Balancer(2 of n)
Reserved InstanceVirtual Machine with
IIS already setup(2 of n…)
Deployment Service(FTP,
WebDeploy, GIT, TFS, etc)
Developer orAutomation
Script
Reserved InstanceVirtual Machine with
IIS already setup(1 of 2)
Reserved InstanceVirtual Machine with
IIS already setup(2 of 2)
Server Failure….
Reserved InstanceVirtual Machine with
IIS already setup(2 of 2)
![Page 20: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/20.jpg)
AutoScale – Built-into Windows Azure
• AutoScale based on real usage
• CPU % thresholds• Queue Depth• Supports schedule times
![Page 21: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/21.jpg)
demo
Windows Azure Web Sites & AutoScale
![Page 22: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/22.jpg)
Web Development Best Practices• Scale-out your web tier using stateless web
servers behind smart load balancers
• Dynamically scale your web tier based on actual usage load
• Avoid using session state (use cache provider if you must)
• Use CDN to edge cache static file assets (images, scripts)
• Use .NET 4.5’s async support to avoid blocking calls
![Page 23: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/23.jpg)
Take advantage of the new .NET 4.5 async language support to build non-blocking, asynchronous, server applications
ASP.NET MVC, ASP.NET Web API and ASP.NET WebForms all have built-in async language keyword support as of .NET 4.5
![Page 24: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/24.jpg)
Integrated async language support coming with Entity Framework 6 (currently in preview)
Enables you to author all of your SQL database access in a non-blocking way
Enables web server to re-use the worker thread while you are waiting on data from SQL
![Page 25: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/25.jpg)
New async language support in EF composes cleanly with LINQ expressions as well.
This is really cool
![Page 26: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/26.jpg)
Pattern 5: Single Sign-On
![Page 27: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/27.jpg)
Windows Azure AD Active Directory in the Cloud Integrate with on-premises Active
Directory Enable single sign-on within your
apps Supports SAML, WS-Fed, and
OAuth 2.0 Enterprise Graph REST API
![Page 28: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/28.jpg)
Windows AzureYour
app in AzureWindows Azure
Active Directory
3rd party apps
![Page 29: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/29.jpg)
demo
Windows Azure Active Directory
![Page 30: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/30.jpg)
Config wizard automatically launches
![Page 31: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/31.jpg)
Enter Windows Azure AD Credentials
![Page 32: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/32.jpg)
Enter Windows Server AD Credentials
![Page 33: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/33.jpg)
Enable Hashed Password Sync
![Page 34: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/34.jpg)
Almost done
![Page 35: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/35.jpg)
Finished – Sync will start automatically
No need to install on multiple DC’s. No reboot required!
![Page 36: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/36.jpg)
Enable SSO with Azure AD and ASP.NET
![Page 37: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/37.jpg)
Enable SSO with Azure AD and ASP.NET
![Page 38: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/38.jpg)
Enable SSO with Azure AD and ASP.NET
![Page 39: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/39.jpg)
Pattern 6: Data Storage
![Page 40: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/40.jpg)
Data Storage
Range of options for storing data Different query semantics, durability, scalability and ease-of-use options available in the cloud
Compositional approachesNo “one size fits all” – often using multiple storage systems in a single app provides best approach
Balancing prioritiesInvestigate and understand the strengths and limitations of different options
![Page 41: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/41.jpg)
Data Storage Options on Windows Azure
Blob Storage(unstructured files)
SQL Database(Relational)
Table Storage(NoSQL Key/Value
Store)
SQL Server, MySQL,Postgress, RavenDB, MongoDB, CouchDB, neo4j, Redis, Riak, etc.
Platform as a Service(managed services)
Infrastructure as a Service(virtual machines)
![Page 42: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/42.jpg)
Some Data Storage Questions to AskData Semantic • What is the core data storage and data access semantic?
Query Support• How easy is it to query the data?
• What types of questions can be efficiently asked?
Functional projection
• Can questions, aggregations, etc. be executed server-side?
• What languages or types of expressions can be used?
Ease of Scalability• Does it natively implement scale-out?
• How easy is it to add/remove capacity (size, throughput)?
Manageability • How easy is the platform to instrument, monitor and manage?
Operations • How easy is it to deploy and run on Azure? PaaS? IaaS? Linux?
Business continuity• Availability and ease-of-use: backup/restore and disaster
recovery
![Page 43: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/43.jpg)
Choosing Relational Database on AzureWindows Azure SQL Database (PaaS)
• Database as a Service (no VMs required)• Database-Level SLA (HA built-in)• Updates, patches handled automatically
for you• Pay only for what you use (no license
required)• Good for handling large numbers of
smaller databases (<=150 GB each)
• Some feature gaps with on-prem SQL Server (lack of CLR, TDE, Compression support, etc.)
• Database size limit of 150GB• Recommended max table size of 10GB
SQL Server in a Virtual Machine (IaaS)
• Feature compatible with on-prem SQL Server• VM-level SLA (SQL Server HA via AlwaysOn in
2+VMs)• You have complete control over how SQL is
managed• Can re-use SQL licenses or pay by the hour for
one• Good for handling fewer but larger (1TB+)
databases
• Updates/patches (OS and SQL) are your responsibility
• Creation and management of DBs your responsibility
• Disk IOPS limited to ~8000 IOPS (via 16 data drives)
Pros
Cons
Pros
Cons
http://blogs.msdn.com/b/windowsazure/archive/2013/02/14/choosing-between-sql-server-in-windows-azure-vm-amp-windows-azure-sql-database.aspx
![Page 44: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/44.jpg)
demo
Using a SQL Database with .NET Entity Framework
![Page 45: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/45.jpg)
Pattern 7: Data Scale and Partitioning
![Page 46: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/46.jpg)
Understanding the 3-Vs of Data StorageVolumeHow much data will you ultimately store?
VelocityWhat is the rate at which your data will grow? What will the usage pattern look like?
VarietyWhat type of data will you store? Relational, images, key-value pairs, social graphs?
![Page 47: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/47.jpg)
Scale out your data by partitioning it
![Page 48: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/48.jpg)
Vertical PartitioningFirst Name
Last Name Email Thumbnail Photo
David Alexander [email protected]
3kb 3MB
Jarred Carlson [email protected]
3kb 3MB
Sue Charles [email protected] 3kb 3MB
Simon Mitchel [email protected]
3kb 3MB
Richard Zeng [email protected]
3kb 3MB
![Page 49: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/49.jpg)
Horizontal Partitioning (Sharding)First Name
Last Name Email Thumbnail Photo
David Alexander [email protected] 3kb 3MB
Jarred Carlson [email protected]
3kb 3MB
Sue Charles [email protected] 3kb 3MB
Simon Mitchel [email protected]
3kb 3MB
Richard Zeng [email protected]
3kb 3MB
A C M Z
![Page 50: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/50.jpg)
Hybrid PartitioningFirst Name
Last Name Email Thumbnail Photo
David Alexander [email protected]
3kb 3MB
Jarred Carlson [email protected]
3kb 3MB
Sue Charles [email protected] 3kb 3MB
Simon Mitchel [email protected]
3kb 3MB
Richard Zeng [email protected]
3kb 3MB
A-L
M-Z
![Page 51: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/51.jpg)
It is a lot easier to choose one of these partitioning schemes before you go live….
![Page 52: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/52.jpg)
Pattern 8: Using Blob Storage
![Page 53: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/53.jpg)
Data Storage Options on Windows Azure
Blob Storage(unstructured files)
SQL Database(Relational)
Table Storage(NoSQL Key/Value
Store)
SQL Server, MySQL,Postgress, RavenDB, MongoDB, CouchDB, neo4j, Redis, Riak, etc.
Platform as a Service(managed services)
Infrastructure as a Service(virtual machines)
![Page 54: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/54.jpg)
Blob Storage Highly scalable, durable, available file storage
REST API as well as Language APIs (.NET, Java, Ruby, etc)
Blobs can be exposed publically over HTTP
Can secure blobs as well as grant temporary access tokens
![Page 55: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/55.jpg)
1) Programmatically setup/configure your blob containers at app startup time
2) CloudBlobClient class enables you to reference “Containers” within a storage account
3) Blob Storage Containers by default are private – you must explicitly make them public if you want users/browsers outside your app to be able to read the files over HTTP
![Page 56: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/56.jpg)
1) First we reference the “images” container within our storage account
2) Then we come up with a unique file name to store the image as
3) Then we persist the photo into the blob container and set the appropriate content-type
4) Then retrieve a fully qualified URL to it that browsers can directly access (without having to pull it via our web server)
![Page 57: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/57.jpg)
demo
Implementing Vertical Partitioning using Blob Storage
![Page 58: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/58.jpg)
Pattern 9: Design to Survive Failures
![Page 59: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/59.jpg)
Design to survive failuresGiven enough time and pressure, everything fails
How will your application behave?• Gracefully handle failure modes, continue to deliver value• Or not so gracefully…
Types of failures:• Transient - Temporary service interruptions, self-healing• Enduring - Require intervention.
![Page 60: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/60.jpg)
Regions may become unavailableConnectivity Issues, acts of nature
Region
Service Entire Services May FailService dependencies (internal and external)
Failure scope
MachinesIndividual Machines May FailConnectivity Issues (transient failures), hardware failures, configuration and code errors
![Page 61: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/61.jpg)
What do the 9’s mean in an SLA?
![Page 62: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/62.jpg)
Storage
99.9% SLA
Web Site
99.95% SLA
SQL Database
99.9% SLA
Composite Composite
Making it a little more real…
![Page 63: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/63.jpg)
How to design with this in mind?• Have good monitoring and telemetry• Handle Transient Faults• Use Distributed Caching• Circuit Breakers• Loose Coupling via the Queue Centric Work
Pattern
![Page 64: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/64.jpg)
Pattern 10: Monitoring and Telemetry
![Page 65: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/65.jpg)
Running a Live Site Service
![Page 66: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/66.jpg)
Running without Insight / Telemetry
![Page 67: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/67.jpg)
Buy/Rent a Telemetry Solution
![Page 68: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/68.jpg)
demo
Using New Relic to Monitor our FixIt Web Site
http://www.hanselman.com/blog/PennyPinchingInTheCloudEnablingNewRelicPerformanceMonitoringOnWindowsAzureWebsites.aspx
![Page 69: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/69.jpg)
Logging for InsightInstrument your code for production logging• If you didn’t capture it, it didn’t happen
Implement inter-service monitoring and logging• Capture and log inter-service activity• Capture both the availability and latency of all inter-service
calls
Run-time configurable logging• Enable activation (capture or delivery) of logging levels without
requiring a redeployment of your application
![Page 70: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/70.jpg)
Logging InsightUseful Tips:
1) Abstract logging API so that you can tweak/change implementation later
2) Logging library should be asynchronous (fire and forget) to avoid blocking
3) Log context + exceptions (including inner exceptions) on all errors
4) Log latency + context information for all cross-machine and external service calls
5) Don’t log secrets!!!!
![Page 71: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/71.jpg)
Choosing Logging Levels• Must be able to isolate issues solely through
telemetry logs
• Telemetry is meant to INFORM (I want you to know something) or ACT (I want you to do something)
• Too much ACT creates noise – too much work to sift through to find genuine issues
• In a cloud app, only things that require intervention (automatic or manual) should trigger ACT• Machines failing is NOT something that should require
manual intervention in a good cloud application.
• Design your telemetry levels (and consumers) with this in mind
Level Context
Error Always on in production. Any errors will trigger ACTION to resolve (automated or human). • Configuration issues • Application failure (cascading failure
or critical service down)
Warning Always on in production. Warnings will INFORM, and may signal potential ACTION• Timeouts or throttling in external
service
Info Always on in production. Info messages INFORM during diagnostics and troubleshooting
Debug (Verbose)
On during active debugging and troubleshooting on a case by case basis
![Page 72: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/72.jpg)
Built-in Logging Support in AzureWeb SitesSystem.Diagnostics -> Table Storage
HTTP/FREB Logs -> File-System or Blob Storage
Windows Events -> File-System
Cloud ServicesSystem.Diagnostics -> Table Storage
HTTP/FREB Logs -> Blob Storage
Performance Counters -> Table Storage
Windows Events -> Table Storage
Custom Directory Monitoring -> Copy files to Blob Storage
Storage AnalyticsLogs -> Blob Storage
Metrics -> Table Storage
![Page 73: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/73.jpg)
demo
Implementing Logging within our FixIt Web Site
![Page 74: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/74.jpg)
Pattern 11: Transient Fault Handling
![Page 75: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/75.jpg)
Transient FailuresTemporary service interruptions, typically self-healing• Connection failures to an external service (or suddenly aborted
connections)• Busy signals from an external service (sometimes due to “noisy
neighbors”)• External service throttling your app due to overly aggressive calls
Can often mitigate with smart retry/back-off logic• Transient Fault Handling Block from P&P can make this easy to
express• Storage Library already has built-in support for retry/back-offs• Entity Framework V6 will include built-in support for it with SQL
Databases
![Page 76: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/76.jpg)
Patterns & PracticesTransient Fault Handling Application Block
http://nuget.org/packages/EnterpriseLibrary.WindowsAzure.TransientFaultHandling
![Page 77: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/77.jpg)
Entity FrameworkBuilt-in support fault-retry logic coming with EF6
Above code will do connection retries up to 3 times within 5 seconds (with an exponential back-off delay)
![Page 78: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/78.jpg)
demo
Transient Fault Handling with EF6
![Page 79: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/79.jpg)
Be mindful of max delay thresholds
At some point, your request could be blocking the line and cause back pressure. Often better to fail gracefully at some point, and get out of the queue!
![Page 80: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/80.jpg)
Pattern 12: Distributed Caching
![Page 81: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/81.jpg)
Distributed CachingNot always practical to hit data source on every request• Throughput and latency impact as traffic grows
Data doesn’t always need to be immediately consistent even when things are working well
Cached copy of data can help you provide better customer experience when things aren’t working well
![Page 82: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/82.jpg)
Windows Azure Cache Service
High throughput, low-latency distributed cache• In-memory (not written to disk)• Scale-out architecture that distributes across many
servers
Key/Value Programming Model• Get(key) => avg. 1ms latency end-to-end• Put(key) => avg. 1.2ms latency end-to-end
128MB to 150GB of content can be stored in each Cache Service
![Page 83: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/83.jpg)
![Page 84: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/84.jpg)
![Page 85: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/85.jpg)
![Page 86: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/86.jpg)
![Page 87: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/87.jpg)
![Page 88: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/88.jpg)
![Page 89: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/89.jpg)
![Page 90: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/90.jpg)
Web.Config Update
![Page 91: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/91.jpg)
Coding against the cache
![Page 92: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/92.jpg)
Monitoring Usage
![Page 93: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/93.jpg)
Scaling the Cache
![Page 94: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/94.jpg)
24GB Distributed Cache
Web Site VMs
12GB VM 12GB VM
2
![Page 95: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/95.jpg)
24GB Distributed Cache
Web Site VMs
12GB VM 12GB VM
4
12GB VM 12GB VM
48GB Distributed Cache
![Page 96: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/96.jpg)
Popular Cache Population StrategiesOn Demand / Cache Aside• Web/App Tier pulls data from source and caches on cache hit miss
Background Data Push• Background services (VMs or worker roles) push data into cache
on a regular schedule, and then the web tier always pull from the cache
Circuit Breaker• Switch from live dependency to cached data if dependency goes
down
![Page 97: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/97.jpg)
Use distributed caching in any application whose users share a lot of common data/content or where the content doesn’t change frequently
![Page 98: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/98.jpg)
Pattern 13: Queue Centric Work Pattern
![Page 99: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/99.jpg)
Queue Centric Work PatternEnable loose coupling between a web-tier and backend service by asynchronously sending messages via a queue
Scenarios it is useful for: • Doing work that is time consuming (high latency)• Doing work that is resource intensive (high CPU)• Doing work that requires an external service that might not always
be available• Protecting against sudden load bursts (rate leveling)
Cons:• Trade off can be higher end-to-end times for short latency scenarios
![Page 100: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/100.jpg)
Tightly Coupled
FixIt Web Server
FixIt DB
Sql Database
![Page 101: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/101.jpg)
Tightly Coupled
FixIt Web Server
FixIt DB
Sql DatabaseSql Database
![Page 102: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/102.jpg)
FixIt Web Server
Task Queue
Loosely Coupled
Sql Database
Backend Service
Queue Listener
![Page 103: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/103.jpg)
Backend Service
Queue Listener
FixIt Web Server
Task Queue
Loosely Coupled
Sql Database
![Page 104: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/104.jpg)
FixIt Web Server
Task Queue Backend Service
Tracking
Loosely Coupled
Backend Service
Queue Listener
Sql DatabaseSql Database
Queue Listener
![Page 105: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/105.jpg)
FixIt Web Servers
Task Queue
QueueListener
QueueListener
Backend Services
Scale Tiers Independently
![Page 106: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/106.jpg)
Modifying our Existing “Create a FixIt Task” Scenario
to Use Queues
![Page 107: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/107.jpg)
![Page 108: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/108.jpg)
![Page 109: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/109.jpg)
Create Action in our Web App (before)
Before our Controller used the FixItRepository to update the database with the submitted FixIt.
Then we show the success page
![Page 110: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/110.jpg)
Create Action in our Web App (after)
Now we post the FixItTask to a Queue
Then we show the success page
![Page 111: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/111.jpg)
Simple SendMessage Implementation
Uses JSON.NET to serialize the FixItTask object to JSON
Then adds a message with the JSON payload to the “fixits” queue
Web App shows “Success” page as soon as the message is persisted into the queue
![Page 112: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/112.jpg)
Simple Receiver Implementation
• Loops forever processing messages in the queue
• De-serializes messages from JSON to .NET
• Saves FixIt objects in FixItRepository (same class we previously used in the web app)
• More complete implementation would add logic to pause if database was unavailable and handle recovery cleaner
• Because the FixIt is persisted in the queue, we won’t loose it even if the database is down
![Page 113: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/113.jpg)
Why does this bring us?Resiliency if our database is ever unavailable• Our customers can still make FixIt requests even if this
happens
Ability to add more backend logic on each FixIt request• No longer gated by what can be done in lifetime of HTTP
request• Examples: workflow routing on who it is assigned to,
email/SMS, etc• Queues can give us resiliency to these additional
external services too
![Page 114: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/114.jpg)
MICROSOFT CONFIDENT IAL – INTERNAL ONLY
Storage
99.9% SLA
Compute
99.95% SLA
SQL Database
99.9% SLA
Composite
What is our composite SLA now for the “Create FixIt Request” scenario?
Previously
Composite
99.9% SLA
99.95% SLA
Now
![Page 115: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/115.jpg)
How could we make it even better?Have two queues – in two different regionsChances of both being down at same time very, very small
Web App and Queue Listeners could be smart and fail-over if primary is having a problem
Have the web-app deployed in two different regionsUse Windows Azure Traffic Manager to automatically redirect users if one is having a problem
![Page 116: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/116.jpg)
Cloud Patterns we CoveredPart 1:• Automate Everything• Source Control• Continuous Integration &
Delivery• Web Dev Best Practices• Enterprise Identity
Integration• Data Storage Options
Part 2:• Data Partitioning
Strategies• Unstructured Blob
Storage• Designing to Survive
Failures• Monitoring & Telemetry• Transient Fault Handling• Distributed Caching• Queue Centric Work
Pattern
![Page 117: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/117.jpg)
Cloud computing offers tremendous opportunitiesReach more users and customers, and in a deeper wayBe more cost effective by elastically scaling up and downDeliver solutions that weren’t possible or practical beforeLeverage a flexible, rich, development platform
Follow these cloud patterns and you’ll be even more successful with the solutions you build
Summary
![Page 118: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/118.jpg)
To Learn MoreFailSafe: Building Scalable, Resilient Cloud Services http://aka.ms/FailsafeCloud
Cloud Service Fundamentals in Windows Azure http://aka.ms/csf
Cloud Architecture Patterns: Using Microsoft Azuregreat book by Bill Wilder
Release It!: Design and Deploy Production-Ready SoftwareGreat book by Michael T. Nygard
![Page 119: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/119.jpg)
start now.http://WindowsAzure.com
![Page 120: Building azure applications ireland](https://reader037.vdocuments.mx/reader037/viewer/2022102901/5561ec31d8b42ab1068b53aa/html5/thumbnails/120.jpg)
© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to
be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.