New England Code Camp 14 02-October-2010 Going Native Building Cloud-Native Applications on Microsoft’s Windows Azure Stack New England Code Camp 14 02-October-2010 Not representing my day job Several slides stolen borrowed (with permission) from http://www.meetup.com/Boston-cloud-services/files/ (http://files.meetup.com/1460349/azure.ppt – Jim O’Neil’s Windows Azure presentation from March 17, 2010 meetup) + from Chris Bowen’s “roadshow” talk (March 2010) Boston Azure User Group http://bostonazure.org @bostonazure Bill Wilder http://blog.codingoutloud.com @codingoutloud Boston West Toastmasters http://bwtoastmasters.com Not here with my day job Only Bill’s personal views Copyright (c) 2010, Bill Wilder
Agenda Lightning-quick overview of Azure Two Major Shifts in Cloud-Native Apps: Using Scalable and Cost-effective Storage Using Roles and Queues for Scalability and Resilienceyness Scalable and Resilient
Cloud-Native Applications Effort focuses on business functionality Development is highly productive Time-to-market is short Modification is straight-forward Infrastructure is not a limiting factor Cost structure is a good fit Downtime is not necessary Scale is efficient Innovation / experimentation is enabled
[Azure] Cloud Platform The rise of focused, specialized services Really good at one thing True of other Cloud Platforms “Scalable” Persistent Storage abstractions Set of Services Illusion of infinite scale out Same performance with x clients as with 10x as with 100x as with 1000x as with … Billing model: pay only for what you use Friction-free access to add’l or less storage
Part A A
Part A – Executive Summary Use Azure Blobs and Tables and your DATA will be resilient to failure and will scale like crazy…
Persistent Storage Services – Options Type of Data Traditional Azure Way Relational SQL Server SQL Azure Blob File System, or SQL Server Azure Blobs File File System Azure Drives, or Azure Blobs Reliable Queue MSMQ (maybe) Azure Queues Non-Relational Azure Tables
Azure Storage Services Family of specialized, complementary storage services Abstractions High level services Blobs + Queues + Tables [+ Drives + CDN]
All Azure Storage is Replicated Resilient in case of failure “All data replicated multiple times” – Sriram Krishnan, Programming Windows Azure, p130+ Supports scale-out Replicate specific data if it gets too hot to keep up
Azure Blob Storage The place to put ANY LARGE OBJECT Private or Public Public blobs can be anonymously accessed Images, videos, CSS files Need not be binary Public blobs can be cached in Azure CDN 20 locations around the world Different locations than data centers Time-limited signed-access available “You have until tomorrow to download this video” http://msdn.microsoft.com/en-us/library/ff919703.aspx – Windows Azure CDN http://blogs.msdn.com/b/windowsazure/archive/2010/08/09/20-nodes-available-globally-for-the-windows-azure-cdn.aspx – 20 CDN nodes available across the world
Azure Blob Storage Two types of Azure Blobs “Block Blob” “Page Blob” Parallel upload scenarios Resume download scenarios Up to 200 GB “Page Blob” Random access scenarios Azure Drives Up to 1000 GB http://msdn.microsoft.com/en-us/library/ff919703.aspx – Windows Azure CDN http://blogs.msdn.com/b/windowsazure/archive/2010/08/09/20-nodes-available-globally-for-the-windows-azure-cdn.aspx – 20 CDN nodes available across the world
Azure Table Storage Best place for granular, semi-structured data No rigid database schema Fast and easy to instantiate Strongly Consistent No performance lag Programming model is WCF Data Services All data access and data updates LINQ
Azure Table Storage Storage Account Table [*] Entity [*, 1 MB data] PartitionKey + RowKey Property [255x] Name/Value/Type Up to 64k Entity is like a Row
Azure Table Storage Partition Key Row Key Along a “logical grouping” – a “shard” PartitionKey value of up to 64 KB Row Key Identify specific row within a partition RowKey value is String of up to 64 KB Table access requires Partition Key + Row Key Not to mention (cryptographic) Access Key (for the digital signing of the http header)
Relational Data vs. Azure Tables Approach SQL Azure Azure Tables Normalization Normalized Denormalized (Duplication) (No duplication) (Lots of duplication) Structure Schema Flexible Transactions Distributed Limited scope Responsibility Database Developer Knobs Many Few Scale Up (or Sharding) Out Cost Reasonable Less expensive http://en.wikipedia.org/wiki/NoSQL
http://www.freefoto.com/preview/04-28-6?ffid=04-28-6&k=Pile+of+Money
Pay As You Go – Storage Storage Applies equally to: $0.15 per GB stored per month $0.01 per 10,000 storage transactions Applies equally to: Queues Tables Blobs Drives http://www.microsoft.com/windowsazure/pricing/
Pay As You Go – Data Transfer North America and Europe regions $0.10 per GB in $0.15 per GB out Asia Pacific Region $0.30 per GB in $0.45 per GB out No charge for transfer within a data center http://www.microsoft.com/windowsazure/pricing/
What is Cost of 1 Byte? Azure Storage cost/byte = x SQL Azure cost/byte = 66x
Part B B
Part B – Executive Summary Scale out, not up, and your COMPUTE will be resilient to failure and will scale like crazy…
Azure Does Compute Compute Services Web Roles Worker Roles VM Role (Nov 2010) Your Code Runs Here Image: http://t3.gstatic.com/images?q=tbn:lBdXOeap8CbUoM:http://regulus2.azstarnet.com/blogs/images/7064.jpg&t=1
Web Roles vs. Worker Roles Runs in IIS 7 (always listening) Built using ASP.NET, MVC Good to handle interactive users Addressable over Internet Good for hosting Web API (WCF) Runs Continuously Smarx “The only difference between a web role and a worker role is that in the web role, IIS (actually Hosted Web Core) gets started and pointed at your app data directory. You can still put code in WebRole.cs that does exactly the same thing as you would do in your worker role, so the decision should really be "Do you want IIS?" If so, use a web role. If not, use a worker role.” One is always running, one is always listening
“Out” is the New “Up” Scaling Out has hard limits at CPU, Memory Architecturally more limiting
Azure Storage Services in Concert http://commons.wikimedia.org/wiki/File:Boston_Pops_Esplanade_Orchestra_2005-07-04.jpg
Key Pattern: Roles + Queues Web Role (IIS) Worker Role Queues AJAX – orthogonal concern Worker Role not related to HTML 5 concept of Web Worker Blobs Tables
Canonical Example: Thumbnails Web Role (IIS) Worker Role Queues AJAX – orthogonal concern Worker Role not related to HTML 5 concept of Web Worker Blobs Tables
Adding to Queue - Conceptual Queue Name: “thumbnailer-7” http://bostonazure.queue.core.windows.net/thumbnailer-7
Adding to Queue - Actual 314159 265358 979323 Azure Blob Storage 3.14159 265358 979323 846264 338327 950288 419716 939937 510582 097494 459230 314159 265358 979323
Roles + Queues: API queue.AddMessage( new CloudQueueMessage( statusUpdateMessage)); Web Role (IIS) Worker Role Queues AJAX – orthogonal concern Worker Role not related to HTML 5 concept of Web Worker CloudQueueMessage statusUpdateMessage = queue.GetMessage( TimeSpan.FromSeconds(10)); … queue.DeleteMessage(statusUpdateMessage);
General Case: Rolesn + Queuesn RnQnRn Worker Role Worker Role Web Role (IIS) Worker Role Web Role (IIS) Worker Role Type 1 Web Role (IIS) Web Role (IIS) Worker Role Worker Role Queues Worker Role AJAX – orthogonal concern Worker Role not related to HTML 5 concept of Web Worker Worker Role Type 2
Azure Queue Storage Service for RELIABLE message delivery 7 days = default TTL for item to stay in queue 30 seconds = default “invisibility window” 8 KB = max size of a queued item 500 = approx number of transactions a queue can handle per second Beware of “spinning” – may get throttled, disabled N = number of queues you can have (N >> 1)
Key Metric Queue length (and trend) is key data point for tuning Role deployment numbers Available programmatically for monitoring May vary across queue types
RnQnRn enables Responsive Response to interactive users is as fast as a work request can be persisted Time consuming work done off-line Same total resource consumption, better subjective experience UX challenge – how to express Async to users? Communicate Progress Display Final results
RnQnRn enables Scalable Loosely coupled, concern-independent scaling Blocking is Bane of Scalability Decoupled front/back ends insulate from other system issues if… Twitter down Email server unreachable Order processing partner doing maintenance Internet connectivity interruption
RnQnRn enables Distribution Scale out systems better suited for geographic distribution More efficient and flexible because more granular Hard for a mega-machine to be in more than one place Failure need not be binary Chainsaw: http://commons.wikimedia.org/wiki/File:Chainsaw_cutting_tree.jpg
Optimization is optional Individual role utilization may be low Role is a VM – lots of resources You pay by instance, not resource use within Make sure VM instances are “right sized” Small, Medium, Large, XL Make sure enough roles for uptime SLA requires minimum of 2 instances Business Trade-Off for further optimizations Optimize for CPU utilization (multiple threads) Combine types of processing into fewer role types
RnQnRn requires Idempotent If we do a task twice, end result same as if we did it once App-specific concerns dictate approaches Compensating transactions Last in wins Many others possible – hard to say Example with Thumnailing
RnQnRn requires Poison Message Strategy A Poison Message cannot be processed Error condition Non-transient reason Strategy One: Fall off the queue (TTL) Message stays in queue for 7 days (default) Strategy Two: Specify retry threshold Remove poison messages
RnQnRn enables Resilient And Requires that you “Plan for failure” There will be role restarts Bake in handling of restarts Not an exception case! Expect it! Restarts are routine, system “just keeps working” If you follow the pattern, the payoff is substantial…
What’s Up? Aspirin-free Reliability as EMERGENT PROPERTY Typical Site Any Azure Role Overall System Operating System Upgrade Application Update / Deploy Change Topology Hardware Failure Software Bug / Crash / Failure Security Patch Tech Windows
Questions? ?
BostonAzure.org Boston Azure cloud user group Focused on Microsoft’s cloud solution Next meeting: 6-8:30 PM Thurs Oct 21st 2010 Hacking on “Boston Azure Project” Silverlight and Azure – better together Meetings usually 4th Thursday of month No cost; food; great topics; growing community; wifi Join email list: http://bostonazure.org Follow on Twitter: @bostonazure
Slides available from Bill’s blog http://blog.codingoutloud.com hmbl.me is URL shortener running on Azure: http://hmbl.me/3KTBOE http://blog.codingoutloud.com/2010/07/14/key-architectural-design-pattern-for-cloud-native-azure-apps
Bill Wilder @codingoutloud http://blog.codingoutloud.com