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 in Ruby・mrubyビジネスセミナーFUKU...
Search
MATSUMOTO Ryosuke
PRO
February 21, 2014
Technology
0
170
mod_mruby × ngx_mruby in Ruby・mrubyビジネスセミナーFUKUOKA2014
mod_mruby × ngx_mruby Ruby・mrubyビジネスセミナーFUKUOKA2014での資料です。
MATSUMOTO Ryosuke
PRO
February 21, 2014
Tweet
Share
More Decks by MATSUMOTO Ryosuke
See All by MATSUMOTO Ryosuke
リモートワークにおけるパッシブ疲労
matsumoto_r
PRO
6
5k
エンジニアのキャリアパスはどう描く? まつもとりーさんと考える後悔しないキャリア選択
matsumoto_r
PRO
10
2k
まつもとりーのこれまでとCOGNANOのこれから
matsumoto_r
PRO
0
290
2022年の研究所の評価制度振り返りと今後
matsumoto_r
PRO
0
700
VUCAワールドから紐解く組織や評価制度の変遷と再設計
matsumoto_r
PRO
9
26k
コンテナの研究開発から学ぶLinuxの要素技術
matsumoto_r
PRO
2
1.5k
開発者体験をさらに向上させる 事業と研究との連携
matsumoto_r
PRO
2
2.3k
企業研究の価値と事業との連携
matsumoto_r
PRO
0
1.3k
誇りを持って研究していくために
matsumoto_r
PRO
1
1.5k
Other Decks in Technology
See All in Technology
What's new in Go 1.24?
ciarana
1
120
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
240
AIエージェント入門
minorun365
PRO
33
20k
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
2
180
【内製開発Summit 2025】イオンスマートテクノロジーの内製化組織の作り方/In-house-development-summit-AST
aeonpeople
2
1.1k
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
200
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
370
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
160
スクラムというコンフォートゾーンから抜け出そう!プロジェクト全体に目を向けるインセプションデッキ / Inception Deck for seeing the whole project
takaking22
3
140
Log Analytics を使った実際の運用 - Sansan Data Hub での取り組み
sansantech
PRO
0
110
Snowflake ML モデルを dbt データパイプラインに組み込む
estie
0
110
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.6k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
How GitHub (no longer) Works
holman
314
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Adopting Sorbet at Scale
ufuk
75
9.2k
Become a Pro
speakerdeck
PRO
26
5.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
We Have a Design System, Now What?
morganepeng
51
7.4k
Transcript
mod_mruby × ngx_mruby スクリプト言語で高速かつ省メモリに拡張可能な Web サーバの機能拡張支援機構 松本 亮介
自己紹介 • 松本亮介 – Twitter @matsumotory • 所属 – 京都大学
大学院 情報学研究科 岡部研究室 – 博士課程 D2 • 専門分野 – OS・Middlewareのセキュリティ・リソース管理・運 用技術改善・パフォーマンス・大規模対応 – http://research.matsumoto-r.jp/ 第6回 フクオカRuby大賞
mod_mruby × ngx_mruby[1] • スクリプトで高速・省メモリにWebサーバを拡張 – 生産性に関する組込みソフトウェア開発の課題を参考 – 性能とスクリプトによる生産性を両立した機能拡張機構 –
複数の異なるWebサーバの振る舞いを共通のDSLで記述 [1] 松本亮介,岡部 寿男, mod_mruby: スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡 張支援機構, 情報処理学会第6回インターネットと運用技術シンポジウム, 2013年12月. 優秀論文賞受賞 - 第6回 フクオカRuby大賞 - 3
Webサーバの機能拡張の分類 1. 動的コンテンツの高速処理を主な目的 • レスポンス生成をいかに効率よくするか • CGIはforkのコストが大きい • サーバプロセスが直接スクリプトを解釈 •
アプリケーションサーバの登場 2. レスポンス生成以外の内部処理が主な目的 • Webサーバそのものの振る舞いを定義 • 軽量な処理が求められる(アクセス制御等) • この目的に特化したオーバーヘッドの少ない仕組み • mruby使うには最適では? ⇒ mod_mruby開発 第6回 フクオカRuby大賞
mod_mrubyの良い点 • Apache2.0から2.4の最新版で動く • ApacheモジュールをCでもRubyでも書ける • オーバーヘッドが少ない • 設定が簡単 •
ngx_mrubyでも同じような記述で書ける • 機能追加や改善要望を出しやすい 松本亮介,岡部 寿男, mod_mruby: スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡張 支援機構, 情報処理学会第6回インターネットと運用技術シンポジウム, 2013年12月. 優秀論文賞受賞 第6回 フクオカRuby大賞
Apache httpd 設定例 # コンパイル方式: プロセス起動時もコードの変更可 <Location /proxy> mrubyTranslateNameMiddle /path/to/proxy.rb
</Location> # キャッシュ方式: コード変更不可だが高速に動作 <Location /proxy-cache> mrubyTranslateNameMiddle /path/to/proxy.rb cache </Location> 第6回 フクオカRuby大賞
nginx 設定例 # コンパイル方式: コードの変更可 Location /hello { mruby_contenx_handler /path/to/hello.rb;
} # キャッシュ方式: コード変更不可だが高速に動作 Location /hello-cache { mruby_contenx_handler /path/to/hello.rb cache; } 第6回 フクオカRuby大賞
Reverse Proxy by mod_mruby 第6回 フクオカRuby大賞
Reverse Proxy by mod_mruby 第6回 フクオカRuby大賞 backends = [ "http://127.0.0.1:8001/",
"http://127.0.0.1:8002/", "http://127.0.0.1:8003/", "http://127.0.0.1:8004/", ] r = Apache::Request.new backend = backends[rand(backends.length)] r.reverse_proxy backend + r.uri
BasicAuth with Redis by mod_mruby 第6回 フクオカRuby大賞
リソース制御として応用 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 松本亮介, 岡部寿男, リクエスト単位で仮想的にコンピュータリソースを分離するWebサーバのリソース制御 アーキテクチャ, 情報処理学会研究報告 Vol.2013-IOT-23, No.4, 2013年9月. 学生奨励賞受賞 第6回 フクオカRuby大賞
15688.92 21098.05 21435.75 46571.37 52503.36 64887.54 0 10000 20000 30000
40000 50000 60000 70000 mod_mruby mod_mruby cache apach httpd index.html 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/*)
まとめ • レスポンス生成処理以外の内部処理を目的 • mrubyによってオーバーヘッドを低減 • Rubyで複数のWebサーバの振る舞いを記述 – 柔軟なリソース制御・アクセス制御 •
Webサービスの各種サーバの連携に最適 • Web以外のサーバソフトウェアにも応用可能 – メールサーバ、ファイルサーバ… 第6回 フクオカRuby大賞