JAVAアプレットによる 分散処理の実現

JAVAアプレットによる
分散処理の実現
福盛 秀雄, 浜中 征志郎, 菅原 健一,
吉川 潤, 中山 周平
早稲田大学 村岡研究室
発表の概要
•
•
•
•
•
はじめに
システムの概要
実行例
今後の展開
まとめ
はじめに
―本作品の動機と目標―
目標:世界中に存在する計算機を使った
並列分散処理
動機:
• ネットワーク接続されているPCの増加
• これらPCの計算能力が生かされているかは疑問
JAVA(アプレット)の特徴である
– アーキテクチャ非依存性
– ネットワーク適用性
を生かして大規模な問題を分散計算させることがで
きないか
システムの概要
• サーバはJAVA Program、クライアントはJAVA Appletで
実装
• Crowd Computingに基づく計算
依存のない小さな
計算単位の集合
クライアント
クライアント
クライアント
サーバ
計算の実行
resultcode = is.readByte();
os.writeByte(resultcode);
3. ソケット接続を確保し、
= is.readInt();
os.writeInt(mctrl.startline);
1.startline
Httpによる
endline
= is.readInt();
os.writeInt(mctrl.endline);
public
class Mserv {
public
計算クライアントになる
Mclient extends Applet
minfo.ix
=class
is.readDouble();
該当ページへのアクセス
……... == 1) {
implements
Runnable {
if (resultcode
.......
minfo.iy
= is.readDouble();
reqtype
=
is.readInt();
while (listening)
..... send_msarea(msarea,
MSubArea
msarea {=
minfo.size
= is.readDouble(); os);
switch
(reqtype)
{
Socket
clientSocket
=
null;
public
void
run() {
new MSubArea(startline, endline);
.......
mctrl.startline
= is.readInt();
2.サーバから
try {case 1:
while (execflag == true) {
if (recv_msarea(msarea, is) == 0) {
is.close();
mctrl.endline
= is.readInt();
.....
clientSocket
= serverSocket.accept();
try {
Applet送信
for (int
i = 0; i < endline - startline; i++) {
os.close();
} ……..
String hostname =
os.writeDouble(minfo.ix);
marea.area[i
+
startline]
=
......
// Mandelblot
calculation
new MservThread(clientSocket,
minfo,
getCodeBase().getHost();
os.writeDouble(minfo.iy);
msarea.subarea[i]; marea, mctrl).start();
clientSocket =
.....
os.writeDouble(minfo.size);
}
new Socket(hostname, PORT);
mctrl.Dflag[i
+ startline] = 1;
os.writeInt(startline);
4.
サーバから
......
} …….
5.担当部分の
os.writeInt(endline);
class
MservThread
extends
Thread
{
}
初期データを送信
}
計算を実行
.... run() {
public void
........
...... }
}
Client(s)
}
}
Server
6. 計算結果を受け取る
マンデルブロー集合の計算例における
実行の流れ
• 計算対象を小領域に分割
– マンデルブロー集合の計算の場合、縦5ライン
単位での分割を行なう
クライアントへの計算の分配
• 複数のクライアントの同時処理が前提
• クライアント数は常に変動
計算済
計算中
次の計算予定部
計算実行中にクライアント終了、その他コネクションの切断
現在はネットワークの例外処理で対処
実行例
1. マンデルブロー集合の計算
2. ナップザック問題
今後の展開
• 各計算機の能力に合わせた負荷分散
• 安定性の強化
• 適用アプリケーションの拡大
– レイトレーシングなどに対しては比較的容易
に対応が可能
– 探索問題について可能性を探る
まとめ
• ネットワーク上に存在する不特定多数の計算機
を対象とした分散計算処理の可能性について述
べた
• これによりJAVAとJAVA appletの持つ特徴を生か
した、世界中の計算機を利用する並列分散処理
の可能性がひらけるものと考える
負荷分散の問題(その2)
• 本格的な解決
– 計算機ごとにパフォーマンスを計測、それに基
づいて負荷分配を実施
• 計算時間の計測
• ネットワークパフォーマンスの計測
今後の展開 ―― 計算機資源の確保
• 一般の関心を引くページ/プロジェクトとの組み合
わせ
– 例: NASAの“Mars Pathfinder”ページ
• 一日あたりで数百万単位のアクセス
• 観測データのレンダリング処理などは関心を引く?
• 他のアプリケーションとの並立
– 例:「JAVA将棋」(早稲田大学村岡研究室)
• 一日あたり2000件のアクセス
• 一回の接続時間は20分程度
• アイドル時間が長いアプリケーション
• その他
– 何らかの対価を払う?
計算機資源の確保
• 理論上は全世界のネットワーク接続された
計算機を利用することが可能
• 一方で極端な場合計算機資源が確保でき
ない場合すら存在する
計算機資源をどう確保するか→当面の課題
ネットワークの問題
• HTTPアクセスの可能なすべての計算機を対象
とすることを前提とする
• 現在ネットワークの性能には大きなばらつきが認
められる
• 適用可能なアプリケーションは現状では限定
• 将来的にはネットワーク状況の改善により適用
可能なアプリケーションは増加