addistant: アスペクト指向の 分散プログラミング支援ツール

30
July 26, 2001 SWoPP 2001 PRO, Okinawa 1 Addistant アアアアアアアア アアアアアアアアアアアアアア アアアア アアアア () アアア アアアア () アアアア アアアア ()

Upload: kay-grant

Post on 01-Jan-2016

49 views

Category:

Documents


6 download

DESCRIPTION

Addistant: アスペクト指向の 分散プログラミング支援ツール. 立堀道昭 (筑波大) 千葉滋 (東工大) 板野肯三 (筑波大). 概要. Java による分散プログラミングの 支援ツール Addistant 特に機能分散を行うプログラム開発を対象に 言語処理系と実行系で実現 既存の Java virtual machine (JVM) を活用 Addistant の特徴 アスペクト指向 の導入 拡張 クラスローダ による実現. 分散プログラミングの障害. 非分散のロジックに分散のためのコードが絡み合い各所にちらばっている - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 1

Addistant :アスペクト指向の分散プログラミング支援ツー

ル立堀道昭 (筑波大)

千葉滋 (東工大)板野肯三 (筑波大)

Page 2: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 2

概要

• Java による分散プログラミングの支援ツール Addistant• 特に機能分散を行うプログラム開発を対象に• 言語処理系と実行系で実現• 既存の Java virtual machine (JVM) を活用

• Addistant の特徴• アスペクト指向の導入• 拡張クラスローダによる実現

Page 3: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 3

分散プログラミングの障害

• 非分散のロジックに分散のためのコードが絡み合い各所にちらばっている• Crosscutting concerns

• 低いモジュラリティ• 分散プログラミングを難しくしているものの1

• 分散に関する事項がプログラム全体に四散しており、簡潔に記述できない

• 絡み合ったコードの保守・変更は困難

Page 4: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 4

Crosscutting Distribution Concerns (1/2)

• 機能分散プログラム中、分散オブジェクトを配置するコードは散在する

class C {.. new L() ..}

class A {.. new L_Proxy(“..”) ..}

class L {.. new C() ..}

class D {.. new L() ..}

class B {.. new L_Proxy(“..”) ..}

Page 5: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 5

Crosscutting Distribution Concerns (2/2)

• 配置換えに伴い、散在するコードの書き換えが必要

class C {.. new L_Proxy(..) ..}

class A {.. new L(..) ..}

class L {.. new C_Proxy() ..}

class D {.. new L_Proxy(..) ..}

class B {.. new L(..) ..}

配置換え

Page 6: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 6

プログラミング技法による対処の限界

• Abstract Factory デザイン・パターン• 常に Factory クラスを通してインスタンスを生成

し、 Factory のサブクラスで生成を制御

• Factory method はコンテキスト分、数多く必要• 生成されるクラスは共通の親をもたねばならない

ProductL p = factory.create_L_at_C();

class Factory { .. ProductL create_L_at_B(); ProductL create_L_at_C(); .. }

Page 7: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 7

提案するツールAddistant

• 機能分散プログラムの開発を支援• 絡み合う分散配置コードの分離• 抽象化による分散配置記述の簡素化

• 実現手段• 既存の Java 仮想機械 (JVM) を利用• ソースコードの変更が不可能なクラスにも

対処

Page 8: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 8

Addistant の基本設計

• クラス単位のインスタンスの配置方針• 開発者が配置アスペクトとして宣言的記述• 例: GUI のクラスはあちら、その他の

ユーザクラスはこちら

• クラスローダによるバイトコード変換• java.lang.ClassLoader のサブクラス• 第三者によって提供されたソースコードの

ないクラスライブラリにも対応できる

Page 9: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 9

ロード時のバイトコード変換

• 与えられた配置アスペクトに従って、Addistant の処理系が Java プログラムを自動的に変換

• Java クラス・ローダ機構を利用• JVM にクラスをロードする前にバイトコー

ドを書き換える• バイトコード変換には Javassist[Chiba00] を

利用

Page 10: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 10

分散配置アスペクト言語

• 独立したポリシーファイルに記述<policy>

<import … from=“hostH”> A B </import>

<import … from=“hostI”> p.q.[C|D] </import>

<import …> E </import>

</policy>

クラス A と B を“hostH” 変数のホストに配置

p.q.C と p.q.D を“hostI” に配置

E については限定しない

Page 11: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 11

配置クラス指定子

• 配置するクラスを、あるまとまりで指定できる

• パッケージ、サブパッケージ

• サブクラス

ただし、重複する場合、上方の宣言が有効

COM.xxx.file.*

[email protected]

COM.yyy.-

[email protected]

Page 12: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 12

現実的なシステムに向けて• プロキシ マスタ方式の限界・

• 遠隔オブジェクト(マスタ)に対応して、手元では代理のオブジェクト(プロキシ)を用いる

• Java RMI など、多くの ORB で使われている方式

従来の ORB の実装法をそのまま適用は無理…

マスタプロキシメソッド呼び出し

ネットワーク通信

Page 13: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 13

システム・クラスの存在

• プロキシ・マスタ方式• クラス定義またはクラスを使う側の

コードの変更が必要• システムクラスの場合バイトコード変換禁

止• 例:プロキシクラスを元のクラスの

サブクラスとする実装法• 元のクラスが final クラスのときは使えない、

など

Page 14: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 14

Addistant のプロキシ実装方式

• クラス毎に異なる実装法で遠隔参照を実現• 実装法により、変更が必要なコードの範囲が異なる

• システムクラスの変更を避けるように実装法を選択

• アスペクト言語で宣言的に指定• 置き換え」、「名前変更」、「

サブクラス」、 複製」「 「

Page 15: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 15

「置き換え」手法(例:ユーザクラス)

• 対象クラスをプロキシに置き換え• 元のクラスを変更できる場合• ひとつの JVM 上には、プロキシかマスタ

のどちらか一方のみ

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widgetshow()

.. Show ..

.. Send ..

置き換える

Page 16: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 16

「名前変更」手法(例: java.awt.Window )

• コード中に現れた対象クラス名をプロキシクラスのものに変更• 元のクラスを変更できない場合• 使っている側のコードを変更する

Widget w = new Widget();w.show();

Widgetshow()

分散化

WidgetProxy w = new WidgetProxy();

WidgetProxyshow()

.. Show ..

.. Send ..

Page 17: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 17

「サブクラス」手法(例: java.util.Vector )

• 対象クラスのサブクラスとしてプロキシクラスを定義• 1つの JVM 上にプロキシとマスタを混在させたい場合

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widget w = new WidgetProxy();

WidgetProxyshow()

指示の場合によっては.. Send ..

.. Show ..

Page 18: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 18

「複製」手法(例: java.lang.String )

• プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡す• Shallow copy

• 変則版 - 「書き戻し複製」手法• 配列オブジェクトに

用いる byte[] buf = …;istream.read(buf);

Page 19: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 19

関連研究 - AOP

• Aspect Oriented Programming (AOP)• 絡み合うコードを分けて書くように、書ける

ようにする、プログラミングのパラダイム• 何を分けられるようにし、どのようにアス

ペクト言語を設計・実現するかが課題

• Javaベースの AOP 言語• D [Lopes97]

• AspectJ [Xerox Palo Alto 97-]

Page 20: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 20

D [Lopes97]

• 分散専用 AOP 言語• Java + 並列同期アスペクト + IDL アスペ

クト• Addistant は、

• Java + 分散配置アスペクト + プロキシ実装アスペクト

• バイトコードレベルのウィーバ(アスペクト合成器)

• アスペクト言語として相補的な役割

Page 21: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 21

AspectJ [Xerox Palo Alto 97-]

• Java を拡張した、汎用の AOP 言語• Addistant は分散専用

• 現在の AspectJ [Kiczales2001] には、 Addistant で達成した Separation of Concerns を直接実現する機能が不在• 記述力の欠如 - Addistant と同様の Separation of

Concerns を実現できない( Join-point のカバー不足)

• 再利用性の欠如 - ライブラリとして Addistant と同様の機能を提供できない ( Points-cut 語彙の不足)

Page 22: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 22

応用例:応答性能のよい遠隔表示

• X Window• ライブラリ・レベルで分散化

• 応答性能悪い

• 応答性能のよい遠隔表示のためには• プログラム全体を手で変更して分散化

• 速いが、開発に余分な工数が必要

ユーザプログラム

X Protocol

ユーザプログラム

GUI モジュール

Page 23: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 23

X Window

• Xlib ライブラリレベルで分散化• 低レベルな命令が大量に

ネットワークを飛び交う

線を書け

マウスが動いた

マウスボタン押された

マウスボタン離された

ユーザプログラム

Xlib

Page 24: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 24

適切なプログラム分割による応答性能のよい遠隔表示

• ユーザプログラムを変更• 応答性能のよい遠隔表示が可能

ユーザプログラム

内部ウィンドウ表示

ウィンドウ内でクリックあり

ORBライブラリ

ユーザプログラム

Page 25: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 25

分散 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>

Page 26: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 26

まとめ

• Addistant– 機能分散プログラム開発の支援ツール• アスペクト指向を導入し、分散配置コード

をまとめて簡潔に記述できるようにした• 実際に既存のプログラムに対して遠隔表示

機能を追加する実験をおこない、有用性を確認した

Page 27: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 27

今後の課題

• 現在の Addistant の実装は、2つのホスト上での分散に限られているが、この設計が3つ以上のホストにも対応できることを確認する

• 支援効果の定量的な測定のための測定基準を開発し、 Addistant を利用する場合の効果を予測しやすくする

• 分散サイクリック GC への対応

Page 28: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 28

応答性能の実験クリック – Window表示• クリックしてから内部ウインドウが完全に表示されるまで• スタートアップホス

ト• Sparc 440MHz

• GUI ホスト• PentiumII 500MHz

• ネットワーク• 10Base-T Half• 100Base-TX Full

Page 29: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 29

応答性能の実験クリック – Window表示• クリックしてから内部ウインドウが完全に表示されるまで• スタートアップホス

ト• Sparc 440MHz

• GUI ホスト• PentiumII 500MHz

• ネットワーク• 10Base-T Half• 100Base-TX Full

Page 30: Addistant: アスペクト指向の 分散プログラミング支援ツール

July 26, 2001 SWoPP 2001 PRO, Okinawa 30

応答性能の測定結果

• プログラム全体の変換による速度改善• 応答時間 (秒 ) (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