• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Building High Performance Web Applications with the Windows Azure Platform

on

  • 4,339 views

The Windows Azure Platform enables developers to build dynamically scalable web applications easily. Come and learn how services like the Content Delivery Network (CDN) and Windows Azure AppFabric ...

The Windows Azure Platform enables developers to build dynamically scalable web applications easily. Come and learn how services like the Content Delivery Network (CDN) and Windows Azure AppFabric Caching can help you build high-performance web applications in Windows Azure. In this session we’ll share some tips & tricks to improve performance when using web & worker roles in Azure, and to optimize your overall application for maximum performance.

Statistics

Views

Total Views
4,339
Views on SlideShare
4,337
Embed Views
2

Actions

Likes
3
Downloads
58
Comments
0

1 Embed 2

http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Building High Performance Web Applications with the Windows Azure Platform Building High Performance Web Applications with the Windows Azure Platform Presentation Transcript

    • Building High Performance Web Applications with the Windows Azure Platform
      Wade Wegner
      Technical Evangelist
      Microsoft Corporation
    • High Performance Web Applications
      What do I mean?
      Global user base, snappy response times
      Scale out to handle many concurrent requests
      Heavy transaction load & bandwidth requirements
      How does this apply to the cloud?
      Windows Azure applications are mostly like on-premises applications…
      … but some things are different (and even easier) in the cloud.
      I will assume you already know the basics of Windows Azure
      Agenda
      Asynchronous design patterns
      Managing data access
      Tuning application performance
    • Synchronous Design Pattern
      Handle one request at a time for each thread
      Block on “the work” done for each request, then respond & repeat
      Thread stacks are the data structures used to track client requests
      Threads spend most of their time blocking
      Increase thread count for greater throughput – heavyweight approach
      SQL Azure
      Web App Front End
      Client Request #1
      “The Work” #1
      Middle Tier
      Client Response #1
      WA Storage
      Thread
      Thread
      Response #1
      blocks
      Client Request #2
      Waiting…
      Time passes…
    • Handle one request at a time for each thread
      Queue “the work”, then handle the next request or post back results
      Client requests tracked explicitly in app’s data structures
      Local state is not durable
      External state operations must be idempotent or transactional
      Threads block less so fewer threads provide greater throughput
      Throughput gated primarily on duration of “The Work”
      Asynchronous Design Pattern
      SQL Azure
      Web App Front End
      Client Request #1
      “The Work” #1
      Middle Tier
      Client Response #1
      WA Storage
      Response #1
      Thread
      Thread
      Client Request #2
      “The Work” #2
      Context
      Client Response #2
      Response #2
    • Asynchronous Cloud Apps
      Async design applies to both on-premise and cloud apps equally
      Windows Azure Storage Queues are useful for async communication between role instances
      Built-in load balancing
      Handles loss of individual role instances gracefully
      SQL Azure and Windows Azure Storage both support asynchronous calls
      ADO.NET Entity Framework
      WCF Data Services
      LINQ to SQL
      Plain old ADO.NET
    • How to transfer data efficiently to and from clients?
      There are different kinds of data; each has its own tricks
      Trick #1: Get out of the way when you can
      Send clients directly to blob storage for static content
      Media (e.g. images, video)
      Binaries (e.g. XAP, MSI, ZIP)
      Data files (e.g. XML)
      Managing Data Access
      Blob
      Storage
      Hosted Compute
      Hosted Compute
    • Shared Access Signatures
      Trick #2: Shared access signatures provide direct access to ACLed content
      Can be time-bound or revoked on demand
      Also works for write access (e.g. user-generated content)
      http://blog.smarx.com/posts/shared-access-signatures-are-easy-these-days
      2. Service prepares a Shared Access Signature (SAS) to X using the securely stored storage account key
      1. “I am Bob & I want X”
      Hosted Compute
      Stg Key
      3. Service returns SAS (signed HTTPS URL)
      Blob Storage
      4. Bob uses SAS to access X directly from Blob Storage for reduced latency & compute load
      Non-public blob
      (e.g. paid or ad-funded content)
      X
    • Trick #3: Serve public blobs from the edge with the Windows Azure CDN
      Reduces latency and central storage load
      Use the CDN when you expect multiple accesses before content expiration
      Serve Blobs from the Edge
      Possibly many hops or slow/lossy links
      Few hops
      CDN
      Blob Storage
      Closest Point of Presence
      Public container
      X
      X
      Blob header determines time-to-live at the edge
      DNS name resolves to closest POP
    • Windows Azure Content Delivery Network
      >20 global locations with 99.95% availability
      Enabling CDN access for your Windows Azure storage account
      Enable the CDN in the dev portal
      It will generate a new URL for CDN-based access to your account
      Same content, 2 URLs with different access patterns
      CDN URL: http://azXXXX.vo.msecnd.net/images/myimage.png
      WA Storage URL: http://myacct.blob.core.windows.net/images/myimage.png
      CNAME mappings to CDN URLs
      http://blog.smarx.com/posts/using-the-new-windows-azure-cdn-with-a-custom-domain
      Adaptive Streaming can be made to work with the CDN too
      http://blog.smarx.com/posts/smooth-streaming-with-windows-azure-blobs-and-cdn
      Will not require cleverness soon
    • Managing CDN Content Expiration
      Default behavior is to fetch once and cache for up to 72 hrs
      Modify max-age cache control blob header to control the TTL
      x-ms-blob-cache-control: public, max-age=<value in seconds>
      Think hours, days or weeks
      Higher numbers reduce cost and latency via CDN, proxy & browser caches
      Use versioned URLs to expire content on-demand
      Enables easy rollback and A/B testing
      Blob Storage
      CDN
      HTML Served by App
      … <imgsrc="http://azXXXX.vo.msecnd.net/images/logo.2010-08-01.png" />…
      … <imgsrc="http://azXXXX.vo.msecnd.net/images/logo.2010-10-29.png" />…
      logo.2010-08-01.png
      logo.2010-08-01.png
      logo.2010-10-29.png
      logo.2010-10-29.png
    • Trick #4: Cache hot data in memory to avoid slower data-tier access
      Session state (e.g. shopping cart) & immutable reference data (e.g. product catalog entries)
      Caching tier will help you reduce latency and cost
      Lower latency/higher throughput than data tier, especially under load
      In-Memory Caching
      In-Memory Caching
      SQL Azure
      SQL Azure
      Hosted Compute
      Table Storage
      Table Storage
    • Anatomy of A Distributed Cache
      Cache footprint or bandwidth requirement may grow beyond a single VM
      Distributed caches scale out
      Multiple role instances may be cache clients
      Clients access the cache as if it was a single large namespace
      Unified Cache View
      Cache layer distributes data across the various cache instances
    • Windows Azure AppFabric Caching
      What is it?
      Windows Server AppFabric Cache is an on-premise distributed in-memory cache
      AppFabric Caching is a new, hosted in-memory caching service
      CTP release at PDC
      Roadmap to full parity between on-premise and cloud where it makes sense
      Excellent performance
      Highly scalable, 64-bit service
      Low latency, will be hosted per subregion for app affinity
      Highly-available
      AuthN/AuthZ integrated with Access Control Service
      You may have heard of memcached too
      Latest memcached works on Windows Azure with 1.3 SDK
      http://code.msdn.microsoft.com/winazurememcached
      You manage instances and pay for compute hours
    • AppFabric Caching Advantages
      Simple to administer
      No need to manage and host a distributed cache yourself
      Integrates easily into existing applications
      ASP.NET session state and output cache providers enable no-code integration
      Same managed interfaces as Windows Server AppFabric Cache
      Caches any serializable managed object
      No object size limits
      Near cache (client-local) for hot data without serialization costs
      On-Premises App
      Windows Azure App
      Windows Server AppFabric Cache
      Windows Azure AppFabric Caching
      Core Logic
      AppFabric Cache APIs
      Core Logic
      AppFabric Cache APIs
    • AppFabric Caching Security Configuration
      <configuration>
      <dataCacheClientdeployment="Simple">
      <hosts>
      <hostname="<your URI>"cachePort="22233" />
      </hosts>
      <securityPropertiesmode="Message">
      <messageSecurityauthorizationInfo="<your authentication token>" />
      </securityProperties>
      </dataCacheClient>
      </configuration>
    • AppFabric Caching Session State Provider
      <configuration>
      <system.web>
      <sessionStatemode="Custom"customProvider="DistributedSessionProvider"compressionEnabled="false">
      <providers>
      <addname="DistributedSessionProvider"type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider,Microsoft.Web.DistributedCache"cacheName="default"applicationName="Contoso"useBlobMode="false"/>
      </providers>
      </sessionState>
      </system.web>
      </configuration>
    • AppFabric Caching Output Provider
      <system.web>
      <caching>
      <outputCachedefaultProvider="DistributedCache">
      <providers>
      <addname="DistributedCache"type="Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider,Microsoft.Web.DistributedCache" cacheName="default" applicationName="Contoso" />
      </providers>
      </outputCache>
      </caching>
      </system.web>
    • AppFabric Caching Code
      // Use cache configuration from app config
      DataCacheFactoryCacheFactory= new DataCacheFactory();
      // Get cache client for cache
      DataCachemyCache= CacheFactory.GetDefaultCache();
      // Add an object to the cache.
      myCache.Put(“myKey", myObject);
      retrievedObject = myCache.Get("myKey");
      if (retrievedObject == null)
      {
      // Cache miss
      }
    • SQL Azure & Sharding
      Trick #5: Partition (or shard) your SQL Azure data across databases
      Spreads load across multiple database instances
      Avoid hitting database size limits
      Parallelized queries across more nodes
      Improved query performance on commodity hardware
      Partitioning scheme varies per data set
      A-M
      A-Z
      Hosted Compute
      N-Z
    • Basic Performance Tuning
      Tune Windows Azure applications just as you would on-premises applications
      Measure
      Optimize where it makes a difference
      Windows Azure uses Full IIS for web roles starting with the 1.3 SDK
      Startup admin tasks using WebPI can install up-to-date extensions as desired
      Startup admin tasks using AppCmd can configure IIS as desired
      Basic tips
      Build in release mode (not debug mode) for production
      Do not enable IntelliTrace or Failed Request Tracing in production
      Tune role instance counts and consider dynamic scaling
    • Advanced Performance Tuning
      Enable compression for additional dynamic content types
      <add mimeType="application/json" enabled="true" />
      <add mimeType="application/json; charset=utf-8" enabled="true" />
      Office document formats
      Tune application pool recycling to suit your workload
      Modify default schedule to avoid peak times
      Measure and eliminate memory leaks if footprint grows over time
      New IIS 7.5 module to warm up app upon init at http://www.iis.net/download/ApplicationWarmUp
      Move ASP.NET cache to the resource disk for more space
      Tune Windows Azure Diagnostics settings
    • Summary
      Blob Storage
      Cache control
      Versioned URLs
      CDN
      Public
      Public
      Private
      Asynchronous Hosted Compute
      AppFabric Caching
      Synchronous Hosted Compute
      Shared Access Signatures
      Table Storage
      Table Storage
      Stg Key
      Tuning
      SQL Azure
      SQL Azure
      Approach WA apps like you would on-premises apps
      Use rich platform features in Windows Azure to tune for the cloud too
      SQL Azure
      Sharding
    • © 2010 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.