数理・計算科学専攻 千葉研究室 08m37315 森田 悟史 指導教員 千葉 滋 教授
DESCRIPTION
分散アスペクトの一貫性の保持と停止時間の短縮を考慮した動的織り込み手法 Coordinated Distributed Dynamic Weaving with Minimum Pause Time. 数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授. 分散動的アスペクト指向を用いた機能追加. プログラムの振る舞いを実行中に変更 例 : メッセージ送信プログラムへの暗号機能追加 二つのアスペクトで機能を実現 クライアント側:暗号化 サーバ側:復号. Client. Server. メッセージ. 暗号化. 復号. - PowerPoint PPT PresentationTRANSCRIPT
分散アスペクトの一貫性の保持と停止時間の短縮を考慮した動的織り込み手法
Coordinated Distributed Dynamic Weaving with Minimum Pause Time
数理・計算科学専攻 千葉研究室08M37315 森田 悟史指導教員 千葉 滋 教授
分散動的アスペクト指向を用いた機能追加
•プログラムの振る舞いを実行中に変更•例 : メッセージ送信プログラムへの暗号機能
追加▫二つのアスペクトで機能を実現
クライアント側:暗号化 サーバ側:復号
Client Server
暗号化 復号
暗号文
Client Serverメッセージ
2
追加する ( 織り込む ) 暗号化アスペクトの例
3
class Client { void send (String msg) { …}}
Server
号
暗号文ジョインポイン
ト
public aspect Encrypter { void around (String msg): call(void Client.send(String))&& args(msg) { String cipher = encrypt(msg); // 暗号化 proceed(cipher); // 元のメソッドを呼び出す }}
アドバイス ポイントカット
復号
アスペクト
研究目的:一貫性を保って織り込む•まだあまり注目されていない
▫ While coordinated weaving *may* be important, it is not necessarily required in all cases. (SC 09 notification)
•片方だけ先に織り込まれると不具合▫両方のアスペクトが必要
•織り込みにかかる時間が一定ではない▫ネットワークスピードの違い
巨大な分散環境▫CPU 使用率の違い
Java ベース言語のコード変換
Client Server
暗号化
暗号文
解読不可
Client Serverメッセージ
4
実験:一貫性を保つことの重要性• InTrigger で実験▫ chiba ノードから mirai ノードへ送信
1 ミリ秒に 1 回通信 ネットワークレイテンシは 27 ミリ秒
▫ Java ベース言語の場合 ( コード変換あり ) 織り込みの瞬間 10 回の暗号化失敗
▫CaesarJ [‘03 Mezini ら ] の場合 ( コード変換なし ) 静的に織り込み、動的に有効化 有効化の瞬間 1 回の暗号化失敗
5
二種類の言語で実験
評価軸:一貫性の保持と速度の両立•素朴に制御すると難しい
•素朴な方法:全ノードを停止▫安全なところで止めて織り込
み 再開▫パフォーマンスの問題
アプリケーションを止めてしまう
6
暗号化 復号
Client Serverメッセージ
Client Server
Client Server
Client Server暗号文
停止
再開
提案 : two phase weaving 機構•織り込み制御プリミティブを分割▫アスペクトの準備 (deploy) と有効化 (activate) に分
ける 時間がかかる deploy を非同期的に行い、 activate する
タイミングだけを制御する
7
プリミティブ
説明
deploy ジョインポイントにアドバイスを準備をする
織り込み処理が並列でスタートする (block しない )isDeployed deploy が完了しているか確認するactivate アドバイスの呼び出しを可能にする
deploy 前の場合、 deploy 完了と同時に呼び出し可能になる
deploy の状態にかかわらず、 activate はすぐ終わる
一貫性と速度を両立させる手法
例 : two phase weaving 機構を使った暗号化アスペクトの織り込み•実装した織り込みアルゴリズム▫それぞれの機能を deploy▫ isDeployed で織り込み終了を確
認▫受信→送信の順で activate
受信側アスペクトの工夫 織り込み過渡期に対応
8
暗号化 復号
Client Server
Client Server暗号文
メッセージ
STOPClient Server
メッセージ
Client Serverメッセージ
isDeployed = true
activate
activate
deploy
deploy
例 : two phase weaving 機構を使ったロギングアスペクトの織り込み•実装した織り込みアルゴリズ
ム▫アプリケーションの同期に合
わせた織り込み▫2 つのアスペクトを deploy
同期のタイミング確認用 ロギングアスペクト
▫同期のタイミングに合わせて activate
9
node00 node01 node02
sync
activation
t = 101
t = 102
t = 103
Do not activate
sync
deploy
Join point
Data sending
Calculation
two phase weaving 機構の特徴•向いているアプリケーション▫全て織り込まれている or 織り込まれていないことを保
証すればよいもの 途中で状態が変わらない
•すべてのプリミティブはブロックしない▫プログラムを止めずに一貫性を保てる
•限界▫アドバイス側に、両対応などの工夫が必要なこともある
アプリケーション自体の機構を利用することで工夫がいらない場合もある
10
実証 : DandyJ• two phase weaving 機構を提供する分散 DAOP 言語•言語サポートを提供▫プリミティブのみだと、織り込み制御の記述が複雑に
なる 機能と分散処理・織り込み活性化処理が混ざる
▫deploy, activate, isDeployed + 補助プリミティブ▫Dynamic aspect▫Remote pointcut▫Onetime aspect
11
Dynamic aspect•動的織り込みが可能なアスペクト•First-class aspect▫dynamic 修飾子をつける▫インスタンス化し、 deploy や activate の対象にでき
る•Dynamic aspect は他のコードから織り込みを操作可
能▫アスペクトでモニタリングを行い activate できる▫モニタリングアスペクトの実装
モニタリングを分離できる
12
Encrypter enc = new Encrypter ();enc.deploy();enc.activate();...enc.undeploy();
dynamic aspect Encrypter {…. }
Remote pointcut [Nishizawa ら ‘ 04]•他のノード上のイベントに反応して
動くアドバイスが書ける•分散環境でのモニタリングアスペク
トが簡単に書ける▫織り込みのタイミングを集中管理できる
•ローカルアドバイスも定義できる▫ local 修飾子
13
指定子 ジョインポイントhosts(hostName1, hostName2 ..) hostName1, … 上のジョインポイントhostName(hostName) ホスト名が hostName と一致するジョインポイン
ト
Aspect
node00:
node00
...send ();
Onetime aspect•一度アドバイスが実行される
と自動的に除去される▫undeploy を明示的に記述す
る必要がない▫モニタリングアスペクトが簡単に書ける モニタリングアスペクトは将来いらなくなる
14
暗号化 復号
Client Serverメッセージ
Client Server
Client Server暗号文
モニタリング
暗号文
undeploy
例 : DandyJ を用いた暗号化アスペクト
15
public abstract dynamic onetime aspect ServerClient { … before (): server() && if (openPort.isDeployed() && server.isDeployed()) { openPort.activate(); server.activate(); } before (): client() && if(server.isActivated() && changePort.isDeployed() && client.isWoven()) { changePort.activate(); client.activate();}}
public dynamic aspect Encrypter { local void around (String msg): client() && args(msg) { // encrypt the message proceed (msg); }}
public dynamic aspect Decrypter { local void around (String msg, Server s): server() && args(msg) && this(s){ if ( /* ポートで場合分け */ ) { // decrypt the message proceed (msg); } else { proceed(msg);}}}
DandyJ の実装•ddjc: JastAdd 版 abc を拡張したコンパイラ▫アスペクトでコンパイラーを拡張
全体 :15万行 追加部分 : 約 5000 行
•ddj: プログラム実行と同時に Runtime system が起動▫Runtime system が動的織り込みを行う
Instrument API で javassist を利用 約 3000 行
16
実験 : 暗号機能の追加 • 1 ミリ秒に 1 回メッセージを送信しているアプリに機能追
加• 3 ノードで実験▫ chiba: メッセージ送信ノード▫mirai: メッセージ受信ノード▫ chiba: コントロールノード
•織り込み方法▫制御なし▫ブロック▫Onetime aspect を用いてコントロール▫コントロールするがモニタリングアスペクトを undeploy し
ない
17
• 実験環境▫ InTrigger chiba & mirai▫ OS: Debian▫ Chiba CPU: Core2Duo 2.13GHz, メモリ : 4GB▫ Mirai CPU: Xeon 2.33GHz, メモリ : 16GB
実験結果•Onetime aspect で一貫性と速度を両立できた
18
1 65 1291932573213854495135776417057698338979610
20406080
100120140
制御なし ( ミス 10 回 )
1 65 1291932573213854495135776417057698338979610
20
40
60
80
100
120
140Onetime aspect
1 65 1291932573213854495135776417057698338979610
20406080
100120140
undeploy なし
1 65 1291932573213854495135776417057698338979610
20406080
100120140
ブロック
100 付近で織り込み
時間(m
s)
時間 ( 回目 )
ブロックによる遅れ
速度◎一貫性 ×
速度 ×一貫性○
速度○一貫性○
速度△ (約7%)一貫性○
Max: 69Ave: 45.4
Max: 133Ave: 47.5
Max: 71Ave: 46.6
Max: 75Ave: 49.6
関連研究
19
• DyReS [‘08 Truyen ら ]▫XML スクリプトで活性化までの流れを記述▫遠隔ノードの処理の状況を把握することはできない▫スクリプトが複雑になりやすい
• CaesarJ [‘03 Mezini ら ]▫非活性状態のアスペクトを deploy 命令で活性化▫遠隔ノードの処理の進行状況を集中管理できない
• DJAsCo [‘06 Navarro ら ]▫Remote pointcut を使用できる▫フックを活性化する処理をアドバイスとして記述でき
ない
まとめ•実験を通して、一貫性の保持が必要なことを示した• two phase weaving 機構の提案▫deploy と activate を分けることで、一貫性の保持と停止時間の短縮
を両立するアルゴリズムを実現可能にした• DandyJ での実証▫言語として実装▫実験でパフォーマンスを調査
•今まで (今後 ) の活動▫論文 : ソフトウェア科学会大会’ 08@筑波大、 (ECOOP’10@slovenija)
▫ポスター : PPL’08@仙台、 AOSD’09@Charlottesville 、 (AOSD’10@Saint-Malo)
20
投稿中
3月