<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Capacity vs. Scalability</title>
	<atom:link href="http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/</link>
	<description>Jamie Flournoy's Software Development Blog</description>
	<lastBuildDate>Sat, 23 Jan 2010 19:19:54 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Jay Levitt</title>
		<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/comment-page-1/#comment-3251</link>
		<dc:creator>Jay Levitt</dc:creator>
		<pubDate>Thu, 20 Dec 2007 19:41:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/#comment-3251</guid>
		<description>&lt;i&gt;Any advice on determining my curvature?&lt;/i&gt;

If you take the right metrics, you can plot a good-enough approximation from your production system.  In general, the keys are &quot;measure percent busy, not queue depth&quot; and &quot;measure close&quot;.

For instance: Don&#039;t (just) measure how long it takes for the database to respond to an average query.  That includes network, disk, and DB server time, so it&#039;s not &quot;close&quot;.  And it will take a lot longer with one request ahead of you than with none, so you&#039;re measuring queue depth, too.

Instead, measure the percent of time your DB server is busy (i.e. the inverse of its idle time).  Do the same with its disks, and CPU, and network card.

You&#039;ll pretty quickly see patterns.  Think back to shared Ethernet: It doesn&#039;t get 100% utilized, ever.  But if you look at what percent of time the network&#039;s available, you&#039;ll see a pretty sharp curve as the utilization goes up.  Once you&#039;ve found the knee of the curve, you know what won&#039;t scale.</description>
		<content:encoded><![CDATA[<p><i>Any advice on determining my curvature?</i></p>
<p>If you take the right metrics, you can plot a good-enough approximation from your production system.  In general, the keys are &#8220;measure percent busy, not queue depth&#8221; and &#8220;measure close&#8221;.</p>
<p>For instance: Don&#8217;t (just) measure how long it takes for the database to respond to an average query.  That includes network, disk, and DB server time, so it&#8217;s not &#8220;close&#8221;.  And it will take a lot longer with one request ahead of you than with none, so you&#8217;re measuring queue depth, too.</p>
<p>Instead, measure the percent of time your DB server is busy (i.e. the inverse of its idle time).  Do the same with its disks, and CPU, and network card.</p>
<p>You&#8217;ll pretty quickly see patterns.  Think back to shared Ethernet: It doesn&#8217;t get 100% utilized, ever.  But if you look at what percent of time the network&#8217;s available, you&#8217;ll see a pretty sharp curve as the utilization goes up.  Once you&#8217;ve found the knee of the curve, you know what won&#8217;t scale.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scalability - you wish you&#8217;re gonna need it</title>
		<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/comment-page-1/#comment-3080</link>
		<dc:creator>Scalability - you wish you&#8217;re gonna need it</dc:creator>
		<pubDate>Wed, 12 Dec 2007 21:30:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/#comment-3080</guid>
		<description>[...] The answer to that question lies in treating capacity and scalability differently (source). [...]</description>
		<content:encoded><![CDATA[<p>[...] The answer to that question lies in treating capacity and scalability differently (source). [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jamie Flournoy</title>
		<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/comment-page-1/#comment-2397</link>
		<dc:creator>Jamie Flournoy</dc:creator>
		<pubDate>Wed, 14 Nov 2007 18:54:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/#comment-2397</guid>
		<description>&gt;Any advice on determining my curvature?

If you don&#039;t know for certain that it&#039;s linear or better, it&#039;s very likely to be curved upward. Any single points of failure from a high availability standpoint (one DB server, one firewall, etc.) will probably be  performance bottlenecks also.

But the graph goes to +infinity on both axes, so it&#039;s not really practical to try and map it all out with the results from  your current architecture. Fortunately, as I mentioned near the end of the article, there&#039;s stuff that you can do later to improve scalability, so the whole curve is subject to change shape over time. You&#039;re usually not stuck with the same architecture forever.

For relatively small changes in load (say, 2x-5x), you can approach it like an engineer would. Set a goal for a certain peak load that you&#039;d like to be able to handle, and do synthetic tests (with load generating tools) to make sure that you can get there (plus some margin of safety above that goal) safely. Then put throttling and/or a &quot;high traffic&quot; mode in place if you get vastly more traffic, i.e. if you get Slashdotted/Dugg.

Then you can use the published experiences of other folks to put together a roadmap for getting your own architecture to scale up to the next few big milestones you want to hit (10x, 100x, etc.). That plan will give you estimates on what your curve will look like: buy this and do this work, and we can support 10x as much traffic; buy these and do this additional work and we can grow by another 10x, etc.

The sooner you have such a plan, the sooner you can see what parts of your architecture will need to be replaced in the short term, and so you can hold back on your investments in the things you know you won&#039;t be using for long.</description>
		<content:encoded><![CDATA[<p>>Any advice on determining my curvature?</p>
<p>If you don&#8217;t know for certain that it&#8217;s linear or better, it&#8217;s very likely to be curved upward. Any single points of failure from a high availability standpoint (one DB server, one firewall, etc.) will probably be  performance bottlenecks also.</p>
<p>But the graph goes to +infinity on both axes, so it&#8217;s not really practical to try and map it all out with the results from  your current architecture. Fortunately, as I mentioned near the end of the article, there&#8217;s stuff that you can do later to improve scalability, so the whole curve is subject to change shape over time. You&#8217;re usually not stuck with the same architecture forever.</p>
<p>For relatively small changes in load (say, 2x-5x), you can approach it like an engineer would. Set a goal for a certain peak load that you&#8217;d like to be able to handle, and do synthetic tests (with load generating tools) to make sure that you can get there (plus some margin of safety above that goal) safely. Then put throttling and/or a &#8220;high traffic&#8221; mode in place if you get vastly more traffic, i.e. if you get Slashdotted/Dugg.</p>
<p>Then you can use the published experiences of other folks to put together a roadmap for getting your own architecture to scale up to the next few big milestones you want to hit (10x, 100x, etc.). That plan will give you estimates on what your curve will look like: buy this and do this work, and we can support 10x as much traffic; buy these and do this additional work and we can grow by another 10x, etc.</p>
<p>The sooner you have such a plan, the sooner you can see what parts of your architecture will need to be replaced in the short term, and so you can hold back on your investments in the things you know you won&#8217;t be using for long.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AdamD</title>
		<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/comment-page-1/#comment-2395</link>
		<dc:creator>AdamD</dc:creator>
		<pubDate>Wed, 14 Nov 2007 18:06:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/#comment-2395</guid>
		<description>Good thoughts. Any advice on determining my curvature?</description>
		<content:encoded><![CDATA[<p>Good thoughts. Any advice on determining my curvature?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Defining Scalability &#171; The Pages o&#8217; Peat</title>
		<link>http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/comment-page-1/#comment-2376</link>
		<dc:creator>Defining Scalability &#171; The Pages o&#8217; Peat</dc:creator>
		<pubDate>Wed, 14 Nov 2007 04:10:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/13/capacity-vs-scalability/#comment-2376</guid>
		<description>[...] 13th, 2007   Jamie Flourney has posted an excellent article about what &#8220;scalable&#8221; means.  I&#8217;ve heard so many bad definitions it makes me [...]</description>
		<content:encoded><![CDATA[<p>[...] 13th, 2007   Jamie Flourney has posted an excellent article about what &#8220;scalable&#8221; means.  I&#8217;ve heard so many bad definitions it makes me [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
