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

リクエスト単位でコンピュータリソースを分離可能なWebサーバのリソース制御アーキテクチャ

 リクエスト単位でコンピュータリソースを分離可能なWebサーバのリソース制御アーキテクチャ

MATSUMOTO Ryosuke

September 28, 2013
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

  1. リクエスト単位でコンピュータリソースを分離可能な
    Webサーバのリソース制御アーキテクチャ
    京都大学大学院 情報学研究科  
    松本 亮介,  岡部寿男

    View full-size slide

  2. 目次
    1.  本研究の概要  
    2.  既存のWebサーバのリソース制御  
    3.  提案するリソース制御アーキテクチャ  
    4.  実験と評価
    5.  まとめ  
    2

    View full-size slide

  3. 本研究の概要
    3

    View full-size slide

  4. 研究の背景
    •  Webサーバへのアクセス数の増加  
    –  スマートフォンの普及  
    –  Webサービスの無料・低価格化と普及  
    –  よりリッチなWebアプリケーションが求められる  
    •  Webサービスの低価格化と安定性向上が課題  
    –  Webサービスの高集積マルチテナント環境  
    –  テナント単位でセキュリティやリソースを管理  
    –  既存のWebサーバのリソース制御では困難  
    4

    View full-size slide

  5. Webサーバのリソース制御
    •  既存のリソース制御アーキテクチャ  
    –  リソース値を閾値処理で制御  
    –  閾値を超えるとリクエスト処理を強制切断・拒否  
    –  受けるか受けないかの単純な制御  
    •  問題点の概要  
    –  クライアントの印象が悪い・問い合わせ殺到  
    –  サーバの品質を保つためだと説明するが・・・  
    –  品質を上げるためのリソース制御が全体としてサー
    ビス品質が低下させている場合が多い  
    5

    View full-size slide

  6. 本研究
    •  Webサーバの新しいリソース制御を提案  
    – 管理者が柔軟にリソース制御ルールを記述可能  
    – リソースを分離して処理するアーキテクチャ  
    – リソース分離範囲内で継続的に処理  
    •  高集積マルチテナント環境にも最適  
    – テナント(ホスト)・リクエスト単位でリソース分離  
    – 特定のリクエストのリソース占有を防ぐ  
    – 占有を防ぎつつ継続的に処理  
    6

    View full-size slide

  7. 既存のWebサーバのリソース制御
    7

    View full-size slide

  8. Webサーバのリソース制御設定
    •  リクエスト単位で閾値によるリソース制御  
    –  CPU使用時間や同時接続数等  
    –  リクエスト処理途中で強制切断(CPU使用時間)  
    –  閾値超過中はリクエストを拒否(同時接続数)  
    •  問題点  
    –  リクエストの切断・拒否中はサービス停止と同様  
    –  切断・拒否を伴う場合適切な閾値設定が困難  
    –  対応が後手に回る場合が多い  
    –  せいぜいファイルやIP単位での設定で複数の条件に
    よる制御構造が設定できない等ルール記述の自由
    度が低い  
    8

    View full-size slide

  9. リソース制御の課題
    •  リソース制御の設定を柔軟にできる仕組み  
    –  Webサービスの大規模・複雑化にも対応  
    –  Webサーバの内部情報や複数条件で制御構造記述  
    –  リソース制御とアクセス制御やプロキシ処理を連携  
    •  サービス停止しないようにリソースを制御  
    –  閾値で処理を停止する事なく継続してリクエスト処理  
    –  特定のリクエストのリソース占有を防ぐ  
    9

    View full-size slide

  10.  
     
    提案するリソース制御アーキテクチャ
    10

    View full-size slide

  11. 提案するリソース制御
    •  ドメイン固有言語(DSL)で制御ルールを記述  
    –  スクリプト言語のようにルール記述が可能  
    –  リソース制御ルールを変更後即時反映可能  
    –  DSL実行のオーバーヘッドが少ないアーキテクチャ  
    •  制御ルールに基づいて仮想的にリソースを分離  
    –  閾値処理ではなくリソース分離内で継続的に処理  
    –  リクエスト処理同士で影響を受けない  
    –  CPU、CPUコア、DISK  I/O等のリソースを対象
    11

    View full-size slide

  12. 提案するリソース制御概要(1)
    12
     
     
     
     
     
    Server  Process
    Client  
    仮想リソース領域  
    CPU  10%・Disk  write  5MB/s  
    DSL記述設定  
     
    CPU  10%  
    Disk  write  5MB/s  
    create Request処理時にaIach
    リソースコントローラ
    Request
    設定読込
    •  リクエスト処理中のみサーバプロセスを仮想リソース領域に分離  
    •  DSL記述によるWebサーバの機能拡張とみなす  
    •  オーバーヘッドの少ないスクリプト言語による機能拡張機構が必要  

    View full-size slide

  13. 提案するリソース制御概要(2)
    13
     
     
     
     
     
    Server  Process
    Client  
    仮想リソース領域  
    DSL記述  
    create Request処理時にaIach
    Request
    DSL実行
    機能拡張機構
    リソースコントローラ  
    リソースコントローラ: DSLで使用するメソッドやクラスの定義  
        機能拡張機構: Webサーバの拡張、DSLの言語仕様の定義、DSLの実行  

    View full-size slide

  14. 提案するリソース制御詳細(1)
    •  DSLによる機能拡張機構  
    –  オーバーヘッドが少なく高速・省メモリに動作  
    –  mod_mruby[1]  
    –  Rubyを使って柔軟で可読性の高いDSLを定義可能  
    •  リソースコントローラ + DSL記述設定  
    –  mrubyの拡張(mrbgem)として実装  
    •  リソース分離  
    –  Linux  Cgroups(Linux  Kernel  2.6.24以降)  
    –  プロセス単位でOSリソースを制御  
    •  Webサーバソフトウェア  
    –  Linux  Kernel  3.10+ Apache  HTTP  Server  2.4.6  
    14
    [1]  松本亮介・岡部寿男,  組み込みスクリプト言語mrubyを利用したWebサーバの機能拡張支援機構,  情報処
    理学会研究報告 Vol.2012-­‐IOT-­‐18,  No.6,  2012年6月.

    View full-size slide

  15. 15
     
     
     
     
     
    Apache  Server  Process
    Client  
    cgroups  1  (cpu.cgi)  
     
    CPU  10%    
     
     
    Ruby  DSL  
     
    config  1  
    target  cpu.cgi  
    CPU  10%  
     
     
    config  2  
    target  io.cgi  
    CPU  50%  
    Disk  Write  1MB/sec  
     
    create aIach
    mod_mruby  
    cgroups  2  (io.cgi)  
     
    CPU  50%    
    Disk  Write  1MB/sec  
    mruby  
    Request  
    cpu.cgi
    リソースコントローラ
    DSL実行
    提案するリソース制御詳細(2)

    View full-size slide

  16. Ruby  DSLによる制御ルール例
    16
    r = Apache::Request.new!
    !
    if r.filename == “/path/to/cpu.cgi”!
    cpu = Cgroup::CPU.new “cpu_group”!
    # CPUを10%に制御したい場合!
    cpu.cfs_quota_us = 10000!
    cpu.create !
    cpu.attach!
    end

    View full-size slide

  17.  
     
    実験と評価  
    17

    View full-size slide

  18. 実験環境
    クライアント
    CPU Intel  Core2Duo  E6600  3.06GHz
    Memory 8GB  
    NIC Realtek  RTL8111/8168B  1Gbps
    OS Fedora  18  Linux  kernel  3.10
    18
    サーバ
    CPU Intel  Corei7-­‐4770K  3.5GHz
    Memory 32GB  
    NIC Intel  I217V  1Gbps
    OS Fedora  19  Linux  kernel  3.10
    MiddleWare(Web  server) Apache/2.4.6

    View full-size slide

  19. 評価(1)
    •  提案手法導入によるオーバーヘッドの評価  
    – 制御対象でないリクエストの性能低下を評価  
    – “Hello  World”を出力するだけのHTMLファイル  
    – abコマンドで同時接続数100、総接続数100万  
    •  結果  
    – 提案手法を未導入時:  32915.46  request/sec  
    – 提案手法を導入時:    32322.07  request/sec
    19

    View full-size slide

  20. 評価(2)
    •  リクエスト処理時間による精度評価  
    – CPU100%使用するループCGIを使用  
    – そのCGIをCPU使用率50%にリソース制御  
    – ループ回数によって1リクエスト処理時間を変化  
    – リクエスト処理時間を変動させ性能制御率を測定  
    – abコマンドで同時接続数10、総接続数1000  
    ※ 性能制御率: リソース制御前後で1秒間のリクエスト処理数
    が何%低下しているか(本実験では50%に近ければより良い)  
     
    20

    View full-size slide

  21. 評価(2)
    21

    View full-size slide

  22. 考察
    •  リソース制御値より低く制御される場合  
    – 1リクエスト処理時間が0msec〜6msec  
    – プロセスを仮想リソース領域に分離する処理が
    オーバーヘッド  
    •  適切にリソース制御が機能するには  
    – 比較的処理時間の長いコンテンツ  
    – 本実験環境では7msec以上  
    22

    View full-size slide

  23.  
     
    まとめ  
    23

    View full-size slide

  24. まとめと今後の予定
    •  まとめ  
    –  管理者が柔軟にリソース制御ルールを記述  
    –  リクエスト・ホスト単位でリソースを分離  
    –  高集積マルチテナント環境にも適している  
     
    •  今後の予定  
    –  仮想リソース領域の分離処理の最適化  
    –  Disk  I/O制御の評価  
    –  トラフィック・メモリも統一的に扱う実装追加  
    –  リソース消費の統計値を計測する機能追加  
    24

    View full-size slide