Pro Yearly is on sale from $80 to $50! »

今どきのWEBホスティングの高負荷対策 Hosting Casual Talk #1

今どきのWEBホスティングの高負荷対策 Hosting Casual Talk #1

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

June 29, 2014
Tweet

Transcript

  1. 今どきのWEBホスティングの高負荷対策 HOSTING CASUAL TALKS #1 Twitter: @matsumotory MATSUMOTO, Ryosuke

  2. 目次 2014/06/28 Hosting Casual Talks #1 2 ¨  Webホスティングの高負荷対策とは ¨ 

    これまでの高負荷対策 ¨  今どきの高負荷対策 ¨  今どきの高負荷対策の応用例 ¨  まとめ
  3. Webホスティングのホストとは 2014/06/28 Hosting Casual Talks #1 3 ¨  Webホスティングサービスにおいて,ドメイン名 (FQDN)によって識別され,対応するコンテンツを

    配信する機能をホストと呼ぶ.[1] [1] 松本亮介,岡部寿男,リクエスト単位で仮想的にコンピュータリソースを分離する Webサーバのリソース制御アーキテクチャ,情報処理学会研究報告,Vol.2013- IOT-23, No.4, 2013年9月.
  4. Webホスティングの高負荷対策 2014/06/28 Hosting Casual Talks #1 4 ¨  ホスティングは配信コンテンツを予想できない ¤ 

    あらゆるアプリが自由に実行される ¤  あらゆる負荷を想定・制御しなければならない ¨  共有サーバにおけるリソース占有を防ぐ ¤  共有ユーザが平等にリソースを使用可能 ¨  専用サーバにおけるサーバダウンを未然に防ぐ ¤  サーバダウンによるデータ損傷や齟齬を防止
  5. これまでの高負荷対策 2014/06/28 Hosting Casual Talks #1 5 ¨  トラフィック制御 ¤ 

    CGIのCPU等のリソース超過を防げない ¨  同時接続数制限 ¤  たった一つのCGIがリソース占有することもある ¨  CPU使用時間が閾値を超えたら切断 ¤  強制中断でありクライアントの印象が悪い ¤  データの齟齬 ¤  DSO※1 のリソース占有を防げない ¨  リクエストに対する条件分岐の記述が書きにくい ¨  リアルタイム性が低い(運用でカバー) ※1 mod_phpやmod_perl等インタプリタをhttpdプロセスに直接組み込んで実行するモデル
  6. 今どきの高負荷対策(願望) 2014/06/28 Hosting Casual Talks #1 6 ¨  管理者がプログラマブルに制御ルールを記述 ¤ 

    柔軟で可読性の高い制御条件を表現したい ¤  サーバプロセスの再起動なくルールを変更したい ¤  制御ルールがオーバーヘッドにならないようにしたい ¨  リクエスト単位でリソース制御 ¤  リクエストの中断ではなく継続的に処理させたい ¤  特に制御困難なCPUやDISK I/O等を制御したい
  7. 今どきの高負荷対策(願望) 2014/06/28 Hosting Casual Talks #1 7 ¨  管理者がプログラマブルに制御ルールを記述 ¤ 

    柔軟で可読性の高い制御条件を表現したい ¤  サーバプロセスの再起動なくルールを変更したい ¤  制御ルールがオーバーヘッドにならないようにしたい ¨  リクエスト単位でリソース制御 ¤  リクエストの中断ではなく継続的に処理させたい ¤  特に制御困難なCPUやDISK I/O等を制御したい
  8. 今どきの高負荷対策 2014/06/28 Hosting Casual Talks #1 8 ¨  mod_mruby WebサーバDSL制御エンジンを開発

    ¨  高速かつ省メモリにWebサーバを制御可能 # mrubyTranslateNameFirst “/path/to/proxy.rb”! ! backends = [! "http://192.168.0.101:8888/",! "http://192.168.0.102:8888/",! "http://192.168.0.103:8888/",! ]! ! r = Apache::Request.new! r.reverse_proxy = backend + r.uri!
  9. 今どきの高負荷対策(願望) 2014/06/28 Hosting Casual Talks #1 9 ¨  管理者がプログラマブルに制御ルールを記述 ¤ 

    柔軟で可読性の高い制御条件を表現したい ¤  サーバプロセスの再起動なくルールを変更したい ¤  制御ルールがオーバーヘッドにならないようにしたい ¨  リクエスト単位でリソース制御 ¤  リクエストの中断ではなく継続的に処理させたい ¤  特に制御困難なCPUやDISK I/O等を制御したい
  10. 今どきの高負荷対策 2014/06/28 Hosting Casual Talks #1 10 ¨  mod_mrubyからcgroup※1 を制御可能にする

    ¤  指定のCPU範囲内で処理を継続的に処理 ¤  コア数によってパラメータの変更が必要 r = Apache::Request.new! ! if r.hostname == “matsumoto-r.jp”! cpu = Cgroup::CPU.new “httpd-limited”! # CPU使用量を1コア10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end ※1 cgroupsを制御できるlibcgroupを制御できるmruby-cgroupを組み込んだmrubyを組 み込んだmod_mrubyでApacheを制御
  11. 今どきの高負荷対策の応用例 2014/06/28 Hosting Casual Talks #1 11 ¨  以下のようなリソース制御ルールが記述可能 ¤ 

    ApacheのVirtualHostで高集積ホスティングの場合 ¤  通常ホストは使用可能CPU※1 の90%から分配 n  ただし高負荷ホストと同時であれば75%※2 使用可能 ¤  高負荷ホストは使用可能CPUの50%から分配 n  ただし通常ホストと同時であれば25%使用可能 ¤  超高負荷ホストは常にCPUの10%から分配 n  どのような状況でも常にCPU10%を使用 ¨  工夫次第で様々なリソース制御ルールを書ける ※1 DISK I/Oでも制御可能 ※2 75%とはコア1つならコアの75%、コア4つならコア3つを指す
  12. まとめ 2014/06/28 Hosting Casual Talks #1 12 ¨  既存の高負荷対策は問題点が幾つかあった ¤ 

    強制中断制御 ¤  制御条件記述の柔軟性が低い ¤  運用から得られる経験的なパラメータ制御 ¨  これからの高負荷対策 ¤  管理者がプログラマブルに制御ルールを記述 ¤  リクエストパラメータを条件にリソース制御 ¤  中断せずにリソース割当範囲内で処理を継続