<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Manu Cohen-Yashar&amp;#39;s Blog</title><subtitle type="html" /><id>http://blogs.microsoft.co.il/blogs/applisec/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/" /><link rel="self" type="application/atom+xml" href="http://blogs.microsoft.co.il/blogs/applisec/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2012-01-05T15:48:12Z</updated><entry><title>Windows Azure Benchmarks - Part 14: Sql Azure write throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/02/08/windows-azure-benchmarks-part-14-sql-azure-write-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/02/08/windows-azure-benchmarks-part-14-sql-azure-write-throughput.aspx</id><published>2012-02-08T20:01:58Z</published><updated>2012-02-08T20:01:58Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss Sql Azure write throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/ee336241.aspx"&gt;SQL Azure&lt;/a&gt; to handle write requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers&lt;/i&gt; * &lt;i&gt;ThreadsPerWorker&lt;/i&gt;), reaches a maximum limit and then decreases with further increase in the number of concurrent clients. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_58469DE2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6825BCD9.png" width="756" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_164F92C7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_3A284454.png" width="376" height="204" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1009838" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks–Part 13: Sql Azure Read throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/02/02/windows-azure-benchmarks-part-13-sql-azure-read-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/02/02/windows-azure-benchmarks-part-13-sql-azure-read-throughput.aspx</id><published>2012-02-02T08:36:41Z</published><updated>2012-02-02T08:36:41Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss Sql Azure read throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/ee336241.aspx"&gt;SQL Azure&lt;/a&gt; to handle read requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers&lt;/i&gt; * &lt;i&gt;ThreadsPerWorker&lt;/i&gt;) and saturates at a maximum value. &lt;/li&gt;    &lt;li&gt;Bigger batch size improves throughput. &lt;/li&gt;    &lt;li&gt;Smaller row size improves throughput. &lt;/li&gt;    &lt;li&gt;Employing more than one thread per worker improves throughput. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_5F6D117E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_59EE7B0D.png" width="746" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_47E23780.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_37A649BA.png" width="746" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1004816" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 12: Queue write latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/31/windows-azure-benchmarks-part-12-queue-write-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/31/windows-azure-benchmarks-part-12-queue-write-latency.aspx</id><published>2012-01-31T14:34:30Z</published><updated>2012-01-31T14:34:30Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss queue write latency.&lt;/p&gt;  &lt;p&gt;This test measures the write latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179353.aspx"&gt;Windows Azure Queue Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;For message sizes upto approximately 1000 bytes, enabling Nagle decreased performance. Use &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.usenaglealgorithm.aspx"&gt;ServicePointManager.UseNagleAlgorithm&lt;/a&gt; to turn off Nagle. &lt;/li&gt;    &lt;li&gt;The number of pre-populated items have almost no affect on the observed latencies. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_3C3E8E57.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6AF4212C.png" width="693" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_26840A20.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_079D7075.png" width="701" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1003400" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 11: Queue read latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/30/windows-azure-benchmarks-part-11-queue-read-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/30/windows-azure-benchmarks-part-11-queue-read-latency.aspx</id><published>2012-01-30T18:20:02Z</published><updated>2012-01-30T18:20:02Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss queue read latency.&lt;/p&gt;  &lt;p&gt;This test measures the read latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179353.aspx"&gt;Windows Azure Queue Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;The number of pre-populated items have almost no affect on the observed latencies. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_35E879A9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_5B9E5472.png" width="767" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1002571" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 10:Queue write throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/26/windows-azure-benchmarks-part-10-queue-write-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/26/windows-azure-benchmarks-part-10-queue-write-throughput.aspx</id><published>2012-01-26T14:58:03Z</published><updated>2012-01-26T14:58:03Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss queue write throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/dd179353.aspx"&gt;Windows Azure Queue Service&lt;/a&gt; to handle write requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers&lt;/i&gt; * &lt;i&gt;ThreadsPerWorker&lt;/i&gt;) and saturates at a maximum value. You may have to increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx"&gt;ServicePointManager.DefaultConnectionLimit&lt;/a&gt; for multiple threads to establish more than 2 concurrent connections with the storage. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_015630F2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_62DBCA3B.png" width="739" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_49B04A36.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_0D37D58C.png" width="368" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=998408" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 9: Queue read throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/26/windows-azure-benchmarks-part-9-queue-read-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/26/windows-azure-benchmarks-part-9-queue-read-throughput.aspx</id><published>2012-01-25T22:24:47Z</published><updated>2012-01-25T22:24:47Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss Queue read throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/dd179353.aspx"&gt;Windows Azure Queue Service&lt;/a&gt; to handle read requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers * ThreadsPerWorker&lt;/i&gt;) upto a maximum limit after which it decreases with the increase in number of concurrent clients. You may have to increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx"&gt;ServicePointManager.DefaultConnectionLimit&lt;/a&gt; for multiple threads to establish more than 2 concurrent connections with the storage. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_042DC132.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_25110E0C.png" width="774" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_0702DA4B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_110755A9.png" width="379" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=997666" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author></entry><entry><title>Windows Azure Benchmarks - Part 8:Tables write latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/24/windows-azure-benchmarks-part-8-tables-write-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/24/windows-azure-benchmarks-part-8-tables-write-latency.aspx</id><published>2012-01-24T19:46:16Z</published><updated>2012-01-24T19:46:16Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss tables write latency.&lt;/p&gt;  &lt;p&gt;This test measures the write latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179353.aspx"&gt;Windows Azure Queue Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;For message sizes upto approximately 1000 bytes, enabling Nagle decreased performance. Use &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.usenaglealgorithm.aspx"&gt;ServicePointManager.UseNagleAlgorithm&lt;/a&gt; to turn off Nagle. &lt;/li&gt;    &lt;li&gt;The number of pre-populated items have almost no affect on the observed latencies. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_59E05E0B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_53F594A5.png" width="777" height="213" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=996568" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 7: Tables read latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/22/windows-azure-benchmarks-part-7-tables-read-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/22/windows-azure-benchmarks-part-7-tables-read-latency.aspx</id><published>2012-01-22T17:26:56Z</published><updated>2012-01-22T17:26:56Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss tables read latency.&lt;/p&gt;  &lt;p&gt;This test measures the read latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179463.aspx"&gt;Windows Azure Table Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Using the indexed PartitionKey and RowKey columns provides lower latencies than using other columns while querying a table. &lt;/li&gt;    &lt;li&gt;Read latencies increase linearly with the number of pre-populated items if non-key columns are used. For key columns, no significant change in latency is observed by increasing the pre-populated items. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_6CB17A94.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_15C8ED06.png" width="753" height="210" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=994951" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>SQL Azure Compatibility Assessment</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/19/sql-azure-compatibility-assessment.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/19/sql-azure-compatibility-assessment.aspx</id><published>2012-01-19T10:54:43Z</published><updated>2012-01-19T10:54:43Z</updated><content type="html">&lt;h3&gt;How do you know if your SQL database is compatible with SQL Azure and can be migrated to the cloud?&lt;/h3&gt;  &lt;p&gt;Well there is a long &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff394115.aspx"&gt;list&lt;/a&gt; of well known issues like SQL Agent and SQL CLR that are not supported, but what about those little details that no body wrote about and eventually will stop you from migrating to the cloud? It would be great if someone would tell you if migration is possible before you spend the time on a POC.&lt;/p&gt;  &lt;p&gt;A new service was launched by the SQL Azure team for this exact reason. It is called the &lt;a href="https://assess.sql.azure.com/"&gt;SQL Azure Compatibility Assessment&lt;/a&gt; service.     &lt;br /&gt;With the &lt;a href="https://assess.sql.azure.com/"&gt;SQL Azure Compatibility Assessment&lt;/a&gt; service you can use check if your database schema is compatible with SQL Azure grammar. This service is very easy to use and does not require Azure account. &lt;/p&gt;  &lt;p&gt;So here is what you need to do:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Generate a .&lt;a href="http://msdn.microsoft.com/en-us/library/ff719373.aspx"&gt;dacpac&lt;/a&gt; file from your database using &lt;a href="http://msdn.microsoft.com/en-us/data/hh297027"&gt;SQL Server Data Tools (SSDT) CTP4&lt;/a&gt;. You can either run SqlPackage.exe or import the database into an SSDT project and then build it to generate a .dacpac. SQL Server 2005, 2008, 2008 R2, 2012 (CTP or RC0) are all supported.&lt;/li&gt;    &lt;li&gt;Upload your .dacpac to the &amp;quot;SQL Azure Compatibility Assessment&amp;quot; cloud service and receive an assessment report, which lists the schema objects that are not supported in SQL Azure and that need to be fixed prior to migration.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I recommend watching the following &lt;a href="http://www.microsoft.com/en-us/sqlazurelabs/labs/sqlassessment.aspx"&gt;video&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;More Technical details about &amp;quot;SQL Azure Compatibility Assessment&amp;quot; tool can be found &lt;a href="http://msdn.microsoft.com/en-us/library/hh550080(v=VS.103).aspx"&gt;here&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=992221" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /><category term="SQL Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/SQL+Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 6: Tables write throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/19/windows-azure-benchmarks-part-6-tables-write-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/19/windows-azure-benchmarks-part-6-tables-write-throughput.aspx</id><published>2012-01-18T22:28:44Z</published><updated>2012-01-18T22:28:44Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss tables write throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/dd179463.aspx"&gt;Windows Azure Table Service&lt;/a&gt; to handle write requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers&lt;/i&gt; * &lt;i&gt;ThreadsPerWorker&lt;/i&gt;), reaches a maximum limit and then decreases with further increase in the number of concurrent clients. You may have to increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx"&gt;ServicePointManager.DefaultConnectionLimit&lt;/a&gt; for multiple threads to establish more than 2 concurrent connections with the storage. &lt;/li&gt;    &lt;li&gt;Using multiple partitions improves throughput when there are many concurrent clients. &lt;/li&gt;    &lt;li&gt;Bigger batch sizes generally provide better throughput. However, if there are too many concurrent clients, smaller batches may be more performant. For example, batch size of 50 outperforms batch size of 100 for more than 21 workers. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_475B4D66.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_0D3C5ABA.png" width="761" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_7725C95A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_0AA3032F.png" width="769" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_0669059D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_582F09E2.png" width="382" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy &lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=991842" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Windows Azure Benchmarks - Part 5: Tables read throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/15/windows-azure-benchmarks-part-5-tables-read-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/15/windows-azure-benchmarks-part-5-tables-read-throughput.aspx</id><published>2012-01-15T19:30:05Z</published><updated>2012-01-15T19:30:05Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss tables read throughput.&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/dd179463.aspx"&gt;Windows Azure Table Service&lt;/a&gt; to handle read requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers&lt;/i&gt; * &lt;i&gt;ThreadsPerWorker&lt;/i&gt;) and saturates at a maximum value. You may have to increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx"&gt;ServicePointManager.DefaultConnectionLimit&lt;/a&gt; for multiple threads to establish more than 2 concurrent connections with the storage. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee758648.aspx"&gt;CloudTableQuery&lt;/a&gt; sends multiple web requests with $top=100 option while using the &lt;a href="http://msdn.microsoft.com/en-us/library/bb503062.aspx"&gt;Take&lt;/a&gt; clause if a value greater than 100 is passed as the argument. Consider using explicit &lt;a href="http://msdn.microsoft.com/en-us/library/cc646998.aspx"&gt;DataServiceQuery&lt;/a&gt; and handle the continuation tokens if you want to send a lesser number of requests. &lt;/li&gt;    &lt;li&gt;Partitioning occasionally shows better throughput &lt;/li&gt;    &lt;li&gt;Bigger batch sizes generally provide better throughput. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_4E6F1D0B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_214A0A70.png" width="781" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_04143C99.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_07A231A9.png" width="782" height="241" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_711F6D54.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_0725D8E7.png" width="396" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=988797" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author><category term="Azure" scheme="http://blogs.microsoft.co.il/blogs/applisec/archive/tags/Azure/default.aspx" /></entry><entry><title>Azure Elasticity with Wasabi Application Block</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/11/azure-elasticity-with-wasabi-application-block.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/11/azure-elasticity-with-wasabi-application-block.aspx</id><published>2012-01-11T08:53:54Z</published><updated>2012-01-11T08:53:54Z</updated><content type="html">&lt;p&gt;One of the core capabilities provided by cloud computing is elasticity. It means that it is possible to provision new machines automatically when required and delete redundant instances when possible.&lt;/p&gt;  &lt;p&gt;Unfortunately Windows Azure did not provide an easy tool-set for implementing elasticity.&amp;#160; It was possible but it was not easy. To do that you would have to use the management API for spinning new instances together with storage REST API which was used to query the service diagnostics info.&lt;/p&gt;  &lt;p&gt;To fill the void tools such as &lt;a href="http://www.paraleap.com/"&gt;AzureWatch&lt;/a&gt; were developed yet it was weird that Microsoft does not provide its own tools and API for such fundamental cloud computing scenarios.&lt;/p&gt;  &lt;p&gt;I am happy to &lt;a href="http://blogs.msdn.com/b/agile/archive/2011/12/02/announcing-the-enterprise-library-integration-pack-for-windows-azure-with-autoscaling-transient-fault-handling-and-more.aspx"&gt;announce&lt;/a&gt; that things changed.&lt;/p&gt;  &lt;p&gt;Patterns and Practices &lt;a href="http://blogs.msdn.com/b/agile/archive/2011/12/02/announcing-the-enterprise-library-integration-pack-for-windows-azure-with-autoscaling-transient-fault-handling-and-more.aspx"&gt;announced&lt;/a&gt; the release of the &lt;a href="http://entlib.codeplex.com/releases/view/75025"&gt;Enterprise Library Integration Pack&lt;/a&gt; (wasabi) which provides a simple yet powerful ways to implement elasticity in windows azure.&lt;/p&gt;  &lt;p&gt;With wasabi you create an application (controller) that monitors the state of your cloud services and executes actions such as create or remove instances according to predefined rules. This controller can be hosted on-premises or in the cloud. It make sense that the controller should run 24-7 to capture changes and act accordingly, so a worker role is a natural selection.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So let us write a wasabi controller:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First we create a simple worker role to host the wasabi controller.    &lt;br /&gt;Then we have to install the application block in our worker role. (It does much more then add references).     &lt;br /&gt;To do that we will use NuGet and look for &amp;quot;wasabi&amp;quot; package.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_5E8EFAB1.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_05999427.png" width="630" height="327" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The NuGet package adds many required references to our project and adds two xml schemas we will use later to audit the rules and services xml files.&lt;/p&gt;  &lt;p&gt;Wasabi uses information which is stored on windows Azure storage such as diagnostics info about the services to scale and rules that defines when to scale. The exact location of this info is written in the configuration of the controller application. In this case our worker&amp;#39;s role app.config.&amp;#160; &lt;br /&gt;To configure our controller app.config we will use Enterprise library configuration tool (you can download it by searching &amp;quot;EnterpriseLibrary.config&amp;quot; in &lt;a href="http://visualstudiogallery.msdn.microsoft.com/"&gt;Visual Studio Gallery&lt;/a&gt; or by using the VS Extension Manager.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_60D856E2.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_1CD472CB.png" width="524" height="321" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;      &lt;p&gt;So let us right click app.config and choose &amp;quot;Edit Configuration File&amp;quot;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_553273D6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_1E7518D2.png" width="244" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now the configuration tools opens and in the Blocks menu we have to choose : AutoScaling Settings.&lt;/p&gt;  &lt;p&gt;We can use the default configuration for now and only set the storage location for the information required by the application block.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_49D939CC.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_116B12F4.png" width="601" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_13E41EE5.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_18E65C94.png" width="307" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lets save and continue.&lt;/p&gt;  &lt;p&gt;Now it is time to audit the services xml file.    &lt;br /&gt;In this file we define the location of the hosted services and roles we want to scale. We provide the management certificate details and the subscription ID that will be used by wasabi to authenticate against Azure and trigger the management commands. The management certificate must be installed on our machine so the file specifies where to find it. The subscription ID can be found in the Azure portal. It is easy to audit the xml file because its schema (AutoscalingServiceModel.xsd) was installed by NuGet.&amp;#160; &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;serviceModel &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/practices/2011/entlib/autoscaling/serviceModel&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;subscriptions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;subscription &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ManuCohenYashar&lt;/span&gt;&amp;quot;
                  &lt;span style="color:red;"&gt;certificateStoreName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;My&lt;/span&gt;&amp;quot;
                  &lt;span style="color:red;"&gt;certificateStoreLocation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;CurrentUser&lt;/span&gt;&amp;quot;
                  &lt;span style="color:red;"&gt;certificateThumbprint&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;A7595E8F51001BA7CCB27CC6CD68E8BC05Exxxx&lt;/span&gt;&amp;quot;
                  &lt;span style="color:red;"&gt;subscriptionId&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;7d6af05e-632d-48aa-a957-xxxxxxxxxxxxx&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;services&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;service &lt;/span&gt;&lt;span style="color:red;"&gt;dnsPrefix&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;manutest&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;slot&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Production&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;roles&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;role &lt;/span&gt;&lt;span style="color:red;"&gt;alias&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;WebRole1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;roleName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;WebRole1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;wadStorageAccountName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;storagelabs&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;roles&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;service&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;services&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;storageAccounts&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;storageAccount &lt;/span&gt;&lt;span style="color:red;"&gt;alias&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;storagelabs&lt;/span&gt;&amp;quot; 
                        &lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DefaultEndpointsProtocol=https;&lt;br /&gt;                                          AccountName=storagelabs;AccountKey=xxxxxx=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;queues&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;queue &lt;/span&gt;&lt;span style="color:red;"&gt;alias&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queue1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;queueName &lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queue1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;queues&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;storageAccount&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; 
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;storageAccounts&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; 
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;subscription&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;subscriptions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;serviceModel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;


&lt;br /&gt;

&lt;p&gt;The next file we have to audit is the rules file. 
  &lt;br /&gt;In this file we specify the &amp;quot;Business rules&amp;quot; according to we want to scale. (i.e. when to add an instance and when to delete one)&lt;/p&gt;

&lt;p&gt;There are two types of rules.
  &lt;br /&gt;&lt;strong&gt;Constraints rules&lt;/strong&gt; that define a general range for the number of instances we want per role.

  &lt;br /&gt;&lt;strong&gt;Proactive rules&lt;/strong&gt; that define how to react to changes in the roles performance.

  &lt;br /&gt;Rules can be ranked. The rules schema allows to define powerful expressions using arguments expressing countless performance attributes such as performance counters, queues length etc. (there are extensibility points here so you can define your own arguments)&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rules &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/practices/2011/entlib/autoscaling/rules&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;constraintRules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;default&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;rank&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;range &lt;/span&gt;&lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;WebRole1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;min&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;2&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;max&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;4&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;peek&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;rank&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;100&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;timetable &lt;/span&gt;&lt;span style="color:red;"&gt;duration&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;10:00:00&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;startTime&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;08:00:00&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;utcOffset&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;2&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;weekly &lt;/span&gt;&lt;span style="color:red;"&gt;days&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Sunday&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;timetable&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;range &lt;/span&gt;&lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;WebRole1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;min&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;20&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;max&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;40&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; 
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;constraintRules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;reactiveRules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;busy&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;rank&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;greaterOrEqual &lt;/span&gt;&lt;span style="color:red;"&gt;operand&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;cpu&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;than&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;60&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;scale &lt;/span&gt;&lt;span style="color:red;"&gt;by&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;webrole1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;notbusy&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;rank&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;lessOrEqual &lt;/span&gt;&lt;span style="color:red;"&gt;operand&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;cpu&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;than&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;20&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;scale &lt;/span&gt;&lt;span style="color:red;"&gt;by&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;-1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;webrole1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queueIsFull&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;rank&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;greaterOrEqual &lt;/span&gt;&lt;span style="color:red;"&gt;operand&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queue&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;than&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;10&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;scale &lt;/span&gt;&lt;span style="color:red;"&gt;by&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;webrole1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;actions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rule&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;reactiveRules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;operands&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;performanceCounter &lt;/span&gt;&lt;span style="color:red;"&gt;alias&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;cpu&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;performanceCounterName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;\Proccessor(_Total\% Processor Time)&lt;/span&gt;&amp;quot; &lt;br /&gt;                        &lt;span style="color:red;"&gt;source&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;WebRole1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;aggregate&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Average&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;timespan&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;00:15:00&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;queueLength &lt;/span&gt;&lt;span style="color:red;"&gt;alias&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queue&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;queue&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;queue1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;aggregate&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Average&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;timespan&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;00:10:00&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;operands&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;rules&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;The schema for this file (AutoscalingRules.xsd) was also installed by NuGet.&lt;/p&gt;

&lt;p&gt;Now it is time to write the code within the controller (our worker role) that will activate the wasabi application block. As you can see it is very simple.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Autoscaler &lt;/span&gt;autoscaler;

&lt;span style="color:blue;"&gt;public override void &lt;/span&gt;Run()
{            
   &lt;font style="background-color:#ffff00;"&gt;autoscaler = &lt;span style="color:#2b91af;"&gt;EnterpriseLibraryContainer&lt;/span&gt;.Current.GetInstance&amp;lt;&lt;span style="color:#2b91af;"&gt;Autoscaler&lt;/span&gt;&amp;gt;();&lt;/font&gt;
   &lt;font style="background-color:#ffff00;"&gt;autoscaler.Start();&lt;/font&gt;         

   &lt;span style="color:blue;"&gt;while &lt;/span&gt;(&lt;span style="color:blue;"&gt;true&lt;/span&gt;)
   {
      &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.Sleep(10000);
      &lt;span style="color:#2b91af;"&gt;Trace&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Wasabi Controller is running&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;Information&amp;quot;&lt;/span&gt;);
   }
 }
&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;font face="Verdana"&gt;The next stage is to upload the rules and services to Azure Blob Storage (to the location that was specified in the configuration tool &lt;br /&gt;and is now written in app.config)&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_6B1893CE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6103F2A3.png" width="646" height="183" /&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;This is it. Everything is ready.&lt;/p&gt;

&lt;p&gt;Make sure your service (the one you want to scale) is running and is writing information to storage using Azure Diagnostics. Now deploy the controller and watch how it auto scale your service.&lt;/p&gt;

&lt;p&gt;I created a demo solution that can be downloaded &lt;a href="http://blogs.microsoft.co.il/blogs/applisec/WasabiSample.zip"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I recommend watching the video at &lt;a href="http://channel9.msdn.com/posts/Autoscaling-Windows-Azure-applications"&gt;channel 9&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy&lt;/p&gt;

&lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=984702" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author></entry><entry><title>Windows Azure Benchmarks - Part 4: Blobs write latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/09/windows-azure-benchmarks-part-4-blobs-write-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/09/windows-azure-benchmarks-part-4-blobs-write-latency.aspx</id><published>2012-01-09T14:51:02Z</published><updated>2012-01-09T14:51:02Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss blobs write latency&lt;/p&gt;  &lt;p&gt;This test measures the write latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179376.aspx"&gt;Windows Azure Blob Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Block blobs show higher latencies than page blobs. &lt;/li&gt;    &lt;li&gt;No significant change in latencies are observed up to few thousand pre-populated items. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_43E822A3.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_6DD7FAFE.png" width="781" height="231" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu    &lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=983457" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author></entry><entry><title>Windows Azure Benchmarks - Part 3: Blob Read latency</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/08/windows-azure-benchmarks-part-3-blob-read-latency.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/08/windows-azure-benchmarks-part-3-blob-read-latency.aspx</id><published>2012-01-08T18:36:46Z</published><updated>2012-01-08T18:36:46Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss blobs read latency.&lt;/p&gt;  &lt;p&gt;This test measures the read latency observed from a Windows Azure worker role instance while accessing the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179376.aspx"&gt;Windows Azure Blob Service&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Block blobs show higher latencies than page blobs. &lt;/li&gt;    &lt;li&gt;No significant change in latencies are observed up to few thousand pre-populated items. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_608F0740.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_4B8D5F00.png" width="749" height="222" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=982769" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author></entry><entry><title>Windows Azure Benchmarks - Part 2: Blob write throughput</title><link rel="alternate" type="text/html" href="http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/05/windows-azure-benchmarks-part-2-blob-write-throughput.aspx" /><id>http://blogs.microsoft.co.il/blogs/applisec/archive/2012/01/05/windows-azure-benchmarks-part-2-blob-write-throughput.aspx</id><published>2012-01-05T13:48:12Z</published><updated>2012-01-05T13:48:12Z</updated><content type="html">&lt;p&gt;One of the most common questions customers ask is how does windows azure perform.    &lt;br /&gt;Well Microsoft published a series of benchmarks in an excellent web site called &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt;.     &lt;br /&gt;The thing is &lt;a href="http://azurescope.cloudapp.net/BenchmarkTestCases/"&gt;azurescope&lt;/a&gt; is going down on January 15th 2012 so I decided to publish these benchmarks here and make sure they will be available to the public.&lt;/p&gt;  &lt;p&gt;Let us discuss blobs write throughput&lt;/p&gt;  &lt;p&gt;This test measures the ability of &lt;a href="http://msdn.microsoft.com/en-us/library/dd179376.aspx"&gt;Windows Azure Blob Service&lt;/a&gt; to handle write requests from simultaneous clients.&lt;/p&gt;  &lt;h5&gt;Key Analysis&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Throughput increases with the increase in number of concurrent clients (&lt;i&gt;NumberOfWorkers * ThreadsPerWorker&lt;/i&gt;) upto a maximum of approximately 110 MBs/sec. You may have to increase the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx"&gt;ServicePointManager.DefaultConnectionLimit&lt;/a&gt; for multiple threads to establish more than 2 concurrent connections with the storage. &lt;/li&gt;    &lt;li&gt;Page blobs provide better throughput than block blobs. &lt;/li&gt;    &lt;li&gt;For a single worker, upload throughputs upto 94 MBs/sec are observed. &lt;/li&gt;    &lt;li&gt;Using &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblockblob.putblock.aspx"&gt;CloudBlockBlob.PutBlock&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudpageblob.writepages.aspx"&gt;CloudPageBlob.WritePages &lt;/a&gt;methods provide better throughput than writing to a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.blobstream.aspx"&gt;BlobStream&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;While writing to a &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.blobstream.aspx"&gt;BlobStream&lt;/a&gt;, consider setting &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblobclient.writeblocksizeinbytes.aspx"&gt;CloudBlobClient.WriteBlockSizeInBytes&lt;/a&gt; to 4 MBs. &lt;/li&gt;    &lt;li&gt;Consider using the maximum allowed block or page size of 4 MBs to write at a time while using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblockblob.putblock.aspx"&gt;CloudBlockBlob.PutBlock&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudpageblob.writepages.aspx"&gt;CloudPageBlob.WritePages &lt;/a&gt;to reduce server roundtrips. &lt;/li&gt;    &lt;li&gt;Using http endpoint provides better throughput than https endpoints. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_41E6B3D9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_4791A7B2.png" width="789" height="246" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_58492C93.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_52CA9622.png" width="791" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/applisec/image_327FD9A5.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/applisec/image_thumb_56588B32.png" width="394" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy&lt;/p&gt;  &lt;p&gt;Manu&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=980052" width="1" height="1"&gt;</content><author><name>AppliSec</name><uri>http://blogs.microsoft.co.il/members/AppliSec.aspx</uri></author></entry></feed>
