過負荷時のWebアプリケーションの 性能劣化を改善する Session-level Queue Scheduling 東京工業大学大学院 情報理工学研究科 数理・計算科学専攻 千葉研究室 松沼正浩 指導教官:千葉滋 修士論文発表 1 セッション処理性能の重要性 消化セッション数がサイトの利益に直結 セッション処理とは? 複数のWebページを通して行う処理 例:ログインからログアウトまでの一連の処理 最後のページ(ログアウト)まで処理して完了 例:商用サイトの物品購入アプリケーション セッション ページ ログ イン 商品 検索 商品 決定 購入 送信 修士論文発表 ログ アウト 2 過負荷時のセッション処理性能 リクエスト殺到時には増加比率以上に低下 10倍のリクエストで100分の1以下の性能になることも 一定の数を超えるとセッション処理性能がゼロになる場 合も 処理性能低下の原因は リソース競合による各ページの処理性能の低下 途中失敗の増加によるセッション完了数の低下 殺到 ログイン 空き状況 観戦予約 購入完了 修士論文発表 成功 3 原因1:ページ処理性能の低下 リクエスト殺到時にページ処理性能が低下 計算リソースが競合するため 重いページの並列処理によりリソースが不足 競合にともなう余計な処理増加 大規模アプリケーションが増加傾向 例:メモリ競合によりGC,スワップイン・アウト増加 各ページのリソース競合を解消する必要 ページ処理性能が低下すると、集合体である セッションの処理性能も低下 修士論文発表 4 原因2:セッションの途中失敗 過負荷時にセッションが途中失敗する可能性大 ページの処理失敗が原因 サーバタイムアウトやブラウザタイムアウト ユーザが待ちきれずにリクエストを中止 11秒以上待たされるとイライラを感じる[Jakob’02] ページの数だけ失敗する危険性も高まる Safari 1.2.3で1分、Mozilla系ブラウザでは2分 重要な処理ほどセッションが長くなる[Cherkasova’98] セッションの途中失敗を抑制する必要 途中で失敗するとそれまでの処理が全て無駄になる 修士論文発表 5 Session-level Queue Scheduling の提案 ページ単位制御とセッション単位制 御の両方を連動 ユーザの挙動を考慮したスケ ジューリング シンクタイム 次のページに移動するまでの時間 ページ ページ ページ スケジューラ スケジューラ スケジューラ タイムアウト セッション スケジューラ 一定時間以内にレスポンスが得られない 場合にリクエストを中断 途中退場 正規手続きを踏まずに途中でセッション 処理を中断 修士論文発表 6 ページスケジューラ ページ単位で並列度を設定してリソース競合を解消 リソース競合を起こさない最大の並列度を動的に決定 並列度をこえるリクエストはページキューで待機させる 並列度は各ページの進捗状況により決定 Progress-based Regulation [Douceur’99] を応用 進捗が悪化しているとリソース競合を起こしていると判定 個別のリソースを監視する必要はない 進捗状況を フィードバック リクエスト ページスケジューラ 3 クライアント ページキュー 並列制御 処理実行 進捗測定 7 セッションスケジューラ 同時に処理するセッション数を制御 同時セッション数の動的な決定 ページスケジューラからの情報を利用 ページキューの長さを一定に保つ キューの長さを フィードバック セッション キュー セッションスケジューラ キューが長い:途中失敗の可能性大 キューが短い:リソース使用の効率低下 制御はセッション参加時の1回のみ 許可を得られるまで、リクエストはセッ ションキューで待機させる 修士論文発表 ページ スケジューラ 8 セッションスケジューラによる 同時セッション数の制御方法 リクエストの投入間隔(遅延)を制御 長くすれば、同時セッション数が減少 短くすれば、同時セッション数が増加 全てのページキューの長さを監視し遅延を変化 待機リクエスト数の総和が多い=ページキューが長い 同時セッション数が多すぎると判断し、遅延を長くする 待機リクエスト数の総和が少ない=ページキューが短い 同時セッション数が少なすぎると判断し、遅延を短くする 修士論文発表 9 プロトタイプ実装 Tomcat上にて実装 単純なアルゴリズムを用いて効果を検証 ページ単位の並列度の決定 各ページのスループットを進捗とした セッション開始の時間的遅れの決定 セッション開始時に次回の遅延を変更 ページキューの平均長を算出し、しきい値と比較 しきい値以上なら間隔を長くし、以下なら間隔を短くする 修士論文発表 10 性能比較実験 同時クライアント数を変動させセッション処理性能を測定 対象アプリケーション 1.login 30ms 商品購入アプリケーションに見立てたServlet群 2.閲覧 30ms 3.閲覧 30ms 4.閲覧 30ms 5.商品検索 400ms 6.購入 30ms 7.logout 30ms クライアントの挙動 シンクタイム:一定時間が経過した後で次のページに移動 タイムアウト:リクエストを送ってから一定時間応答がなければリ クエストを破棄 リトライ:途中失敗した場合は最初から 修士論文発表 11 比較対象 制御なし ページスケジューラのみ使用 セッションを保護しない セッション参加人数を固定(1or30) 途中失敗しない(1) 競合するがシンクタイムを有効利用する(30) サーバ CPU:Intel Xeon 2.40GHz×2 メモリ:2GB OS: Linux2.4.2ギガビットイーサネット WebAppサーバ:Tomcat3.3.1 クライアント CPU:Intel Xeon 3.06GHz メモリ:2GB OS: Linux2.6.8 ギガビットイーサネット 修士論文発表 12 タイムアウトがない場合の性能 スループット[sessions/sec] 3 ページスケジューラが リソース競合解消 2.5 本手法 制御なし ページ単位 1セッション 30セッション 2 1.5 シンクタイム3秒 タイムアウト無制限 1 処理が逐次的 0.5 タイムアウト1分 シンクタイム3秒 0 0 100 200 クライアント数 300 400 13 タイムアウトが1分の場合の 性能 3 本手法 制御なし ページ単位 1セッション 30セッション スループット[sessions/sec] 過負荷時でも性能維持 2.5 2 1.5 途中から急激に 性能が低下 1 シンクタイム3秒 タイムアウト1分 0.5 0 0 100 200 クライアント数 300 400 14 レスポンスタイム (125クライアント) タイムアウト1分 シンクタイム3秒 50 制御なし ページ単位 本手法 ページ単位・本手法とも レスポンスタイムに関しても向上 30 20 10 経過時間 [sec] 24 0 22 0 20 0 18 0 16 0 14 0 12 0 10 0 80 60 40 20 0 0 クライアント数 40 15 レスポンスタイム (400クライアント) タイムアウト1分 シンクタイム3秒 35 ページ単位 本手法 30 本手法のレスポンスタイムは クライアント殺到時でも高性能 20 15 10 経過時間 [sec] 700 680 660 640 620 600 560 540 490 420 390 350 280 220 200 180 160 140 120 100 80 60 40 0 20 5 0 クライアント数 25 16 セッションの途中失敗数 失敗セッション数 1000 900 本手法 制御なし ページ単位 1セッション 30セッション 失敗の内訳 800 700 600 500 400 急激に失敗数が増加 シンクタイム3秒 タイムアウト1分 ほぼ同比率で増加 300 200 100 0 0 100 200 クライアント数 300 400 17 失敗したページの内訳 クライアント数125の時の失敗数の内訳 ページ番号 1ページ 2~4ページ 5ページ 6~7ページ 制御無し 0 3 150 150 0 ページ単位 本手法 0 0 0 0 0 0 0 0 クライアント数400の時の失敗数の内訳 本手法を用いない場合は、重い処理を ページ番号 1ページ 2~4ページ 5ページ 6~7ページ 行っているページで起きている 本手法を用いた場合には、セッション失敗は 制御無し ー ー ー ー 全てセッションの先頭ページでのみ発生した ページ単位 0 0 735 0 735 18 226 本手法 226 0 0 0 スケジューラの挙動の時間変化 セッションスケジューラの挙動 30 ページスケジューラの挙動 400 3.5 ページキュー ページ5用並列度 350 25 3 セッション間隔 ページ1用並列度 250 15 200 2.5 並列度 20 セッション間隔 [msec] ページキューの長さ 300 2 1.5 キューが長くなると 1 セッション間隔が伸びる 制御すべきページの並列度 0.5 が頻繁に変動 150 10 100 5 50 0 0 0 20 43 68 94 122 経過時間 [sec] 151 184 200 0 0 50 経過時間 [sec] 100 19 タイムアウトを短縮 (1分→30秒) 3 スループット[sessions/sec] 高い処理性能を依然維持することができた 2.5 2 本手法 制御なし ページ単位 1セッション 30セッション 1.5 シンクタイム3秒 タイムアウト30秒 1 0.5 より少ないクライアント数でも タイムアウトが発生する 0 0 100 200 クライアント数 300 400 20 シンクタイムを短縮 (3秒→1秒) スループット[sessions/sec] 3 本手法 制御なし ページ単位 1セッション 30セッション 2.5 2 1.5 1 シンクタイムの長さは性能 にあまり影響を与えない 0.5 シンクタイム1秒 タイムアウト1分 0 0 100 200 クライアント数 300 400 21 関連研究 Application-aware admission Control [Carlstorm’02] ページ単位制御、セッション単位制御の組み合わせ それぞれが個別に動作 SEDA Architecture[Welsh’03] リクエスト処理をステージに分割して負荷を制御 より細かいリソース管理を実現 ページスケジューラと直交する ハートビート 通信にタグを埋め込み ブラウザのタイムアウトの抑制 修士論文発表 22 まとめ Session-level Queue Scheduling[DSW’05]を提案 ページスケジューラ[SPA’04]とセッションスケジューラを連動 させることで過負荷時のセッション処理性能を向上・維持 プロトタイプ実装を用いた実験により有効性を示した ユーザの複雑な挙動を考慮したモデルを使用した性能比較 シンクタイム・タイムアウト・リトライを考慮 過負荷時においても一定のセッション処理性能を維持 単純なアルゴリズムでも効果あり 修士論文発表 23 今後の課題 より複雑なユーザの挙動を考慮したモデ ルで対応できるかの確認 修士論文発表 24
© Copyright 2024 ExpyDoc