J2EEアプリケーションにおける アプリケーションレベルスケジューリング

Slides:



Advertisements
Similar presentations
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
ファイルキャッシュを考慮したディスク監視のオフロード
Chapter11-4(前半) 加藤健.
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
過負荷時のWebアプリケーションの性能劣化を改善する Session-level Queue Scheduling
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
AspectScope によるアスペクトとクラスのつながりの視覚化
ネストした仮想化を用いた VMの安全な帯域外リモート管理
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
プロキシ協調型動画像配信システムの検討 大阪大学 若宮 直紀.
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
Flyingware : バイトコード変換による 安全なエージェントの実行
サーバ負荷分散におけるOpenFlowを用いた省電力法
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
過負荷時のWebアプリケーションの 性能劣化を改善する Page-level Queue Scheduling
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
リモートホストの異常を検知するための GPUとの直接通信機構
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
実行時情報に基づく OSカーネルのコンフィグ最小化
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
Jakarta Struts (2) ソフトウェア特論 第11回.
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
東京工業大学 情報理工学研究科 数理・計算科学専攻 千葉研究室 栗田 亮
クラウドにおけるVM内コンテナを用いた 自動障害復旧システムの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
アスペクト指向言語のための 独立性の高いパッケージシステム
Intel SGXを用いた仮想マシンの 安全な監視機構
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
VMMのソフトウェア若化を考慮した クラスタ性能の比較
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
ウェブアプリケーションサーバの Degradation Schemeの 制御に向けて
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
アクセス集中時の Webサーバの性能に対する OSの影響
アルゴリズムとプログラミング (Algorithms and Programming)
仮想マシンと物理マシンを一元管理するための仮想AMT
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
開発者との対話を活かした 横断的構造の表現
強制パススルー機構を用いた VMの安全な帯域外リモート管理
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

J2EEアプリケーションにおける アプリケーションレベルスケジューリング 東京工業大学 千葉研究室 日比野秀章 光来健一 千葉滋 2006/1/27 DSW 2006

過負荷時のJ2EEサーバ 過負荷が原因で近年起きた事件 過負荷になると重要な処理が遅延 震度計の増加に伴う負荷の増大で、データ送信に遅れ 地震計ネットワークシステム 震度計の増加に伴う負荷の増大で、データ送信に遅れ 当初の予想より負荷が増大 東証、株式全取引停止 株式売買の注文が殺到し、システムの処理能力が限界 リクエストの増大 過負荷になると重要な処理が遅延 震度の高い地点のデータも遅延 ライブドア以外の注文も遅延 2006/1/27 DSW 2006

過負荷を改善する一般的な手法 一般的な手法 商用システムでは、正常動作と収益が密接 ハードウェアの追加 アプリケーションの抜本的改修 選定、追加開発に時間がかかる 購入予算がかかる アプリケーションの抜本的改修 軽量化、クラスタ化、多階層化(負荷分散) 検証に時間がかかる 改修の費用がかかる 商用システムでは、正常動作と収益が密接 対処の遅れは、大きな損失につながる 2006/1/27 DSW 2006

過負荷に対処する安価な対処法 QoS 制御を後から追加して対処 追加する際の用件 アドミッションコントロール 重要度の高い処理を優先する 追加する際の用件 アプリケーションのコードの変更を避ける 動いているロジックを壊す危険性を縮小 OS・ミドルウェアの大幅な変更を避ける 検証時間を短縮 E.g. リアルタイム機能を持つOS・ミドルウェアに変更 2006/1/27 DSW 2006

アスペクト指向プログラミング(AOP)を用いた アプリケーションレベルスケジューリング アプリケーションレベルでスケジューリング OS・ミドルウェアの変更不要 アスペクトを利用してJ2EEアプリケーションとスケジューラを結合 アプリケーションのコード書き換えが不必要 スケジューラを再利用 きめ細かい制御が可能 短い間隔で定期的にスケジューラを呼出す 様々な位置からスケジューラを利用 アプリケーションの情報を利用 2006/1/27 DSW 2006

スケジューラ スレッド アプリケーションのスレッドを管理 スケジューラ アプリケーションスレッドの登録・削除 スレッド実行の制御 要求 スケジューラに処理の開始・終了を通知 スレッド実行の制御 定期的に呼び出される 実行可能フラグに応じて、自発的に制御(wait/sleep) Javaのsuspend/resumeが推奨されていない 外部からの強制的なスレッド操作が不可 スケジューリングの変更要求 実行可能フラグを要求に応じて調整 フラグの一覧 false ID true 要求 確認 ID アプリ ID ID スレッド 2006/1/27 DSW 2006

アスペクト Fooクラス アスペクト Schedulerクラス ポイントカット スケジューリング制御を行う位置 アドバイス スケジューラのメソッドの呼び出し GluonJ[Chibaら’05]を利用 XMLを用いた記述 <glue> <pointcut-decl> <name> point </name> <pointcut> withincode(void Foo.foo()) ANDAND call(void Bar.bar()) </pointcut> </pointcut-decl> <behavior> <around> Scheduler.beforeB(); $_ = $proceed($$); Scheduler.afterB(); </around> </behavior> </glue> void foo(){ Bar.bar(); } void beforeB(); void afterB(); Fooクラス アスペクト Schedulerクラス 2006/1/27 DSW 2006

スケジューラを呼び出す位置の自動決定 定期的な呼び出し位置を人手で探すのは面倒 プロファイリング情報から呼び出し位置を自動決定 呼び出し位置の候補 制御対象処理の実行中に呼ばれるすべてのメソッド プロファイリング情報 制御対象処理のみを単独で実行して取る 候補となるメソッドの名前と呼び出し時刻 呼び出し位置の決定方針 一定間隔(T秒) 少なくする 各区間で呼出しは1回 [(n-1/2)T,(n+1/2)T]で分割 出現頻度が1で、nTに近いものを選択 選択数0の区間で、出現頻度が2、以下の加点が最大になるものを選択 新たに選択された区間の数 削除可能な呼び出しの出現頻度 出現頻度3,4,…,Nで3の繰り返し N:出現頻度の上限  T:呼び出し間隔 ・methodA ・methodB ・methodC 2006/1/27 DSW 2006 (n-1)T nT (n+1)T

全体図 1. スケジューラ を作成 2. アスペクト を作成 3. プロファイリング 4. 呼び出し位置を 自動決定 1. スケジューラ   を作成 2. アスペクト   を作成 3. プロファイリング 4. 呼び出し位置を   自動決定 5. J2EEサーバに   配置 Jar J2EE アプリケーション 6. weave GluonJ J2EEサーバ 2006/1/27 DSW 2006

水位監視システム 収集サーバ 管理サーバ クライアント数増加により、管理サーバで欠測 収集サーバ 水位収集 全国各地に設置 全国の河川に設置された水位計より情報収集 管理サーバ 収集サーバから定期的に水位情報を収集 DB・メモリに格納 水位情報の閲覧 クライアント数増加により、管理サーバで欠測 一定時間内でのデータ取得に失敗 水位情報の取得 2006/1/27 DSW 2006 管理サーバ

グラフ表示ページ 2006/1/27 DSW 2006

追加したQoS制御 定期的な水位情報の取得処理を優先 スケジューラの動作 水位取得処理の実行中は、グラフ生成処理の並列処理数を1に制限、それ以外は40に制限 スケジューラの動作 水位収集処理開始時 グラフ生成処理のスレッドの実行可能フラグを1つ以外すべてfalse 水位収集処理終了時 計40個の実行可能フラグをtrue グラフ生成処理の途中 定期的に実行可能フラグを確認 Trueなら処理を継続 Falseなら待機 2006/1/27 DSW 2006

追加したQoS制御のプログラム グラフ生成 水位収集 フラグの確認位置(自動生成) <pointcut-decl> <name> lowImportant </name> <pointcut> execution(void PlaceChartCreatePseudActionImpl.execute(..)) </pointcut> </pointcut-decl> <name> highImportant </name> <pointcut> execution(void CollectorImpl.doObtain()) </pointcut> <name> checkpoint </name> <pointcut> (withincode(Range CategoryPlot.getDataRange(ValueAxis)) ANDAND call(Range Range.combine(Range.Range))) OROR : グラフ生成 水位収集 フラグの確認位置(自動生成) 2006/1/27 DSW 2006

追加したQoS制御のプログラム アスペクト スケジューラ <behavior> <pointcut> lowImportant </pointcut> <around> PriorityPolicy.beforeLowPriority(); $_ = proceed($$); PrioirtyPolicy.afterLowPriority(); </around> </behavior> <pointcut> highImportant </pointcut> PriorityPolicy.beforeHighPriority(); PriorityPolicy.afterHighPriority(); <pointcut> checkpoint </pointcut> <before>PriorityPolicy.checkpoint();</before> Public class PriorityPolicy { public static void beforeLowPriority() { controller.enter(Thread.currentThread()); } public static void afterLowPriority() { controller.exit(Thread.currentThread()); public static void beforeHighPriority() { controller.schedule(1); public static void afterHighPriority() { controller.schedule(40); public static void checkpoint() { controller.checkpoint( Thread.currentThread()); 2006/1/27 アスペクト DSW 2006 スケジューラ

実験条件 ワークロード 制御方式 グラフ表示ページに対し、リクエストを常に40 水位収集は15秒間隔 提案方式(ALS) 処理途中で制限できる 並列処理数の制限 40⇒1 従来のアドミッションコントロール(AC) 処理が終わった時点で制限される 制御なし(NC) 実験環境 サーバホスト×2 CPU: 3.06GHz×2 メモリ: 2GB クライアントホスト CPU: 1.53GHz メモリ: 1GB 2006/1/27 DSW 2006

水位収集にかかる時間 制御なし(NC) AC 提案手法(ALS) 毎回欠測 ALSより時間がかかる ばらつきが大きい 45秒で欠測 毎回5秒程度 2006/1/27 DSW 2006

グラフ生成処理用の 動作しているスレッド数の変化(AC) スレッド数を1に抑えるのに時間がかかる 水位収集が終わるまでに抑えられていないことも多い 2006/1/27 DSW 2006

グラフ生成処理用の 動作しているスレッド数の変化(ALS) スレッド数が短時間で1に抑えられている 2006/1/27 DSW 2006

負荷の違いによる制御への影響 グラフ生成処理に投げるリクエストの数を変えて計測(20 or 40) リクエストが増加した際 水位収集にかかる時間 並列処理数を抑えるのにかかる時間 リクエストが増加した際 ACでは、かなり時間がかかる ALSでは、比較的短時間で水位収集を終える 2006/1/27 水位収集にかかる時間(秒) DSW 2006 並列処理数を抑えるのにかかる時間(秒)

選択アルゴリズムのパラメータの影響 DB javax パラメータにより、呼び出し方がどう変化するか調べた 呼び出し間隔 候補にするメソッドの出現頻度 パラメータにより呼び出し方が大きく変化 呼び出しの状況から、適切なパラメータを選択 制御不可能な区間 DBアクセス 水位情報の検索 Javax内の処理 画像のエンコーディング 選択された呼び出しが実行された時間 2006/1/27 DSW 2006

関連研究 Capriccio [Behrenら’03] Gatekeeper [Elnikelyら’04] アプリケーションに応じたスレッドスケジューリング スレッドが処理するサービスの区別が困難 Gatekeeper [Elnikelyら’04] プロキシをサーバマシン間に挿入して、リクエストスケジューリング サーバ内で実行途中での制御が不可 Re-QoS [Tesanovicら’05] QoS制御の追加にアスペクトを使用 リクエストのアドミッションコントロールのみ 2006/1/27 DSW 2006

まとめと今後の課題 今後の課題 まとめ アプリケーションレベルスケジューリングを提案 河川水位監視システムに提案手法を適用 アスペクトを用いてQoS制御を追加 きめ細かい制御 河川水位監視システムに提案手法を適用 過負荷時にQoS要求を満たす 今後の課題 他のアプリケーションにも適用 2006/1/27 DSW 2006