既存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”[Nagaratnam96] 、 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 X Protocol – ライブラリ・レベルの分散化 完全自動だが遅い ユーザ プログラム ORB – プログラム全体を手で分割して分散化 速いが、開発に余分な工数が 必要 March 21-23, 2001 GUIモジュール ユーザ プログラム 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(); 分散化 Widget show() 置き換える Widget show() March 21-23, 2001 JSSST SPA 2001, Kyoto .. Show .. .. Send .. 「名前変更」手法 (例:java.awt.Window) コード中に現れた対象クラス名を プロキシクラスのものに変更 – 元のクラスを変更できない場合 – 使っている側のコードを変更する Widget w = new Widget(); w.show(); Widget show() .. Show .. WidgetProxy show() .. Send .. 分散化 WidgetProxy w = new WidgetProxy(); March 21-23, 2001 JSSST SPA 2001, Kyoto 「サブクラス」手法 (例:java.util.Vector) 対象クラスのサブクラスとしてプロキ シクラスを定義 – 1つのJVM上にプロキシとマスタを 混在させたい場合 Widget w = new Widget(); w.show(); Widget show() .. Show .. WidgetProxy show() .. Send .. 分散化 指示の場合によっては Widget w = new WidgetProxy(); March 21-23, 2001 JSSST SPA 2001, Kyoto 「複製」手法 (例:java.lang.String) プロキシクラスは作らず、遠隔メソッ ド呼び出しの際、オブジェクトを移送 して複製を渡す – Shallow copy 変則版 - 「書き戻し複製」手法 – 配列オブジェクトに 用いる March 21-23, 2001 JSSST SPA 2001, Kyoto byte[] buf = …; istream.read(buf); 応答性能の実験 クリック – 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] 応用のケース・スタディ March 21-23, 2001 JSSST SPA 2001, Kyoto 質問・提案をどうぞ March 21-23, 2001 JSSST SPA 2001, Kyoto
© Copyright 2025 ExpyDoc