ハートレイルズの技術スタッフによるブログです。

ハートレイルズの技術スタッフによるブログです。
ウェブサービス、スマートフォンアプリの制作に関連する技術的な情報を発信していきます。

2011年1月24日月曜日

Rails アプリを nginx の拡張モジュールで置き換えて高速化する方法

こんにちは、ハートレイルズの境 (@kazsakai) です。好きなエクスペンダブルズはドルフ・ラングレンです。

さて、弊社ではよくサーバーサイドを nginx+passenger+Ruby on Rails という構成でサービスを構築しています。
Rails を使っているのは社名が HeartRails だから、というわけでは全くなく、単に僕が昔から Ruby を使っていたからで、他意はありません。
passenger は今や Rails/Rack アプリ向けの標準ミドルウェアみたいな存在で、このおかげで随分 Rails の運用が楽になっています。passenger のリリース以前は手製スクリプトで Rails プロセスを制御していましたが、もうあの頃には戻りたくありません。
そして nginx です。フロントエンドの web サーバーは Apache, lighttpd と移り歩いてきましたが、今のところ nginx で落ち着いています。nginx を使っている主な理由は、
  • 高速
  • 省メモリ
  • passenger が対応
あたりです。nginx の出始めこそはロシア製で胡散臭く思われていた節もありましたが、最近は nginx を採用しているサイトの増加と passenger+Rails の勢いもあって、nginx を使っている人も多いのではないでしょうか。

この nginx、使っている人は分かると思いますが、実行ファイルに類するものは nginx バイナリ一つだけです。Apache のように modules フォルダも mod_* ファイルもありません。
このため、一見すると nginx では拡張モジュールの開発が難しい、あるいはできないように見えるかも知れません。が、実際には意外とそうでもなく、ちょっと頑張れば自分だけの拡張機能を組み込めたりします。
そして、仮に Rack や Rails を通すこと自体がボトルネックになっているような場合、そこを nginx の拡張モジュールに置き換えて Rack/Rails を通らずに済むようにすれば、パフォーマンス向上が見込めるかも知れません。
今回の記事では、Rails で行っていた処理を nginx の拡張モジュールで置き換えるにはどうするのか、そしてどれくらいパフォーマンスが変わるのかを説明したいと思います。

2011年1月14日金曜日

技術ブログを開始します!

試験的な試みとして、これから技術ブログを開始します。
ハートレイルズの技術スタッフが持ち回りで、週に 1 回程度の頻度で技術関連の記事を掲載していくつもりです。初心者向けのネタもマニア向けのネタも色々織り交ぜていきますので、どうぞご期待ください!(誰も読んでくれないと試みも終わってしまいますので、ぜひ購読してください!)