Ruby (and Rails) scalability?
Recently I wrote about Node.jsperformance, comparing it to my (still non-public, sorry!) Objective-C based libµhttp wrapper and Apache on my main development machine of the time, a MacBook Pro.
For Ruby on Rails, I used the blog tutorial "out of the box", invoking it with "
This seems really slow, even when doing virtually nothing, and absolutely abysmal
when using the typical RoR setup, serving records from an SQL database via templates.
I distinctly remember my G5 serving in the thousands of requests/s using WebObjects
6-7 years ago.
Node.js did really well on tasks that have lots of concurrent requests that are mostly waiting, did OK on basic static serving tasks and not so well on compute-intensive tasks.
Having developed an interest in minimal web-servers, I wondered how Sinatra and, by association, Ruby on Rails would do.
For Sinatra I used the scanty blog engine and the basic "Hello World" example:
require 'sinatra'
get '/hi' do
"Hello World!"
end
For Ruby on Rails, I used the blog tutorial "out of the box", invoking it with "
rails s"
to start the server. In addition I also had RoR just serving a static file instead of the database-backed blog. All this on my new dev machine, a 2011 MacBook Air with 1.8 GHz Intel Core i7 and 4 GB of DRAM. I also discovered that httperf is a much better benchmark program for
my needs than ab. I used
it with 100 requests per connection, a burst length of 100 and a sufficient number
of connections to get stable results without taking all day.| Platform | # requests/sec |
| Apache | 5884 |
| Sinatra Hello World | 357 |
| Ruby on Rails static page | 312 |
| Sinatra scanty blog | 101 |
| Ruby on Rails blog | 17 |
Is this considered normal or am I doing something wrong?
Labels: Objective-C, performance, Web
