ソケットの拡張による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 に組み込んで確認 課題 再接続時に認証をする必要がある 再接続してきたクライアントが今まで通信していたクライ アントと同一であることを確かめるため
© Copyright 2024 ExpyDoc