On Mon, 27 Nov 2006, Sunny Hirai wrote:

> Our application servers on our current application run in highly
> optimized Coldfusion (sub 100ms page response times) has about a dozen

It depends a LOT on what your are doing in that 100ms, but in general, 
once can do a lot in 100ms.  Below is an extraction from the logging for a 
current IOWA based site.  Timings are in the middle column; the first 
number is the amount of time taken to receive the request (which, for the 
mode of operation of this app, should always be 0.0), and the second is is 
the amount of time taken for the application to receive the request, 
generate the requested content, and pass it back up to the web server for 
delivery to the client.  Bytes transmitted in the response is at the end 
of the line.

2006-11-29 11:18:22 :: (0.0/0.002295) :: /index.html "200 OK" 14276B
2006-11-29 11:18:22 :: (0.0/0.001249) :: /homestyles.css "304 Not Modified" 0B
2006-11-29 11:18:25 :: (0.0/0.003757) :: /index.html "200 OK" 14282B
2006-11-29 11:18:25 :: (0.0/0.001513) :: /homestyles.css "304 Not Modified" 0B
2006-11-29 11:18:27 :: (0.0/0.002254) :: /index.html "200 OK" 14282B
2006-11-29 11:18:28 :: (0.0/0.001244) :: /homestyles.css "304 Not Modified" 0B
2006-11-29 11:18:32 :: (0.0/0.008826) :: /about.html "200 OK" 13434B
2006-11-29 11:18:32 :: (0.0/0.001643) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:33 :: (0.0/0.016653) :: /funds/xxx_plus_fund.html "200 OK" 18798B
2006-11-29 11:18:34 :: (0.0/0.018764) :: /about/management.html "200 OK" 18405B
2006-11-29 11:18:34 :: (0.0/0.001325) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:37 :: (0.0/0.018813) :: /about/investment.html "200 OK" 14089B
2006-11-29 11:18:37 :: (0.0/0.001263) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:40 :: (0.0/0.003241) :: /about.html "200 OK" 13434B
2006-11-29 11:18:40 :: (0.0/0.001491) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:40 :: (0.0/0.003661) :: / "200 OK" 14276B
2006-11-29 11:18:41 :: (0.0/0.002577) :: /about/management.html "200 OK" 18405B
2006-11-29 11:18:41 :: (0.0/0.001258) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:43 :: (0.0/0.001244) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:44 :: (0.0/0.018290) :: /about/sales.html "200 OK" 16254B
2006-11-29 11:18:45 :: (0.0/0.001241) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:18:47 :: (0.0/0.002186) :: /index.html "200 OK" 14276B
2006-11-29 11:18:47 :: (0.0/0.001641) :: /homestyles.css "304 Not Modified" 0B
2006-11-29 11:19:20 :: (0.0/0.010662) :: /products.html "200 OK" 13570B
2006-11-29 11:19:20 :: (0.0/0.001643) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:19:25 :: (0.0/0.004319) :: /products.html "200 OK" 22589B
2006-11-29 11:19:25 :: (0.0/0.001242) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:19:31 :: (0.0/0.008743) :: /products.html "200 OK" 19099B
2006-11-29 11:19:32 :: (0.0/0.001484) :: /styles.css "304 Not Modified" 0B
2006-11-29 11:19:37 :: (0.0/0.003661) :: /products.html "200 OK" 25243B
2006-11-29 11:19:37 :: (0.0/0.001220) :: /styles.css "304 Not Modified" 0B

Every one of these requests is dynamic.  The pages all involve content 
pulled from a database, with navigation that is dynamically generated 
based on db contents, and the products pages all have tables of fund 
statistics queried from the database.

Now, admittedly, the app is caching information where it can, but these 
logs demonstrate that it's very reasonable to expect good performance from 
Ruby.

These are the logs from a single process, and when hammered, will handle 
as many as 200 requests per second, even with very high concurrency.  The 
web server configuration fails due to high concurrency long before the 
application has a problem.  The server itself is a very mundane, middle of 
the road 32 bit dual processor Athlon box, and is not dedicated to this 
one site.  It has 60 IOWA based sites/applications on it, currently, in 
addition to other duties.

> Overall, I'm not really sure what kind of persistence and
> non-persistence there is between page requests when Ruby is attached a
> web server.

This depends on the architecture of the framework.  Generally, for 
frameworks that utilize a persistent process type backend, everything that 
is time consuming to deal with can persist from request to request.

> application. We have a large amount of good code in ColdFusion but as an
> agile company, I can see the benefits of Ruby down the line, especially
> after a couple of years. Mostly, I love the clean syntax and the overall
> design of the language.

Just an aside, but I spent some time converting ColdFusion pages for 
displaying mutual fund information to a Ruby application (a MUCH earlier 
version of IOWA) a few years ago, and the end result was both faster and 
cleaner.



Kirk Haines