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

mrubyによるWebサーバ機能の拡張

 mrubyによるWebサーバ機能の拡張

Ruby東京プレゼンテーション2014テクニカルトーク前半

MATSUMOTO Ryosuke

February 01, 2014
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Research

Transcript

  1. mrubyによるWebサーバ機能の拡張
    京都大学 松本 亮介
    (技術者として)

    View full-size slide

  2. 自己紹介
    • 松本亮介
    – Twitter @matsumotory
    • 所属
    – 京都大学 大学院 情報学研究科 岡部研究室
    – 博士課程 D2
    • 専門分野
    – OS・Middlewareのセキュリティ・リソース管理・運
    用技術改善・パフォーマンス・大規模対応
    – http://research.matsumoto-r.jp/
    2
    Ruby東京プレゼンテーション2014

    View full-size slide

  3. Webサーバの機能拡張の分類
    1. 動的コンテンツの高速処理を主な目的
    • レスポンス生成をいかに効率よくするか
    • CGIはforkのコストが大きい
    • サーバプロセスが直接スクリプトを解釈
    • アプリケーションサーバの登場
    2. レスポンス生成以外の内部処理が主な目的
    • Webサーバそのものの振る舞いを定義
    • 軽量な処理が求められる(アクセス制御等)
    • この目的に特化したオーバーヘッドの少ない仕組み
    • mruby使うには最適では? ⇒ mod_mruby開発
    3
    Ruby東京プレゼンテーション2014

    View full-size slide

  4. mod_mrubyの良い点
    4
    • Apache2.0から2.4の最新版で動く
    • ApacheモジュールをRubyで書ける
    • オーバーヘッドが少ない
    • 設定が簡単
    • ngx_mrubyでも同じような記述で書ける
    • 機能追加や改善要望を出しやすい
    松本亮介,岡部 寿男, mod_mruby: スクリプト言語で高速かつ省メモリに拡張可能なWebサーバの機能拡張
    支援機構, 情報処理学会第6回インターネットと運用技術シンポジウム, 2013年12月. 優秀論文賞受賞
    Ruby東京プレゼンテーション2014

    View full-size slide

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

    mrubyHandlerMiddle /path/to/test.rb

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

    mrubyHandlerMiddle /path/to/test.rb cache

    Ruby東京プレゼンテーション2014 5

    View full-size slide

  6. nginx 設定例
    # コンパイル方式: コードの変更可
    Location /mruby-test {
    mruby_contenx_handler /path/to/test.rb;
    }
    # キャッシュ方式: コード変更不可だが高速に動作
    Location /mruby-test-cache {
    mruby_contenx_handler /path/to/test.rb cache;
    }
    Ruby東京プレゼンテーション2014 6

    View full-size slide

  7. Reverse Proxy by mod_mruby
    Ruby東京プレゼンテーション2014 7

    View full-size slide

  8. BasicAuth with Redis by mod_mruby
    Ruby東京プレゼンテーション2014 8

    View full-size slide

  9. リソース制御として応用
    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月. 学生奨励賞受賞
    Ruby東京プレゼンテーション2014 9

    View full-size slide

  10. まとめ
    • レスポンス生成処理以外の内部処理を目的
    • mrubyによってオーバーヘッドを低減
    • Rubyで複数のWebサーバの振る舞いを記述
    • Webサービスの各種サーバの連携に最適
    • Web以外のサーバソフトウェアにも応用可能
    – メールサーバ、ファイルサーバ…
    10
    Ruby東京プレゼンテーション2014

    View full-size slide