<?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"
	>
<channel>
	<title>Comments on: Thin vs. Mongrel: A Ruby on Rails performance shootout</title>
	<atom:link href="http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/</link>
	<description>It would be a good idea.</description>
	<pubDate>Fri, 25 Jul 2008 23:52:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: science</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3416</link>
		<dc:creator>science</dc:creator>
		<pubDate>Fri, 06 Jun 2008 17:45:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3416</guid>
		<description>Woody: Ezra is one of my main sources on the idea that nginx should not proxy across multiple machines. Their model is to put a set of Linux-based load balancers in front of a bunch of machines all running identical stacks of nginx/mongrel/rails. 

The problem with this model as best I can see it is that you have to have either an event-driven queue on the front-end LB's or you have to have identical performance/power on the nginx boxes and a very consistent response time on your various web pages. If one nginx box falls behind it will be loaded up with additional requests that it will have trouble clearing in a timely manner, while other nginx boxes may actually have free cycles.

I hope this helps a bit.. - S</description>
		<content:encoded><![CDATA[<p>Woody: Ezra is one of my main sources on the idea that nginx should not proxy across multiple machines. Their model is to put a set of Linux-based load balancers in front of a bunch of machines all running identical stacks of nginx/mongrel/rails. </p>
<p>The problem with this model as best I can see it is that you have to have either an event-driven queue on the front-end LB&#8217;s or you have to have identical performance/power on the nginx boxes and a very consistent response time on your various web pages. If one nginx box falls behind it will be loaded up with additional requests that it will have trouble clearing in a timely manner, while other nginx boxes may actually have free cycles.</p>
<p>I hope this helps a bit.. - S</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Woody</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3415</link>
		<dc:creator>Woody</dc:creator>
		<pubDate>Fri, 06 Jun 2008 17:13:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3415</guid>
		<description>I'd be interested to know the reasoning behind that. Ezra Zygmuntowicz of Engine Yard has been advocating separated nginx/mongrel machines for the benefit of identifying individual performance problems (I believe that's the idea, see http://www.slideshare.net/vishnu/xen-and-the-art-of-rails-deployment/ page 32 and 35). However, I can also imagine that something like ultramonkey would be very good at load balancing requests, which nginx isn't specifically made for, so you could put that in front of a bunch of nginx/mongrel/rails boxes and the relative computing overhead of nginx to a cluster of local mongrels would be negligible, no? I have always thought this, but only heard that it was a better practice to separate them. Could someone elaborate?</description>
		<content:encoded><![CDATA[<p>I&#8217;d be interested to know the reasoning behind that. Ezra Zygmuntowicz of Engine Yard has been advocating separated nginx/mongrel machines for the benefit of identifying individual performance problems (I believe that&#8217;s the idea, see <a href="http://www.slideshare.net/vishnu/xen-and-the-art-of-rails-deployment/" rel="nofollow">http://www.slideshare.net/vishnu/xen-and-the-art-of-rails-deployment/</a> page 32 and 35). However, I can also imagine that something like ultramonkey would be very good at load balancing requests, which nginx isn&#8217;t specifically made for, so you could put that in front of a bunch of nginx/mongrel/rails boxes and the relative computing overhead of nginx to a cluster of local mongrels would be negligible, no? I have always thought this, but only heard that it was a better practice to separate them. Could someone elaborate?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: science</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3350</link>
		<dc:creator>science</dc:creator>
		<pubDate>Sat, 31 May 2008 18:24:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3350</guid>
		<description>m++: I have heard some credible people say that it's unwise to let nginx proxy across multiple machines. It's better if possible to have nginx serve only mongrels on the OS where it's running and to put a set of load balancers in front of your cluster of web boxes running nginx/mongrel/rails to smooth things out. The downside of this is that you can get somewhat uneven load across your servers in some circumstances.</description>
		<content:encoded><![CDATA[<p>m++: I have heard some credible people say that it&#8217;s unwise to let nginx proxy across multiple machines. It&#8217;s better if possible to have nginx serve only mongrels on the OS where it&#8217;s running and to put a set of load balancers in front of your cluster of web boxes running nginx/mongrel/rails to smooth things out. The downside of this is that you can get somewhat uneven load across your servers in some circumstances.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: m++</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3204</link>
		<dc:creator>m++</dc:creator>
		<pubDate>Fri, 23 May 2008 03:17:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3204</guid>
		<description>RE: mongrel optimization -- i meant to say the HTTP parser is written in tight C.</description>
		<content:encoded><![CDATA[<p>RE: mongrel optimization &#8212; i meant to say the HTTP parser is written in tight C.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: m++</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3203</link>
		<dc:creator>m++</dc:creator>
		<pubDate>Fri, 23 May 2008 03:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-3203</guid>
		<description>I realized recently that the 4% can be entirely explained by the difference between unix and IP sockets.  There is another &lt;a href="http://blog.kovyrin.net/2006/08/28/ruby-performance-results/" rel="nofollow"&gt;study&lt;/a&gt; proving this out with nginx + mongrel vs. fastcgi.  Basically, the unix sockets are faster but at the expense of potential horizontal scaling which mongrels allow because they can be on different machines than the nginx.  I looked at the mongrel source, and it is pretty nicely optimized.  It starts with an HTTP parser and then drops control into a ruby thread pool.  Using a Mongrel::HttpHandler subclass and setting the thread pool to 1000, you can get really high concurrency.  Rails locks each mongrel however so for that configuration the number of concurrent users is 1:1 to the number of mongrels.</description>
		<content:encoded><![CDATA[<p>I realized recently that the 4% can be entirely explained by the difference between unix and IP sockets.  There is another <a href="http://blog.kovyrin.net/2006/08/28/ruby-performance-results/" rel="nofollow">study</a> proving this out with nginx + mongrel vs. fastcgi.  Basically, the unix sockets are faster but at the expense of potential horizontal scaling which mongrels allow because they can be on different machines than the nginx.  I looked at the mongrel source, and it is pretty nicely optimized.  It starts with an HTTP parser and then drops control into a ruby thread pool.  Using a Mongrel::HttpHandler subclass and setting the thread pool to 1000, you can get really high concurrency.  Rails locks each mongrel however so for that configuration the number of concurrent users is 1:1 to the number of mongrels.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: daeltar</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-2186</link>
		<dc:creator>daeltar</dc:creator>
		<pubDate>Sun, 20 Apr 2008 23:10:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-2186</guid>
		<description>it would be nice to have numbers about RAM usage</description>
		<content:encoded><![CDATA[<p>it would be nice to have numbers about RAM usage</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: m++</title>
		<link>http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-2139</link>
		<dc:creator>m++</dc:creator>
		<pubDate>Thu, 17 Apr 2008 03:34:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.misuse.org/science/2008/04/07/thin-vs-mongrel-a-ruby-on-rails-performance-shootout/#comment-2139</guid>
		<description>4% is good, but it's also not much.  I guess we'll stick with mongrel_cluster and look for more fundamental optimizations in our code, queries, and database setup rather than undergoing the configuration pain of switching over...</description>
		<content:encoded><![CDATA[<p>4% is good, but it&#8217;s also not much.  I guess we&#8217;ll stick with mongrel_cluster and look for more fundamental optimizations in our code, queries, and database setup rather than undergoing the configuration pain of switching over&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
