RailsやSinatraアプリを立ち上げる際にはUnicornを使うことが多くなっています。しかしちょっと前であればMongrelを使ったり、Thinを使ったりとトレンドは移り変わってきました。Unicornについても同様でしょう。 今回はUnicornの2倍のパフォーマンスをほこるRackサーバ、Rhebokを紹介します。今後のWebアプリケーションサーバの選択肢として有力になりそうです。

Rhebokの使い方

RhebokはRubygemsでインストール可能で、立ち上げはコマンドライン一つでできます。

$ rackup -s Rhebok --port 8080 -O MaxWorkers=5 -O MaxRequestPerChild=1000 -O OobGC=yes -E development config.ru
Rhebok starts Listening on 0.0.0.0:8080 Pid:25477
127.0.0.1 - - [15/Jan/2015 09:25:25] "GET / " 302 - 0.3961
127.0.0.1 - - [15/Jan/2015 09:25:26] "GET /sessions/new " 302 - 0.2923

何ら面倒な部分もないのでUnicornからの乗り換えも簡単そうです。設定ファイルは次のように記述します。

$ cat rhebok_config.rb
host '127.0.0.1'
port 9292
max_workers ENV["WEB_CONCURRENCY"] || 3
before_fork {
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
}
after_fork {
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
}

そしてConfigFileオプションで指定します。

$ rackup -s Rhebok -O ConfigFile=rhebok_config.rb -O port 8080 -O OobGC -E production
Rhebok starts Listening on 127.0.0.1:9292 Pid:11892

RhebokはPerlのGazelleをベースに開発されているとのことで、ソーシャルゲームや広告サーバなど高いパフォーマンスが求められる環境下での利用が想定されているようです。特徴として、picohttpparserを使った高速なHTTP処理、C拡張によるio処理、writevを使ったレスポンス出力、HTTP 1.0のみサポート(リバースプロキシの利用を前提)、定期的なプロセス入れ替え、prefork_engineの利用などがあります。

Hello World的なものであればUnicornの2倍の性能、ISUCON4予選でもUnicornに比べて2000程度スコアが改善するそうです。あえてUnicornでなければ駄目な環境はともかく、高速さを求めるのはどこでも同じなので、テストしてみる価値は大きいのではないでしょうか。

RhebokはRuby製、GPL/Artistic Licenseのオープンソース・ソフトウェアです。

Unicornの2倍のパフォーマンスを実現したRackサーバ「Rhebok」をリリースしました - blog.nomadscafe.jp kazeburo/rhebok