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

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

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

September 28, 2013
Tweet

Transcript

  1. 4.

    研究の背景 •  Webサーバへのアクセス数の増加   –  スマートフォンの普及   –  Webサービスの無料・低価格化と普及  

    –  よりリッチなWebアプリケーションが求められる   •  Webサービスの低価格化と安定性向上が課題   –  Webサービスの高集積マルチテナント環境   –  テナント単位でセキュリティやリソースを管理   –  既存のWebサーバのリソース制御では困難   4
  2. 5.

    Webサーバのリソース制御 •  既存のリソース制御アーキテクチャ   –  リソース値を閾値処理で制御   –  閾値を超えるとリクエスト処理を強制切断・拒否  

    –  受けるか受けないかの単純な制御   •  問題点の概要   –  クライアントの印象が悪い・問い合わせ殺到   –  サーバの品質を保つためだと説明するが・・・   –  品質を上げるためのリソース制御が全体としてサー ビス品質が低下させている場合が多い   5
  3. 6.

    本研究 •  Webサーバの新しいリソース制御を提案   – 管理者が柔軟にリソース制御ルールを記述可能   – リソースを分離して処理するアーキテクチャ   – リソース分離範囲内で継続的に処理  

    •  高集積マルチテナント環境にも最適   – テナント(ホスト)・リクエスト単位でリソース分離   – 特定のリクエストのリソース占有を防ぐ   – 占有を防ぎつつ継続的に処理   6
  4. 8.

    Webサーバのリソース制御設定 •  リクエスト単位で閾値によるリソース制御   –  CPU使用時間や同時接続数等   –  リクエスト処理途中で強制切断(CPU使用時間)  

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

    リソース制御の課題 •  リソース制御の設定を柔軟にできる仕組み   –  Webサービスの大規模・複雑化にも対応   –  Webサーバの内部情報や複数条件で制御構造記述  

    –  リソース制御とアクセス制御やプロキシ処理を連携   •  サービス停止しないようにリソースを制御   –  閾値で処理を停止する事なく継続してリクエスト処理   –  特定のリクエストのリソース占有を防ぐ   9
  6. 11.

    提案するリソース制御 •  ドメイン固有言語(DSL)で制御ルールを記述   –  スクリプト言語のようにルール記述が可能   –  リソース制御ルールを変更後即時反映可能  

    –  DSL実行のオーバーヘッドが少ないアーキテクチャ   •  制御ルールに基づいて仮想的にリソースを分離   –  閾値処理ではなくリソース分離内で継続的に処理   –  リクエスト処理同士で影響を受けない   –  CPU、CPUコア、DISK  I/O等のリソースを対象 11
  7. 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サーバの機能拡張とみなす   •  オーバーヘッドの少ないスクリプト言語による機能拡張機構が必要  
  8. 13.

    提案するリソース制御概要(2) 13           Server  Process Client

      仮想リソース領域   DSL記述   create Request処理時にaIach Request DSL実行 機能拡張機構 リソースコントローラ   リソースコントローラ: DSLで使用するメソッドやクラスの定義       機能拡張機構: Webサーバの拡張、DSLの言語仕様の定義、DSLの実行  
  9. 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月.
  10. 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)
  11. 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
  12. 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
  13. 20.

    評価(2) •  リクエスト処理時間による精度評価   – CPU100%使用するループCGIを使用   – そのCGIをCPU使用率50%にリソース制御   – ループ回数によって1リクエスト処理時間を変化  

    – リクエスト処理時間を変動させ性能制御率を測定   – abコマンドで同時接続数10、総接続数1000   ※ 性能制御率: リソース制御前後で1秒間のリクエスト処理数 が何%低下しているか(本実験では50%に近ければより良い)     20
  14. 22.

    考察 •  リソース制御値より低く制御される場合   – 1リクエスト処理時間が0msec〜6msec   – プロセスを仮想リソース領域に分離する処理が オーバーヘッド   • 

    適切にリソース制御が機能するには   – 比較的処理時間の長いコンテンツ   – 本実験環境では7msec以上   22
  15. 24.

    まとめと今後の予定 •  まとめ   –  管理者が柔軟にリソース制御ルールを記述   –  リクエスト・ホスト単位でリソースを分離  

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