ErlyWeb vs. Ruby on Rails EC2 Performance Showdown
yarivsblog.comI loved rails until I tried to implement something non-trivial in it and realized it was just absolute crap. I suspect it is this way because it came out of the minds of designers rather than programmers...and DHH's attitude is "F You" so it will never improve... but maybe I'm just spoiled having used WebObjects.
I ended up writing my own web app platform in about 3 months-- custom language, integrated persistence engine and http-server, no-thought-required concurrency... so I'm happy now. I'm just kinda surprised that more people haven't done this.
If you don't have the time to do your own solution, use Erlyweb (which is hampered by being "Rails for erlang") or WebObjects (which is hampered by running on Java).
Anyway, I expect that the outperformance of Erlyweb compared to rails will be more dramatic-- in excess of 10 to 1, when running a more complex application, and even higher when running on a multicore cpu. The last commenter on the original thread is absolutely right: Rails follows different "concurrency model", i.e. it needs multiple processes to run well, especially on multi-core CPUs. He needs to create a cluster of 4-6 mongrels on 2-core CPU and the margin will shrink. This is the next thing I'll test. ... and? Rails forks. It's slow even for a Ruby framework. You could beat both ErlyWeb and Rails handily in C, if your priorities were that far out of whack. Nobody uses Rails for its speed. It's just about speed as much as how much abuse your server can take before it stops serving. Servers is absolutely the LAST thing you should worry about today. They cost next to nothing when you compare their cost to the cost of development. If you need more performance out of Rails, create another VPS and add the mongrels to a cluster. Problem solved. EC2 instances are virtualized machines, right? What about differing CPU contention (i.e. steal times) based on the load of other virtual machines on the same box? I don't think the results would change much, but to be safe, I think you should run this comparison on multiple random ec2 instances, to account for differing external loads. Interesting, my comments about Rails, ERlyweb and WebObjects were deleted, and my title was re-written. The comment is always lost if you also submit an URL. Any idea how they compare when using rails caching? Is there an equivalent in ErlyWeb? I'd be curious to see the numbers, as the gap could go either way. I'm not sure if rails is worse with threads or worse with rendering or both. The author compiled ErlyWeb and YAWS with HiPE (http://www.it.uu.se/research/group/hipe). Are there any issues with using HiPE instead of the Erlang/OTP compiler? I will try running the test after recompiling without HiPE and see what difference it makes.