Mongrelはいくつ立てるべき?

投稿者 おおかゆか 2009-02-17 13:13:00 GMT

Railsアプリケーションのパフォーマンス計測や改善のサービスを行っているFiveRunsという会社がアメリカにあるのだが、そこのブログはなかなか参考になる記事があっておもしろい。
去年の10月の記事になるが「How Many Mongrels?(Mongrelはいくつ立てるべき?)」というのがあって、以前本番環境にRailsアプリを設置したときに悩んだ内容そのものがテーマになっていたので興味深く読んだ。

他の人にも参考になる内容だと思うので、和訳してみることにする。

Mongrelはいくつ立てるべき?

(2008年10月28日 Mark Reynolds)

あなたが作ったRailsアプリケーションがリリース直前だとします。アプリケーション層のサーバの構成を決めなければなりません。この様な場面において、FiveRunsでよく聞かれるのは「Mongrelをいくつ立てるのが得策でしょうか?」という質問です。これにはたくさんの意見があるでしょうし、読者自身にも考えがあるかもしれません。ですので以下の文章については、遠慮なくコメントしてください。

テストの実施

かなり以前からZedは、httperfをつかってパフォーマンステストを行い、Mongrelの数をその環境で最適な数まで増やすことを薦めています。ファイルを直接Webサーバからアクセスした場合と、アプリケーションをひとつのMongrelプロセスで走らせてアクセスした場合をテストします。これにより静的ファイルの実際のチェックを行い、Mongrelプロセスを増やすことでどのくらいまでレスポンスが良くなるかのベースラインを策定することができます。

1より大きい任意の値

サーバに搭載可能な物理的メモリ容量には上限があるため、Mongrelプロセスごとのメモリ消費量とシステムに積んでいるメモリ量によって答えは変わってきます。キューのバランシングを行うために最低2つのMongrelプロセスを立て、ひとつのMongrelがロックしてアプリケーション全体が止まってしまうことを避けようとする管理者は多いようです。エントリーレベルの256MBの仮想マシンで行った私のテストにおいては、フロントエンドがApache2の場合で3つのMongrelインスタンスを走らせた場合のパフォーマンスがベストでした。

弊社では

弊社の顧客の場合、8GBの物理メモリを積んだマシンでひとつのRailsアプリにつき5つ、1台のサーバにつき12個くらいのMongrelプロセスを立てるのが平均的な値です。これはFiveRunにおいても同様です。これは例えば、2つの大規模なアプリケーションにはそれぞれ5つずつのMongrelを立て、小さなRailsアプリには2つのMongrelというようなケースです。Nginxのような軽いフロントエンドは、プールしていたハードウェアをアプリケーションサーバとして随時追加するような場合でも、トラフィックをMongrelの使用ポートにバランシングしてくれます。

回答なし

「Mongrelはいくつ立てるべき?」という質問には答えないという選択肢が最適になりつつあります。Passengerはフロントエンドとアプリケーション層の間でポートをうまくハンドリングし、バックエンドプロセスの数も最適化してくれます。Thinは軽量かつ馬鹿みたいにインストールと設定が簡単です。これら2つはいずれ劣らぬパフォーマンスを発揮します。EbbもMongrelを大きく上回るパフォーマンスを実現しています。

その設定の容易さとパフォーマンスの高さから、今日わざわざMongrelを選ぶ理由はなくなっています。皆さん(私もですが)FastCGIやlighttpdに今もまだ満足できるでしょうか? コミュニティでこれらを採用している例を見ることがあるかもしれません。でもそれはあなたの既存のシステムの正しさの証明になるでしょうか?

早い話が、常識的に考えれば5つくらいだけど今どきMongrelなんか使ってんなよプゲラということらしい。このブログもPassenger(mod_rails)を使っているわけだが、その理由はTypoのインストール方法を説明したページにPassengerオススメって書いてあったからだし。

ただPassengerって、Productionモードでもエラーのときにあのハデハデなエラー画面が出てしまうのがどうなのって感じ。設定で出ないようにできないのだろうか。
Ebbは劇速という話を聞くので、機会があれば試してみたいとは思っている。

そう言えば1年ほど前、Mongrelの作者が「Railsはゲットーだ」とかブログに書いて物議を醸した事件があったが、いちおう開発は続いているのね。
でも更新の早いRubyの世界で最新版(1.1.5)がリリースされたのが2008年の5月で、あの事件から1年以上経っているのに2回しかバージョンが更新されてないというのは、やっぱりペースは滞り気味なのだろうけど。

カテゴリ , , ,  | コメント(0) | トラックバック(0) はてなブックマークへ はてなブックマークでの登録数

コメント

トラックバック

トラックバックリンク:
http://ja.verbmode.net/trackbacks?article_id=52

(leave url/email »)

   コメントのマークアップヘルプ 前のコメント