webアプリケーション開発向け...
TRANSCRIPT
![Page 1: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/1.jpg)
Webアプリケーション開発向けAOP機構の実装
2009年3月18日外村 慶二, 成瀬 龍人, 塩塚 大, 白石 卓也 , 鵜林 尚靖 (九工大)
中島 震 (NII)
1
![Page 2: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/2.jpg)
発表概要
2
Webクライアント
WebクライアントWebサーバ
HTTPリクエスト/レスポンス
負荷分散アクセス制御
アプローチ:Webプロトコルに基づくAOP機構 (AOWPとAOWP/PHP)
問題意識:一連のHTTPリクエストに基づく横断的関心事を容易にモジュール化したい
APSEC 2008
本日の発表
テーマ:Webプロトコルに基づくAOP機構をどのように実装するか?
アプローチ:PHP向けAOP言語 + AOWPライブラリ
![Page 3: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/3.jpg)
発表手順
• AOWPとAOWP/PHP (ツールデモ有り)
• 実装
• 性能評価
• 関連研究
• まとめ
3
![Page 4: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/4.jpg)
AOWPとAOWP/PHP
4
![Page 5: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/5.jpg)
AOWPWebクライアント
WebクライアントWebサーバ
リクエスト/レスポンス
プログラム
プログラム
アスペクト (Aspect)
ポイントカット(Pointcut)
アドバイス(Advice)
•Webプロトコル上のイベントに基づくポイントカット- HTTPリクエストを選択- フォームデータの読み込みを選択- ページ遷移履歴に基づいて選択- 等々
•Webトランザクションに基づくアスペクトのインスタンス管理- Webアプリケーション全体- クライアント (セッション) ごと- リクエストごと- 等々
アスペクトインスタンス
アスペクトインスタンス
5
![Page 6: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/6.jpg)
AOWP/PHP
6
class アスペクト名 extends AOWP_Aspect {public function __construct() {// ポイントカットの定義// アドバイスの定義
}
// アドバイスとして実行するメソッドの定義public function advice1($context) {}
}
• PHPを対象にしたクラスベースAOPフレームワーク
• アスペクトをPHPのクラスとして定義
• ポイントカットとアドバイスをコンストラクタで定義
![Page 7: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/7.jpg)
AOWP/PHPの記述例
ユーザ認証
• 全てのページ遷移にユーザ認証に基づくアクセス制御を追加
• 同一のアスペクトをブログシステムとWikiシステムに織り込み
Webクライアントブログシステム
Webクライアント
ユーザ認証アスペクト
Wikiシステム
http://wordpress.org
http://pukiwiki.sourceforge.jp
7
![Page 8: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/8.jpg)
AOWP/PHPの記述例
ユーザ認証class AccessControllAspect extends AOWP_PerSessionAspect {
private $_loginName = null;public function __construct() {
$pointcut = new AOWP_RequestPointcut('.*');$advice = new AOWP_BeforeAdvice();$advice->setPointcut($pointcut);$advice->setAdviceBody('accessCheck');$this->addAdvice($advice);
}public function accessCheck(AOWP_Context $context) {
if ($this->_loginName === null) {if (AccessManager->checkUser($_POST['id'], $_POST['pass'])) {
$this->_loginName = $name;}else {
$toURL = $_SERVER['REQUEST_URI'];include 'login.php';exit();
} } }}
ユーザセッションごとにインスタンス化
全てのページ遷移イベントを選択
選択したイベントの前にユーザ認証処理を追加
8
![Page 9: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/9.jpg)
AOWP/PHPの記述例
ページ遷移履歴に基づくアクセス制御
• 一般利用者と教育関係者で異なる価格を設定
• 教育関係者向けのページを見る前に確認ページを必ず閲覧
• 検索結果等からの確認ページを閲覧していない利用者に対してアクセス制御
トップ
一般利用者向け
教育関係者向け
Notebook PC
Work station
Notebook PC
Work station
利用規約ページ
検索結果から
ブックマークから
http://www.oscommerce.com9
![Page 10: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/10.jpg)
class AccessControllAspect extends AOWP_PerJoinPointAspect {const CON_URL = '/catalog/conditions\.php';public function __construct() {
$allRequestPointcut = new AOWP_RequestPointcut(CON_URL);$allRequestPointcut->Not();$conditionPageHistory = new AOWP_PageHistoryPointcut();$conditionPageRequest = new AOWP_RequestPointcut(CON_URL);$conditionPageHistory->addRequest($conditionPageRequest);$conditionPageHistory->Not();$allRequestPointcut->addAnd($conditionPageHistory);$advice = new AOWP_BeforeAdvice();$advice->setPointcut($allRequestPointcut);$advice->setAdviceBody('forwardToCondition');$this->addAdvice($advice);
}public function forwardToCondition(AOWP_Context $context) {
header("Location: " . CON_URL);exit();
} }
AOWP/PHPの記述例
ページ遷移履歴に基づくアクセス制御
10
利用規約以外のページ遷移イベントを選択
利用規約のページ遷移イベントを履歴に含まないときの全てのイベントを選択
利用規約を閲覧していないときのページ遷移イベント
を選択
![Page 11: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/11.jpg)
実装
11
![Page 12: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/12.jpg)
実装方針
Webプロトコル上のイベント/コンテキストを取り扱うポイントカット
Webトランザクションに基づくアスペクトのインスタンス管理
汎用的なAOP機構
AOWPのコンセプト 実装
+
Webに特化したポイントカットライブラリ
Webに特化したアスペクトインスタンスの
ファクトリクラス汎用的なAOP言語を拡張
- Webで広く使われているPHPを対象に実装
12
![Page 13: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/13.jpg)
PHPを対象としたAOP機構•対象システムのPHPスクリプトをASTに変換し織り込み
•ウィーバ自体もPHPで実装 (PEARのPHP_ParserGeneratorを使用)
• PHPに基づくジョインポイント (それを選択するポイントカット)- スクリプトファイルの呼出/実行
(ScriptCall/Execution)- グローバルな配列変数 の書込/読込
(ArraySet/Get)- 関数呼出/実行 (FunctionCall/
Execution)- 等々
コード解析
織り込み
コード生成
PHPスクリプト
アスペクト
ASTインスタンス
織り込み済ASTインスタンス
13
![Page 14: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/14.jpg)
Web固有のイベントとジョインポイントのマッピング
<?php ... $_GET['a'] = 11; ... $_SESSION['id'] = 123; ... $_COOKIE['b'] = 'aaa'; ...?>
<?php ... $_GET['a'] = 11; ... $_SESSION['id'] = 123; ... $_COOKIE['b'] = 'aaa'; ...?>
<?php ... $password = $_GET['pass']; ... $userID = $_SESSION['user_id']; ... ... $_COOKIE['cache'] = 'bbb'; ...?>
PHPスクリプト
クライアント
Webサーバ
HTTPリクエスト セッションデータ
フォームデータ
クッキーデータ
• Webプロトコルに基づくイベントをPHPのソースコードに対応付け織り込み
14
![Page 15: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/15.jpg)
Webに特化したポイントカットライブラリ (一部)
AOWPポイントカット PHPにおける対応するポイントカット
Request ScriptExecution (URLと対応するスクリプト名)+ If (指定したHTTPリクエストに対応するか?)
GetRead ArrayGet (_GETのグローバル変数名)
SessionRead ArrayGet (_SESSIONのグローバル変数名)
SessionWrite ArraySet (_SESSIONのグローバル変数名)
PageHistory○ ページ遷移イベント (Requestが選択するイベント)の履歴を監視するアドバイスを生成○ If (ページ遷移履歴の監視結果の評価)
15
![Page 16: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/16.jpg)
Request ポイントカット
ユーザ認証の適用例 (Request(‘.*’))
• Request- リクエストURL- フォームデータ- HTTPリクエストのヘッダ
情報
•実現方法- リクエストURLと対応する
スクリプトファイルの実行 (ScriptExecution ポイントカット)
- フォームデータ, ヘッダ情報が指定したものを満たすか? (If ポイントカット)
- リクエストに対する最初のスクリプトファイル実行か? (If ポイントカット)
� � � � � �
� � � � � � � �
� � � � � � � � � �
� � � � リクエスト
� � � � リクエスト
� � � � リクエスト
� � サーバ
読み込み
ユーザ認証(Auth)
16
![Page 17: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/17.jpg)
Web固有のイベント履歴に基づくポイントカット
• PageHistory- 正規表現を用いて指定した
ページ遷移履歴の有無に基づいてイベントを選択
•実現方法- 指定したパターンに基づい
てページ遷移履歴を監視する処理の追加 (アドバイスの自動生成)
- HTTPリクエストに対する最初のスクリプトファイルの実行か? (If ポイントカット)
ページ遷移履歴に基づくアクセス制御の適用例
index.php
cart.php
condition.php
HTTPリクエスト
HTTPリクエスト
HTTPリクエスト
Webサーバ
アクセス制御(ConOfUse)
ページ遷移イベントの監視(498fe08bb2027_GeneratedAspect) 監視結果の取得
監視結果に基づいてアドバイスを実行
17
![Page 18: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/18.jpg)
アスペクトのインスタンス管理
インスタンス管理方法 PHPにおける実現方法
perapplicationWebアプリケーションで一つのインスタンスとなるように,シリアライゼーションを
用いたインスタンス管理
persessionクッキーデータを用いて保存したクライアントごとに一意なIDと関連づけて,シリアライゼーションを用いたインスタンス管理
perrequeststatic変数として管理
(PHPでは,リクエストごとにプロセスが立ち上がり処理を行う為)
ファクトリクラスを通してアスペクトをインスタンス化18
![Page 19: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/19.jpg)
性能評価
19
![Page 20: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/20.jpg)
織り込み時間
対象システム コード行数(スクリプトの数)
織り込み時間(最大メモリ使用量)
パースキャッシュ使用時の織り込み時間
PukiWiki 17925 行(107 個)
76.505 秒(19.31 MByte)
39.433 秒(18.931 MByte)
WordPress 81152 行(258 個)
344.030 秒(53.185 MByte)
173.773 秒(50.701 MByte)
ユーザ認証のアスペクトを織り込んだ場合→ 対象プロジェクトが大規模な時,織り込み時間が開発の負担になる
対象プロジェクトのパース結果等のキャッシュ,織り込みの最適化が必要20
![Page 21: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/21.jpg)
織り込み有無の実行速度(Request ポイントカットについて)
対象システムへの変更内容 トップページの表示時間(変更無しを基準とした割合)
変更無し 0.0413 秒(1 倍)
手作業でユーザ認証を追加 0.0410 秒(1 倍)
織り込みによりユーザ認証を追加 0.1534 秒(3.7 倍)
PukiWiki を対象に全ページにユーザ認証を適用した場合
→ 全てのスクリプトファイルの先頭にユーザ認証を織り込んでおり, トップページの表示までに 27回ユーザ認証の評価が実行されている為 ?
21
![Page 22: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/22.jpg)
織り込み有無の実行速度(Request ポイントカットについて)
対象システムへの変更内容 トップページの表示時間(変更無しを基準とした割合)
変更無し 0.0413 秒(1 倍)
織り込みによりユーザ認証を追加 0.1534 秒(3.7 倍)
織り込みによりユーザ認証を追加(織り込み位置を手作業で最適化)
0.1305 秒(3.2 倍)
織り込みによりユーザ認証を追加(AOWPのスクリプト読込みを手作業で最適化)
0.0481 秒(1.2 倍)
→ AOWPの実行の為のスクリプトの読み込みに時間がかかっている?AOWPのスクリプト読み込み と 織り込み位置 について部分最適化が必要
22
![Page 23: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/23.jpg)
関連研究• PHPを対象としたAOP言語- John Stamey and Bryan Saunders, Simon Blanchard; The
Aspect-Oriented Web, SIGDOC ’05- Sebastian Bergmann and Günter Kniesel; GAP: Generic
Aspects for PHP, Third European Workshop on Aspects in Software, 2006
➡ 本研究では,Webプロトコルに特化したAOP機構を提案した
• トレースベースAOP- Robert J. Walker and Kevin Viggers; Implementing
Protocols via Declarative Event Patterns, SIGSOFT '04/FSE-12
- Chris Allan, Pavel Avgustinov and et al.; Adding Trace Matching with Free Variables to AspectJ, OOPSLA ’05
➡ プログラムの実行履歴に基づくポイントカット.本研究のPageHistory ポイントカット等は,ページ遷移イベント等の特定の実行履歴のみを取り扱った.23
![Page 24: Webアプリケーション開発向け AOP機構の実装posl.ait.kyushu-u.ac.jp/publications/slide/sigse200903-h... · 2020-02-26 · AOP機構の 実装 2009年3月18 ... パースキャッシュ](https://reader034.vdocuments.mx/reader034/viewer/2022042300/5eca81ded0375b0b8026efba/html5/thumbnails/24.jpg)
まとめ
•Webプロトコルに基づくAOP機構を, 汎用的なAOP言語のライブラリとして実現する手法を提案した
•今後の課題- モデルベースのAOP (言語非依存)- オートマトンを使ったWebアプリの検証- 動的織り込み
24