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