並列分散ソフトウェア
電子・情報工学系
新城 靖
<yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/pdsoft-2001/2002-02-21
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/sie/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
参考文献
Marko Boger: Java in Distributed Systems: Concurrency, Distribution and Persistence, John Wiley & Sons, 2001. ISBN: 0471498386
http://www.dpunkt.de/produkte/dejay
逆に、表面的にアクセスカウンタができたとしても、内部的に JavaSpaces を 使っていなければ、不可。
複数のアクセスカウンタが、きちんと区別されて動作することを示しなさい。 URL は、単なるデータではなくて、identity を示すためのものなので、 take/read する時には、null にしてはいけない。
1999年に、サン・マイクロシステムズ社のビル・ジョイらによって開発され発 表された。
Jini の目標は、ネットワークで Plug & Play を実現すること。 機器をネットワークに接続しただけで、特別な設定 をしなくてもすぐに利用可能になること。
目標
JavaSpaces は、内部的に Jini のルックアップ・サービスの実現で使われて いる。JavaSpaces も、Jini でアクセス可能なサービスの1つと考えることも できる。
Microsoft の、Jini に対抗した技術。
サービスの登録と検索
ルックアップ・サービス自身も、最初から知られている必要はない。 ネットワーク上で自動的に探される。 Discovery と Join。
この仕組みが、leasing。Java のオブジェクトが lease。
リース期間は、延長することができる。 延長されなかった lease は、ルックアップ・サービスから削除される。 登録されているサービスを明示的に削除する仕組みは、存在しない。
サービスが削除された時には、 分散型イベント配送サービスにより 関係している所に知らされる。
トランザクションのインタフェースは定められているが、 具体的な実現は各サービスにまかされている。
サービスの提供者と利用者の間は、最終的にはに RMI で接続される。
ServiceIDLister インタフェースを implements する。
package com.sun.jini.lookup;
public interface ServiceIDListener extends java.util.EventListener {
void serviceIDNotify(net.jini.core.lookup.ServiceID serviceID);
}
図
Discovery の実現方法
Ball.java
public JoinManager(Object obj, Entry[] attrSets,
ServiceIDListener callback,
LeaseRenewalManager leaseMgr)
throws IOException
public JoinManager(Object obj, Entry[] attrSets, String[] groups,
LookupLocator[] locators,
ServiceIDListener callback,
LeaseRenewalManager leaseMgr )
throws IOException
BallStarter.java
public ServiceTemplate(ServiceID serviceID,
Class[] serviceTypes,
Entry[] attrSetTemplates)
サービス(オブジェクト)の探し方
Bat.java
信頼性が低いネットワークと、どう戦う方法の1つ。
lease には、期限がある。
期限切れ時の処理
期限の長さは、交渉可能。 期限が短い(1分以下、数秒)というのは、あまり想定されていない。
リースの利点
public interface Lease {
long FOREVER = Long.MAX_VALUE;
...
long getExpiration();
void renew(long duration)
throws LeaseDeniedException, UnknownLeaseException, RemoteException;
void cancel() throws UnknownLeaseException, RemoteException;
...
}
getExpiration() で、リースの残り時間がわかる。ミリ秒単位。
renew() で延長する。 延長できない時には、LeaseDeniedException が変えされる。
もう使わなくなった時には、cancel() できる。 期限切れと同じことになる。
プログラミング言語は、ネットワークの存在や通信をさまざまな度合いで隠し ている。
問題:
ネットワークの機能はある。
利用者は、常にどの計算機を使っているのかを意識する必要がある。
コマンド
分散型オペレーティング・システム
利用者は、仮想的な1台の計算機を使っているように感じ、計算機と計算機の 境界線が見えなくなる。分散透明性(network transparency)が実現されてい る。
目標
注意: 負荷分散の分散(load sharing/balancing)とこの講義のタイトルの分散 (distributed)は意味が違う。
Emerald の目標。
メソッド呼出しの引数も参照で渡される。オブジェクトの場所が違うと、重た い。コピーの方が速い。
分散の難しい問題は、解決されない。
例:
分散の難しい問題は、まだ汎用的に解ける技術はない。 汎用性がないと、プログラミング言語には採り入れにくい。