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!

Like this? Share it with your network

Share

Building High Performance Web Applications with the Windows Azure Platform

on

  • 4,669 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,669
Views on SlideShare
4,667
Embed Views
2

Actions

Likes
3
Downloads
59
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 Presentation Transcript

  • 1.
  • 2. Building High Performance Web Applications with the Windows Azure Platform
    Wade Wegner
    Technical Evangelist
    Microsoft Corporation
  • 3. 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
  • 4. 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…
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. AppFabric Caching Security Configuration
    <configuration>
    <dataCacheClientdeployment="Simple">
    <hosts>
    <hostname="<your URI>"cachePort="22233" />
    </hosts>
    <securityPropertiesmode="Message">
    <messageSecurityauthorizationInfo="<your authentication token>" />
    </securityProperties>
    </dataCacheClient>
    </configuration>
  • 17. 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>
  • 18. 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>
  • 19. 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
    }
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. © 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.