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