Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mod_mruby ngx_mruby Fukuoka Ruby Award 2014
Search
MATSUMOTO Ryosuke
PRO
January 22, 2014
Technology
0
140
mod_mruby ngx_mruby Fukuoka Ruby Award 2014
MATSUMOTO Ryosuke
PRO
January 22, 2014
Tweet
Share
More Decks by MATSUMOTO Ryosuke
See All by MATSUMOTO Ryosuke
問いを起点に、社会と共鳴する知を育む場へ
matsumoto_r
PRO
0
600
さくらインターネット研究所 アップデート2025年
matsumoto_r
PRO
0
720
リモートワークにおけるパッシブ疲労
matsumoto_r
PRO
6
5.2k
エンジニアのキャリアパスはどう描く? まつもとりーさんと考える後悔しないキャリア選択
matsumoto_r
PRO
10
2.2k
まつもとりーのこれまでとCOGNANOのこれから
matsumoto_r
PRO
0
310
2022年の研究所の評価制度振り返りと今後
matsumoto_r
PRO
0
770
VUCAワールドから紐解く組織や評価制度の変遷と再設計
matsumoto_r
PRO
9
26k
コンテナの研究開発から学ぶLinuxの要素技術
matsumoto_r
PRO
2
1.5k
開発者体験をさらに向上させる 事業と研究との連携
matsumoto_r
PRO
2
2.4k
Other Decks in Technology
See All in Technology
絶対に失敗できないキャンペーンページの高速かつ安全な開発、WINTICKET × microCMS の開発事例
microcms
0
300
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
1
150
役割は変わっても、変わらないもの 〜スクラムマスターからEMへの転身で学んだ信頼構築の本質〜 / How to build trust
shinop
0
140
現場が抱える様々な問題は “組織設計上” の問題によって生じていることがある / Team-oriented Organization Design 20250827
mtx2s
7
67k
Flutterでキャッチしないエラーはどこに行く
taiju59
0
150
Figma + Storybook + PlaywrightのMCPを使ったフロントエンド開発
yug1224
10
3.4k
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
140
ソフトウェア エンジニアとしての 姿勢と心構え
recruitengineers
PRO
22
12k
Understanding Go GC #coefl_go_jp
bengo4com
1
1.1k
Product Management Conference -AI時代に進化するPdM-
kojima111
0
270
AWS環境のリソース調査を Claude Code で効率化 / aws investigate with cc devio2025
masahirokawahara
2
660
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
2
130
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Why Our Code Smells
bkeepers
PRO
339
57k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
KATA
mclloyd
32
14k
YesSQL, Process and Tooling at Scale
rocio
173
14k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Being A Developer After 40
akosma
90
590k
BBQ
matthewcrist
89
9.8k
Transcript
mod_mruby × ngx_mruby スクリプト言語で高速かつ省メモリに拡張可能な Web サーバの機能拡張支援機構 京都大学 松本 亮介 -
第6回 フクオカRuby大賞 -
目次 1. 本研究の概要 2. mrubyによる実装 3. パフォーマンス評価 4. 貢献 -
第6回 フクオカRuby大賞 - 2
本研究の概要 - 第6回 フクオカRuby大賞 - 3 - 特徴 -
研究の背景 • Webサービスの大規模・複雑化 – Webサービスの無料・低価格化に伴う普及 – スマートフォンからサービスを利用する機会の増加 – Webサーバへのアクセス数が日々増加 •
Webサービスの低価格化と安定性向上が課題 – セキュリティやリソースの管理の効率化 – サービスの運用・管理コストの低減 – サービス形態によってWebサーバの機能を最適化 - 第6回 フクオカRuby大賞 - 4
Webサーバの機能拡張 • Webコンテンツでは難しい処理を実現可能 – Webコンテンツ処理前後に処理を追加 – 効率の良いアクセス制御やリソース制御を実現 – Webサービスの運用・管理を効率化 •
従来のWebサーバの機能拡張手法 – C言語による実装が定番 • 高速かつ省メモリ ⇔ 保守性や生産性が低い – スクリプト言語による実装 • 保守性や生産性が高い ⇔ 低性能・安全性の問題 - 第6回 フクオカRuby大賞 - 5
mod_mruby × ngx_mruby[1] • スクリプトで高速・省メモリにWebサーバを拡張 – 生産性に関する組込みソフトウェア開発の課題を参考 – 性能とスクリプトによる生産性を両立した機能拡張機構 –
性能面と安全性を両立した汎用的なアーキテクチャ設計 – 複数の異なるWebサーバの振る舞いを共通のDSLで記述 – 実装に最適な組込みスクリプト言語mrubyを採用 省メモリ、コンパイルが低コスト、機能の取り外しが可能 [1] 松本亮介,岡部 寿男, mod_mruby: スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡 張支援機構, 情報処理学会第6回インターネットと運用技術シンポジウム, 2013年12月. 優秀論文賞受賞 - 第6回 フクオカRuby大賞 - 6
mrubyによる実装 - 第6回 フクオカRuby大賞 - 7 - mrubyの適用箇所 -
mod_mruby ・ ngx_mruby • できるだけ同じ記述で拡張できるように設計 • Webサーバの実装の違いをmruby DSLで吸収 • Rubyのアプリケーション開発者がコンテンツ開発の延長でWeb
サーバの機能拡張も総合的に実装できる Apache API mruby script 1 mod_mruby mruby script 2 ・ ・ ・ ・ mruby script n Nginx API ngx_mruby mruby script 3 Apache Core Nginx Core mruby DSL for Web - 第6回 フクオカRuby大賞 - 8
mod_mrubyとngx_mrubyの特徴 • 特徴 – 設定が容易 – インタプリタを共有する事で高速・省メモリに動作 – スクリプト間でグローバル変数やクラスの干渉を防止 –
Webサーバの振る舞いをRuby DSLで容易に記述可能 – プロセスを再起動する事なく変更可能(キャッシュも可能) • 採用例 – オリジナルのリバースプロキシ(20行程度) – 複雑な条件によるリダイレクト – サーバの負荷によって処理を変更 – サーバプロセスの内部情報を利用したアクセス制御 – 管理者が自由にWebサーバの振る舞いを定義可能 - 第6回 フクオカRuby大賞 - 9
Apache httpd 設定例 # コンパイル方式: コードの変更可 <Location /mruby-test> mrubyHandlerMiddle /path/to/test.rb
</Location> # キャッシュ方式: コード変更不可だが高速に動作 <Location /mruby-test-cache> mrubyHandlerMiddle /path/to/test.rb cache </Location> - 第6回 フクオカRuby大賞 - 10
nginx 設定例 # コンパイル方式: コードの変更可 Location /mruby-test { mruby_contenx_handler /path/to/test.rb;
} # キャッシュ方式: コード変更不可だが高速に動作 Location /mruby-test-cache { mruby_contenx_handler /path/to/test.rb cache; } - 第6回 フクオカRuby大賞 - 11
Reverse Proxy by mod_mruby - 第6回 フクオカRuby大賞 - 12
BasicAuth with Redis by mod_mruby - 第6回 フクオカRuby大賞 - 13
リソース制御の応用例[2] r = Apache::Request.new if r.user == “matsumoto_r” cpu =
Cgroup::CPU.new “cpu_group” # CPUを10%に制御したい場合 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end [2] 松本亮介, 岡部寿男, リクエスト単位で仮想的にコンピュータリソースを分離するWebサーバのリソース制 御アーキテクチャ, 情報処理学会研究報告 Vol.2013-IOT-23, No.4, 2013年9月. 学生奨励賞受賞 - 第6回 フクオカRuby大賞 - 14
パフォーマンス評価 - 第6回 フクオカRuby大賞 - 15 - Hello World文字列レスポンスベンチマーク -
15688.92 21098.05 21435.75 22330.84 46571.37 52503.36 64887.54 0 10000 20000
30000 40000 50000 60000 70000 mod_mruby mod_mruby cache apach httpd index.html mod_hello ngx_mruby nginx index.html ngx_mruby cache REQUESTS/SEC mod_mruby ngx_mruby Peformance (ab -k -c 100 -n 100000 http://127.0.0.1/*)
貢献 - 第6回 フクオカRuby大賞 - 17 - Rubyを活用したことによる効果 -
貢献 • 生産性と性能の両立が困難であるという従来のスクリプト言 語によるWebサーバの機能拡張の問題を解決 • 大規模・複雑化しているWebシステムに必要な機能拡張を性 能を維持しながら馴染みのあるRubyで容易に実現可能 • Rubyのアプリケーション開発の延長でWebサーバソフトウェ アの違いを気にする事なく複数のWebサーバの機能拡張も
総合的に実装可能となりミドルウェアとの親和性が向上 • 性能と生産性を両立したWebサーバの機能拡張によって WebサーバがInternet of Thingsにおけるハブの役割を担う - 第6回 フクオカRuby大賞 - 18