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