<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nuno Filipe Godinho : AppFabric, .NET Services</title><link>http://msmvps.com/blogs/nunogodinho/archive/tags/AppFabric/.NET+Services/default.aspx</link><description>Tags: AppFabric, .NET Services</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>PDC09 – Day Three – Building Scalable and Reliable Applications with Windows Azure</title><link>http://msmvps.com/blogs/nunogodinho/archive/2009/11/19/pdc09-day-three-building-scalable-and-reliable-applications-with-windows-azure.aspx</link><pubDate>Thu, 19 Nov 2009 17:22:41 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740803</guid><dc:creator>NunoGodinho</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nunogodinho/rsscomments.aspx?PostID=1740803</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/nunogodinho/commentapi.aspx?PostID=1740803</wfw:comment><comments>http://msmvps.com/blogs/nunogodinho/archive/2009/11/19/pdc09-day-three-building-scalable-and-reliable-applications-with-windows-azure.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Brad Calder – Director/Architect&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Building Blocks&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Types of Storage in Windows Azure&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Volatile Storage&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Local Storage&lt;/li&gt;        &lt;li&gt;Caches (eg. AppFabricCache and MemCache)&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Persistent Storage&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Windows Azure Storage&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Blobs&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;Provide interface for storing name files&lt;/li&gt;         &lt;/ul&gt;          &lt;li&gt;Tables&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;structured storage.&lt;/li&gt;         &lt;/ul&gt;          &lt;li&gt;Queues&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;reliable storage and delivery of messages&lt;/li&gt;         &lt;/ul&gt;       &lt;/ul&gt;        &lt;li&gt;SQL Azure&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Storage Account Performance at commercial Availability&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Capacity&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;100TB&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Throughput&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Up to a few hundred megabytes&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Partitioning of Data Objects&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Load balancing is an internal concept of Windows Azure Storage&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Allows the system to automatically scale out access to your data to meet its peek traffic demands&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;What matters to the application is the partitioning key used for objects&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;All objects with the same partition key are always grouped&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Per Object/Partitioning Performance for Commercial Availability&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Throughput&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Single Queue and single table partition&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Up to 500 transactions per second&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Single Blob&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;small reads/writes up to 30 MB/s&lt;/li&gt;          &lt;li&gt;large reads/writes up to 60 MB/s&lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Scaling Computation&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Compute Service Model – What is describes?&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;The topology of your service&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Types of roles and their binaries&lt;/li&gt;        &lt;li&gt;How the roles are connected&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Configuration of the service&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;How many instances of each role type&lt;/li&gt;        &lt;li&gt;Application specific configuration settings&lt;/li&gt;        &lt;li&gt;How many update domains you need&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Best Practices&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Due to application failures, upgrades or hardware failure&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Use multiple instances&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Queue Workflow Concepts&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Windows Azure Queue Provides&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Guarantee delivery&lt;/li&gt;        &lt;ol&gt;         &lt;li&gt;Worker dequeues Message and marks it as Invisible&lt;/li&gt;          &lt;li&gt;Worker deletes Message when finished processing&lt;/li&gt;       &lt;/ol&gt;        &lt;ul&gt;         &lt;li&gt;Note: If worker role crashes, message becomes visible for another worker to process&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;A message may be processed more than once&lt;/li&gt;        &lt;li&gt;Assume messages put into same queue can be processed in any order&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Best Practice&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Make work items idempotent&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Scaling Queue Throughput&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Batch Work Items into Blob&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Group together many work items into a blob&lt;/li&gt;        &lt;li&gt;Queue up pointer to the Blob for the message&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Use Multiple Queues&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Job Manager&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Responsible form managing the execution of the Queues&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Work Items&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Continuation for Long Running Work Items&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Want to continue on failover&lt;/li&gt;      &lt;li&gt;High level approach&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Bread work item into smaller and repeatable steps&lt;/li&gt;        &lt;li&gt;Record progress&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Lifecycle Management&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In-place Rolling updates&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Specify the number of upgrade domains in service model&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Breaks your roles evenly over the number of domains&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Rolling upgrade&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Walk each upgrade domain one at a time&lt;/li&gt;        &lt;li&gt;Upgrade just the roles in the current domain&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Benefits&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Minimizes availability loss&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Only one domain of roles are restarted at a time&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Allows local state to be uses across upgrades&lt;/li&gt;        &lt;li&gt;Caches application upgrade issues early&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Detect upgrade issues after first few domains&lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Versioning with Rolling Updates&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Always assume you will have old and new running side by side in your service&lt;/li&gt;      &lt;li&gt;Version Everything&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Protocols, Schemas, Messages and everything else&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt;    &lt;li&gt;Windows Azure Tables Schema change&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Have a version property in each entity&lt;/li&gt;      &lt;li&gt;Types of Schema changes&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Adding a non-key property&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Perform similar step update process&lt;/li&gt;          &lt;li&gt;Update “IgnoreMissingProperties”&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Removing a non-key property&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Perform similar upgrade process&lt;/li&gt;          &lt;li&gt;Update “IgnoreMissingProperties”&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Changes in Partition Key or Row Key&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Most uses schema change is adding a non-key property&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740803" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/Windows+Azure+Service+Platform/default.aspx">Windows Azure Service Platform</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://msmvps.com/blogs/nunogodinho/archive/tags/AppFabric/default.aspx">AppFabric</category></item></channel></rss>