Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mod_mruby ngx_mruby Fukuoka Ruby Award 2014

mod_mruby ngx_mruby Fukuoka Ruby Award 2014

MATSUMOTO Ryosuke

January 22, 2014
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

  1. mod_mruby × ngx_mruby
    スクリプト言語で高速かつ省メモリに拡張可能な
    Web サーバの機能拡張支援機構
    京都大学 松本 亮介
    - 第6回 フクオカRuby大賞 -

    View full-size slide

  2. 目次
    1. 本研究の概要
    2. mrubyによる実装
    3. パフォーマンス評価
    4. 貢献
    - 第6回 フクオカRuby大賞 - 2

    View full-size slide

  3. 本研究の概要
    - 第6回 フクオカRuby大賞 - 3
    - 特徴 -

    View full-size slide

  4. 研究の背景
    • Webサービスの大規模・複雑化
    – Webサービスの無料・低価格化に伴う普及
    – スマートフォンからサービスを利用する機会の増加
    – Webサーバへのアクセス数が日々増加
    • Webサービスの低価格化と安定性向上が課題
    – セキュリティやリソースの管理の効率化
    – サービスの運用・管理コストの低減
    – サービス形態によってWebサーバの機能を最適化
    - 第6回 フクオカRuby大賞 - 4

    View full-size slide

  5. Webサーバの機能拡張
    • Webコンテンツでは難しい処理を実現可能
    – Webコンテンツ処理前後に処理を追加
    – 効率の良いアクセス制御やリソース制御を実現
    – Webサービスの運用・管理を効率化
    • 従来のWebサーバの機能拡張手法
    – C言語による実装が定番
    • 高速かつ省メモリ ⇔ 保守性や生産性が低い
    – スクリプト言語による実装
    • 保守性や生産性が高い ⇔ 低性能・安全性の問題
    - 第6回 フクオカRuby大賞 - 5

    View full-size slide

  6. mod_mruby × ngx_mruby[1]
    • スクリプトで高速・省メモリにWebサーバを拡張
    – 生産性に関する組込みソフトウェア開発の課題を参考
    – 性能とスクリプトによる生産性を両立した機能拡張機構
    – 性能面と安全性を両立した汎用的なアーキテクチャ設計
    – 複数の異なるWebサーバの振る舞いを共通のDSLで記述
    – 実装に最適な組込みスクリプト言語mrubyを採用
     省メモリ、コンパイルが低コスト、機能の取り外しが可能
    [1] 松本亮介,岡部 寿男, mod_mruby: スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡
    張支援機構, 情報処理学会第6回インターネットと運用技術シンポジウム, 2013年12月. 優秀論文賞受賞
    - 第6回 フクオカRuby大賞 - 6

    View full-size slide

  7. mrubyによる実装
    - 第6回 フクオカRuby大賞 - 7
    - mrubyの適用箇所 -

    View full-size slide

  8. 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

    View full-size slide

  9. mod_mrubyとngx_mrubyの特徴
    • 特徴
    – 設定が容易
    – インタプリタを共有する事で高速・省メモリに動作
    – スクリプト間でグローバル変数やクラスの干渉を防止
    – Webサーバの振る舞いをRuby DSLで容易に記述可能
    – プロセスを再起動する事なく変更可能(キャッシュも可能)
    • 採用例
    – オリジナルのリバースプロキシ(20行程度)
    – 複雑な条件によるリダイレクト
    – サーバの負荷によって処理を変更
    – サーバプロセスの内部情報を利用したアクセス制御
    – 管理者が自由にWebサーバの振る舞いを定義可能
    - 第6回 フクオカRuby大賞 - 9

    View full-size slide

  10. Apache httpd 設定例
    # コンパイル方式: コードの変更可

    mrubyHandlerMiddle /path/to/test.rb

    # キャッシュ方式: コード変更不可だが高速に動作

    mrubyHandlerMiddle /path/to/test.rb cache

    - 第6回 フクオカRuby大賞 - 10

    View full-size slide

  11. 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

    View full-size slide

  12. Reverse Proxy by mod_mruby
    - 第6回 フクオカRuby大賞 - 12

    View full-size slide

  13. BasicAuth with Redis by mod_mruby
    - 第6回 フクオカRuby大賞 - 13

    View full-size slide

  14. リソース制御の応用例[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

    View full-size slide

  15. パフォーマンス評価
    - 第6回 フクオカRuby大賞 - 15
    - Hello World文字列レスポンスベンチマーク -

    View full-size slide

  16. 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/*)

    View full-size slide

  17. 貢献
    - 第6回 フクオカRuby大賞 - 17
    - Rubyを活用したことによる効果 -

    View full-size slide

  18. 貢献
    • 生産性と性能の両立が困難であるという従来のスクリプト言
    語によるWebサーバの機能拡張の問題を解決
    • 大規模・複雑化しているWebシステムに必要な機能拡張を性
    能を維持しながら馴染みのあるRubyで容易に実現可能
    • Rubyのアプリケーション開発の延長でWebサーバソフトウェ
    アの違いを気にする事なく複数のWebサーバの機能拡張も
    総合的に実装可能となりミドルウェアとの親和性が向上
    • 性能と生産性を両立したWebサーバの機能拡張によって
    WebサーバがInternet of Thingsにおけるハブの役割を担う
    - 第6回 フクオカRuby大賞 - 18

    View full-size slide