モバイルコンピューティング

ソケットの拡張によるJava用分散ミ
ドルウエアの高信頼化
東京工業大学 理学部
千葉研究室
00-22059 松田 麻里
モバイル環境における分散アプリケーション
の利用
移動しながらノートPCを利用するユーザ
リモートホスト上のエディタの画面を、手元のクライ
アントに表示して利用
研究室
ケーブル
引き抜き
McDonald
再接続
自宅
移
動
移動するとエディタが落ちる
ケーブルを抜くと
短時間の切断はTCP/IPが対応
長時間の切断ではTCPコネクションが失われる
ワイヤレス(無線)で通信をしていても
場所の移動によってIPアドレスが変わるかもしれな
い
IPアドレスはサブネットごとに割り当てられている
TCPコネクションが失われる
分散ミドルウェアを高信頼化するソケットの
提案
ミドルウエアの下位に位置するソケットで高信
頼化を行う(高信頼ソケット)
様々な分散ミドルウェアを容易に高信頼化す
ることが可能
通常のソケットを高信頼ソケットに置き換えるだけ
アプリケーション
ミドルウエア
ソケットAPI
OS、ハードウエア
エディタ, メッセンジャー、ビデオ会議 など
Java RMI, X Window Systemなど
ここを高信頼化することで
上位レイヤも高信頼化
ソケットの高信頼化
コネクションの自動的な回復
コネクションの情報を保存
送受信バッファの内容、IPアドレス、ポート番号、
ネットワークに再接続したら新しいコネクションを張る
切断時に失われたデータの回復
ネットワーク切断時には送信中のデータが失われ
てしまうことがある
失われたデータを再送し、通信が続きから再開で
きるようにする
切断したコネクションの回復
Client
Server
ネットワークを切断
専用のポート番号に再接続
例外を検出
再接続要求の受付
再接続成功
受信したバイト数を送信
相手が受信したバイト
数と送信したバイト数
を比較
データの再送
相手が受信したバイト
数と送信したバイト数
を比較
この後通信が続きから再開できる
高信頼ソケットを使用した場合のI/O処理
Host A
Host B
Write N bytes
Read N bytes
コピー
アプリケーション・
ミドルウエア
高信頼ソケット
データ保存用バッファ
受信カウンタをN増やす
送信カウンタをN増やす
receive buffer
send buffer
カーネル
Network
• データ保存用バッファの大きさはsend bufferとreceive bufferを合わせた大きさ
高信頼ソケットの実装
I/O処理はjava.nio.Channelsの
SocketChannelを使う
セレクタを利用してI/O処理と再接続要求の受付を
同時に行う
再接続専用のスレッドは必要ない
制御用コネクションは張らない
データ用のコネクションで制御情報を送受信する
余分なリソースは使わない
実験: Java RMI を高信頼化
Java RMI
広く使われている分散ミドルウェア
開発した高信頼ソケットを利用
RMIソケットファクトリを使って組み込み
実験内容
このJava RMIを使った音楽再生アプリケーション
で再接続時に音楽が再開できることを確認
サーバ
クライアント
再生
音楽デー
スループットの測定
8Mのデータを8bytesから16KBまでの異な
るブロックサイズで送信した
送信データを保存するために遅くなる
18
16
実験環境
14
12
10
Socket
高信頼ソケット
8
6
4
2
0
8bytes
1KB
スループット(Mb/s)
16KB
ネットワーク:100Mbps
サーバ: Solaris 9 4/03
• UltraSPARC 900MHz * 4
• SDRAM 16GB
クライアント: Windows XP
Professional
• Pentium 4 1.92GHz
• SDRAM 384MB
遅延時間の測定
8bytesから1KBまでの異なるブロックサイズ
で送受信をおこなった
0.5msec程度のオーバーヘッドがある
3.5
実験環境
3
2.5
2
Socket
高信頼ソケット
1.5
1
0.5
0
8bytes
128bytes
1KB
遅延時間(msec)
ネットワーク:100Mbps
サーバ: Solaris 9 4/03
• UltraSPARC 900MHz * 4
• SDRAM 16GB
クライアント: Windows XP
Professional
• Pentium 4 1.92GHz
• SDRAM 384MB
まとめ
高信頼ソケットの開発
ネットワーク再接続時にコネクションの回復とデー
タの再送を行う
多数の分散ミドルウェアを容易に高信頼化できる
実際に Java RMI に組み込んで確認
課題
再接続時に認証をする必要がある
再接続してきたクライアントが今まで通信していたクライ
アントと同一であることを確かめるため