rails 2.2 + jruby + jetty = win

rails 2.2 + jruby + jetty = winより

超意訳

Rails2.2でスレッドセーフになったけど、こうなるとネイティブスレッドが使えるJRubyがぜったいいいよ。アプリケーションサーバーはglassfishよりかjettyがいいね(もうすぐjettyは7がリリースされるし)。 warblerはイヤさ(web.xmlがイヤだもの)。だからJRuby-RackとJetty7の組み合わせを使ってみたよ。やってみたらなかなかよかったよ。 mongrel: 23req/s, jetty: 50 req/sってとこだね。デプロイも簡単さー。

関連

JRuby-Rack

JRuby-Rack is a lightweight adapter for the Java servlet environment that allows any Rack-based application to run unmodified in a Java servlet container. JRuby-Rack supports Rails, Merb, as well as any Rack-compatible Ruby web framework.

Jetty Rails

Jetty Rails aims to run any Warbler based JRuby on Rails or JRuby Merb applications with Jetty Container, loading configuration from Warbler.

JRuby on rails 2.2.2 new feature(3) : Thread Safe

ご存知の通り、Rails2.2.0からはスレッドセーフとなりました。この恩恵を一番受けるのが、JRubyです。

Ruby1.8.7(MRI)の場合、1つのOSのネイティブスレッドがRubyインタプリタに割り当てられ、GILがあって、Rubyのスレッドはグリーンスレッド(ユーザ空間のスレッド)として動作することになります。そのため、Railsがスレッドセーフになっても、Ruby自体がグリーンスレッドのため、グリーンスレッドレベルでのマルチスレッド化となり、Rubyインタプリタ自体はシングルスレッドで動作することになります。そのため、パフォーマンスを向上させるためには、複数のインタプリタを起動させる事が必要となります。

これに対して、JRubyの場合、JVMがネイティブスレッドに対応しており、JRubyのグリーン・スレッドが1対1でJVMに割り当てられたネイティブスレッドにマッピングされることになりますので、実質Railsがネイティブスレッドで動作することになります。そのため、MRIと同じ1つのプロセスでもよりよいパフォーマンスを得ることができるようになっています。