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

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

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

MATSUMOTO Ryosuke
PRO

June 29, 2014
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

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

    View Slide

  2. 目次
    2014/06/28
    Hosting Casual Talks #1
    2
    ¨  Webホスティングの高負荷対策とは
    ¨  これまでの高負荷対策
    ¨  今どきの高負荷対策
    ¨  今どきの高負荷対策の応用例
    ¨  まとめ

    View Slide

  3. Webホスティングのホストとは
    2014/06/28
    Hosting Casual Talks #1
    3
    ¨  Webホスティングサービスにおいて,ドメイン名
    (FQDN)によって識別され,対応するコンテンツを
    配信する機能をホストと呼ぶ.[1]
    [1] 松本亮介,岡部寿男,リクエスト単位で仮想的にコンピュータリソースを分離する
    Webサーバのリソース制御アーキテクチャ,情報処理学会研究報告,Vol.2013-
    IOT-23, No.4, 2013年9月.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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!

    View Slide

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

    View Slide

  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を制御

    View Slide

  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つを指す

    View Slide

  12. まとめ
    2014/06/28
    Hosting Casual Talks #1
    12
    ¨  既存の高負荷対策は問題点が幾つかあった
    ¤  強制中断制御
    ¤  制御条件記述の柔軟性が低い
    ¤  運用から得られる経験的なパラメータ制御
    ¨  これからの高負荷対策
    ¤  管理者がプログラマブルに制御ルールを記述
    ¤  リクエストパラメータを条件にリソース制御
    ¤  中断せずにリソース割当範囲内で処理を継続

    View Slide