Upload
michel
View
48
Download
0
Embed Size (px)
DESCRIPTION
既存 Java プログラムの バイトコード変換による 機能分散. 筑波大学 立堀道昭 佐々木俊幸 千葉滋 板野肯三. たつ ぼり. ソフトウェアの分散実行. GUI とアプリケーション・ロジックの分離 「PC anywhere」 「ゼロ・アドミニストレーション」 「シン・クライアント」 管理コストの削減 安価なクライアント環境を活用できるよう. ソフトウェアの自動分散化. 自動化による開発コスト削減 既存の環境(全自動の遠隔表示) X Window System、VNC、Rawt [IBM Haifa 98] 既存の(半自動)分散化支援ツール - PowerPoint PPT Presentation
Citation preview
March 21-23, 2001
JSSST SPA 2001, Kyoto
既存 Java プログラムのバイトコード変換によ
る機能分散
筑波大学
立堀道昭佐々木俊幸 千葉滋 板野肯三
たつ ぼり
March 21-23, 2001
JSSST SPA 2001, Kyoto
ソフトウェアの分散実行GUI とアプリケーション・ロジックの分離
「 PC anywhere 」「ゼロ・アドミニストレーション」「シン・クライアント」
– 管理コストの削減– 安価なクライアント環境を活用できるよう
March 21-23, 2001
JSSST SPA 2001, Kyoto
ソフトウェアの自動分散化 自動化による開発コスト削減
既存の環境(全自動の遠隔表示)– X Window System 、 VNC 、 Rawt[IBM Haifa
98]
既存の(半自動)分散化支援ツール– JavaRMI 、 HORB 、 ObjectSpace …、– Emerald[Black87] ”、 remotenew”[Nagaratnam9
6] 、 JavaParty[Philippen99] …、
March 21-23, 2001
JSSST SPA 2001, Kyoto
X Window Xlib ライブラリレベルで分散化
– 低レベルな命令が大量にネットワークを飛び交う
線を書け
マウスが動いた
マウスボタン押された
マウスボタン離された
ユーザプログラム
Xlib
March 21-23, 2001
JSSST SPA 2001, Kyoto
ORB による手動(半自動)変換
ユーザプログラムを変更– 応答性能のよい遠隔表示が可能
ユーザプログラム
内部ウィンドウ表示
ウィンドウ内でクリックあり
ORBライブラリ
ユーザプログラム
March 21-23, 2001
JSSST SPA 2001, Kyoto
既存の分散化手法 X Window
– ライブラリ・レベルの分散化 完全自動だが遅い
ORB– プログラム全体を手で分割して分散化
速いが、開発に余分な工数が必要
ユーザプログラム
X Protocol
ユーザプログラム
GUI モジュール
March 21-23, 2001
JSSST SPA 2001, Kyoto
提案するシステムAddistant
より自動化された ORB– プログラム全体を自動変更して分散化– 開発者はプログラムを直接いじる必要はない
現実的なシステムにむけて– 実用的な Swing アプリケーションにも対応– 既存の Java 仮想機械 (JVM) の利用– バイトコード変換– 開発者による分散化の指示の簡素化
March 21-23, 2001
JSSST SPA 2001, Kyoto
Addistant の基本設計 クラスローダによるバイトコード変換
– バイトコード変換には Javassist[Chiba00] を利用
クラス単位でインスタンスの配置方針を指示– 開発者がポリシーファイルに宣言的記述– 例: GUI のクラスはあちら、その他のユーザ
クラスはこちら
March 21-23, 2001
JSSST SPA 2001, Kyoto
現実的なシステムに向けて プロキシ マスタ方式の限界・
– 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる
– Java RMI など、多くの ORB で使われている方式
しかし、既存の ORB の実装法をそのまま適用は無理…
マスタプロキシメソッド呼び出し
ネットワーク通信
March 21-23, 2001
JSSST SPA 2001, Kyoto
システム・クラスの存在 プロキシ・マスタ方式
– クラス定義またはクラスを使う側のコードの変更が必要
– システムクラスの場合バイトコード変換禁止
– 例:プロキシクラスをサブクラスとする実装法
元のクラスが final クラスのときは使えない、など
March 21-23, 2001
JSSST SPA 2001, Kyoto
Addistant の方式 クラス毎に異なる実装法で遠隔参照を実現
– 実装法により、変更が必要なコードの範囲が異なる
– システムクラスの変更を避けるように実装法を選択
– “ 長いものには巻かれろ”法
XML 風のポリシーファイルで宣言的に指定– 置き換え」、「名前変更」、「
サブクラス」、 複製」「 「
March 21-23, 2001
JSSST SPA 2001, Kyoto
「置き換え」手法(例:ユーザクラス)
対象クラスをプロキシに置き換え– 元のクラスを変更できる場合–ひとつの JVM上には、プロキシかマスタ
のどちらか一方のみ
Widget w = new Widget();w.show();
Widgetshow()
分散化
Widgetshow()
.. Show ..
.. Send ..
置き換える
March 21-23, 2001
JSSST SPA 2001, Kyoto
「名前変更」手法(例: java.awt.Window ) コード中に現れた対象クラス名を
プロキシクラスのものに変更– 元のクラスを変更できない場合– 使っている側のコードを変更する
Widget w = new Widget();w.show();
Widgetshow()
分散化
WidgetProxy w = new WidgetProxy();
WidgetProxyshow()
.. Show ..
.. Send ..
March 21-23, 2001
JSSST SPA 2001, Kyoto
「サブクラス」手法(例: java.util.Vector )
対象クラスのサブクラスとしてプロキシクラスを定義– 1つの JVM上にプロキシとマスタを混在させたい場合
Widget w = new Widget();w.show();
Widgetshow()
分散化
Widget w = new WidgetProxy();
WidgetProxyshow()
指示の場合によっては.. Send ..
.. Show ..
March 21-23, 2001
JSSST SPA 2001, Kyoto
「複製」手法(例: java.lang.String )
プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す– Shallow copy
変則版 - 「書き戻し複製」手法– 配列オブジェクトに
用いる byte[] buf = …;istream.read(buf);
March 21-23, 2001
JSSST SPA 2001, Kyoto
応答性能の実験クリック – Window 表示
クリックしてから内部ウインドウが完全に表示されるまで– スタートアップホスト
Sparc 440MHz
– GUI ホスト PentiumII 500MHz
– ネットワーク 10Base-T Half 100Base-TX Full
March 21-23, 2001
JSSST SPA 2001, Kyoto
応答性能の実験クリック – Window 表示
クリックしてから内部ウインドウが完全に表示されるまで– スタートアップホスト
Sparc 440MHz
– GUI ホスト PentiumII 500MHz
– ネットワーク 10Base-T Half 100Base-TX Full
March 21-23, 2001
JSSST SPA 2001, Kyoto
分散 Swing アプリケーション
ポリシーファイル<policy> <import proxy="rename" from="display"> [email protected] [email protected] .. </import> <import proxy="rename" from="application"> [email protected].[InputStream|OutputStream|..] [email protected].* </import> <import proxy="subclass"> [email protected].[AbstractCollection|..] </import> <import proxy="writeBackCopy"> array@- </import> <import proxy="replace" from="application"> user@- </import> <import proxy="copy"> - </import></policy>
March 21-23, 2001
JSSST SPA 2001, Kyoto
応答性能の測定結果 プログラム全体の変換による速度改善
– 応答時間 (秒 ) (10Base-T(100Base-TX))
– 通信量 (キロバイト )
誤差 ±0.1 秒 X Window Rawt Addistant
1 回目 5.6(1.6) 3.2(2.6) 2.0(2.0)
2 回目 5.6(1.4) 0.0(0.0) 0.0(0.0)
X Window Rawt Addistant
1 回目 3493.57 116.20 81.88
2 回目 3438.96 10.95 0.06
March 21-23, 2001
JSSST SPA 2001, Kyoto
まとめ 透過な分散 JVM を既存の JVM を用いて構築する際に鍵となる技術– 既存の Java プログラムを複数のホスト上に分
散させるための支援ツール Addistant を提案
その他の貢献– 分散プログラミング用の Aspect Oriented
Programming ツール– Javassist[Chiba00] 応用のケース スタディ・