ユビキタスコンピューティング
Download
Report
Transcript ユビキタスコンピューティング
ユビキタスコンピューティングの
ための
ハンドオーバー機能付きRMIの実装
東京工業大学 千葉研究室
学部4年 須永 豊
1
ユビキタスコンピューティング
背景
シームレスなデバイス環境
- プラグアンドプレイ
周囲のコンピュータが動的に作業環境を構築
シームレスなネットワーク環境
- ハンドオーバー機能
通信を継続したままネットワークを切り替え
動的に切り替え
Office
McDonald etc…
2
ハンドオーバー機能とは
突然の通信断に対処
通信再開後、支障なく処理を再開
プログラムの移動
環境A
ケーブル引
き抜き
再開
環境B
現状ではそれぞれのアプリケーションに
個別に実装されている
3
HORMIの提案
ハンドオーバー機能付きRMI
ミドルウェアで実現
サーバオブジェクトの移動
環境A
RMI
RMI
ケーブル引き
抜き
メソッド呼び出しが完了するまでretry
通信再開後、近くのサーバへオブジェクトの移動
retry
環境B
4
HORMIの基本プロトコル
client
server
メソッド呼び出しのリクエスト
IDを送信
ID取得
IDを振る
メソッドのパラメータの送信
ローカルで
メソッド実行
結果の送信
結果を
保存する
5
メソッド呼び出しの retry 機能
失敗したら再呼び出し
通信断はSocketExceptionで検出
二重実行の防止
呼び出し毎に一意なIDを振り、結果を保存
再接続時の処理
メソッド実行済みの時 → 結果のみを再送
メソッド未実行の時 → メソッド呼び出しの再実行
6
通信断時のプロトコル
client
server
メソッド呼び出しのリクエスト
IDを送信
引数等の送信
メソッド呼び出し
の再実行の流れ
切断される
タイミング
結果の送信
7
不要になった実行結果の破棄
不要になった実行結果:
メソッド呼び出しが正常に終了している
そのメソッド呼び出しに対して、retryは行われない
client
server
IDを送信
結果を消してよい
メソッド呼出しのIDを
調べる
パラメータと一緒に
そのIDを送信
ID取得後、
不要な結果
を破棄
マルチスレッドを
考慮して決定
8
サーバオブジェクトのマイグレーション
通信再開後、指定したマシンにサーバプログラムを移動
オブジェクトの送信
オブジェクトの直列化
スレッド移送は行わな
い
必要なデータを
要求
切断
retry
9
HORMIの実装
Stub generator
ハンドオーバーのプロトコルを埋め込んだstub
コードを自動生成
skeltonはリフレクションを用い、すべてのstubに対応
Code translator
起動クラスのマスタクラスへの参照をstubクラス
へと置き換え
Public class Launcher {
void start() {
Sample s = new Sample();
..
}
}
Public class Launcher {
void start() {
SampleStub s
= new SampleStub();
}
}
10
実験
表1
1回あたりのメソッド呼び出しにかかる時間
(単位 msec)
JavaRMI、ハンドオーバー機能
を取り除いたHORMI、HORMIを
用いて比較実験を行った
実験環境
ハンドオー
バー無し
HORMI
HORMI
LINUX
2.19
4.67
40.4
WINDOWS
1.90
4.31
4.70
OS
表2
引数のサイズによるメソッド呼び出しにかかる時間
(単位 msec/回数)LINUXを使用
OS : LINUX(Red Hat 7.0)
JavaRMI
PENTIUMⅢ733MHZ
SDRAM 512MB
OS : WINDOWS XP
HomeEdition
PENTIUMⅢ700MHZ
SDRAM 256MB
JavaRMI
ハンドオー
バー無し
HORMI
HORMI
0 byte
2.19
4.67
40.4
1 kbyte
2.55
4.95
40.5
0.1 Mbyte
15.34
15.92
41.8
1 Mbyte
166
141
140
サイズ
11
まとめ
HORMI:ハンドオーバー機能付き RMI
メソッド呼び出しの retry 機能
突然の通信断に対処
サーバオブジェクトの移動
Stubの自動生成
課題
性能の向上
通信部の改良
入出力の問題
Javaプログラム以外のファイルも扱うプログラムに対する対処
使用しているファイルの移動も行う機能の追加
サーバの自動的な切り替え機能
ネットワークの状況を検知し、自動的にホストを選択する機能の追加
12