読者です 読者をやめる 読者になる 読者になる

人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

mod_mrubyとngx_mrubyの最新のアーキテクチャとリファレンス公開(まだまだAdvent Calendar募集中です)

この記事は、mod_mruby ngx_mruby Advent Calendar 1日目の記事になります。

現在既に13日分が登録されており非常に楽しみです。といっても、まだ12日分空いていますので今もなお募集中でございます!是非是非ご登録を!

今日は1日目なので、mod_mrubyとngx_mrubyの最新のアーキテクチャとリファレンス公開ということで、2014年11月に情報処理学会のジャーナルに採録され公開されたmod_mrubyの元になるアーキテクチャの論文を下記のリンクからPDFで無料で公開します。どうぞ皆さんタブレットにPDFを保存したり印刷したりして読んでみてください。謝辞には馴染みの方々のお名前を書かせていただきました。

最新のアーキテクチャ論文

論文

[pdfダウンロード] mod_mruby:スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡張支援機構

スライド

最新のアーキテクチャは論文を読めば大体わかるのですが、少しだけ論文趣旨を説明します。

この論文では、サーバソフトウェアをスクリプト言語で制御するために、サーバソフトウェアに対して効率良くインタプリタを組込むアーキテクチャを提案しています。また、既存の手法の問題点を明確にした上で、実装としてmrubyとApache、あるいは、nginxを使ったという内容になっています。その結果生まれたソフトウェアがmod_mrubyでありngx_mrubyであるというわけです。

ジャーナルですので、単にApacheにmrubyを組み込んでみたら速かったというような話の流れでは論文にならないので、そういう意味でmrubyやApacheに実装したmod_mrubyは単に一つの実装例であり、その元になるある程度汎用的なアーキテクチャを論文にしたという内容になっております。

ただし、インタプリタが軽量であることや、一つのプロセスに複数のVMを組み込む事のできるmrubyはこのアーキテクチャにも最適なスクリプト言語であったと言えます。もう少し踏み込めば、設定のかわりにDSLとしてサーバアプリケーションの振る舞いを記述する際に、mrubyの生産性の高さと性能は非常にバランスが良かったというのも選択の理由です。この生産性の高さというのは、なかなか論文では表現し辛いためほとんど言及しておりませんが、実際に使った事がある方はもはや説明不要な話だと思います。

この論文のアーキテクチャを使えば、mruby以外の似たような性質を持つ組込みスクリプト言語やApache以外のWebサーバでもmod_mrubyと同等の性能や利便性を持つソフトウェアが作れるということを意味し、さらにいうと、Webサーバだけではなく、サーバソフトウェアへのスクリプト言語組込みでもそれなりに最適化されたアーキテクチャであると思っています。是非そういう開発を想定している方は参考にして頂けたらと思います。

リファレンス

mod_mrubyやngx_mrubyを触る際にGoogleで調べると、古い情報や僕のブログが出てくると思いますが、そこからの変更点もあり色々と混乱したと思います。

最新のリファレンス情報はGitHubのそれぞれのレポジトリのWikiにまとめていますので、そちらを参照して頂ければと思います。Wikiの内容としては、インストール方法、Apacheやnginxでのディレクティブの設定、クラスやメソッド、テストについて、ユースケースや例、を主に載せています。是非参考にして頂いて、もし間違いなどありましたら適当にWikiを更新して頂ければと思います。今後もこのWikiを中心にリファレンス情報を更新していく予定です。

Home · matsumoto-r/mod_mruby Wiki · GitHub

Home · matsumoto-r/ngx_mruby Wiki · GitHub

ということで、Advent Calendar1日目でmod_mrubyとngx_mrubyのアーキテクチャやリファレンスの最新情報をお送りしました。

もしこの記事を見て興味が出てきた方がいらっしゃいましたら、少し触ってみてその知見をmod_mruby ngx_mruby Advent Calendarで公開して頂けると幸いでございます!

では、明日2日目はMarcyさんの「SUCON4予選問題をngx_mrubyだけで解いてみて分かったこととか、ちょっとしたノウハウ(レベル低いやつですw)とか、感想とか書きます」になります。