view yuu-preliminary.tex @ 1:2f3a29aba58f

update
author Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
date Fri, 18 Nov 2011 04:01:14 +0900
parents 16380f303b92
children 9a3faec1f0be
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.eps}}琉球大学主催 工学部情報工学科 卒業研究発表会}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{VNCを用いた授業用画面共有システムの設計と実装}
\author{学籍番号:085734D 氏名:谷成雄 指導教員:河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{はじめに}
普段授業を行う際、プロジェクタを使用して授業を進めることが多い。
しかし、後ろの席から見えにくいなどの不便を感じることがよくある。
授業を受けている生徒の手元にパソコンがあるならば、そこに先生の画面を表示して授業をすすめることが出来れば、
後ろの席に座っていても見えづらいという問題は解消される。

VNCを用いることで、先生の画面を生徒の手元の画面に表示することができる。
しかし、多人数の生徒が先生のパソコンに同時に接続してしまうと処理性のが落ちて授業の進行に画面がついていかなくなってしまう。
この問題は一つのコンピュータ多人数が同時につながるときに起こる問題である。


そこで、本研究では多人数で画面が共有できるようにクライアントをツリー構造に
接続させ上から順番にデータを流していくという方法で画面を共有するシステム(TreeVNC)の設計と実装を行う。


\section{VNCについて}
VNC(Virtuual Network Computing)は、RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトである。
VNCはサーバ側とクライアント(ビューア)側に分かれていて、サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能にする。
\subsection{RFBプロトコル}
RFB (remote frame buffer) プロトコルは、GUI操作をリモートアクセスで行うためのプロトコルである。
画面の描画の更新は画面の差分が発生した部分を矩形毎で送り描画される。
また、画面の描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるシンプルなプロトコルである。


\section{TreeVNCの設計方針}
まず、多人数が参加している授業でVNCを使う場合に起こる問題は、前でも述べたように、
一つのコンピュータに多人数が繋がり、処理性能が大幅に落ちてしまうところが問題である。
この問題を解決する為に、クライアント同士を接続させ、画面描画のデータを受け取った
クライアントが次のクライアントにデータを流すという方法を考えた。
画面共有を行いたいクライアントが一種のVNCサーバ自体にもなる。
また、クライアント同士の接続はツリー構造で行うことで管理がしやすくなると考えた。
クライアント同士の接続の管理はツリーの一番上にいるPC(Top)で行い、
このTopだけがVNCサーバへ接続を行うようにする。

今回作成したTreeVNCは、上記の実装でツリー状にクライアントを接続していくように実装を行った。
画面の共有だけを行うように実装した。


\section{先行事例}
Vncサーバへの負荷を軽減する先行事例としてはVnc Reflectorがある。

\subsection{VNC Reflector}
Vnc Reflectorは、Vncサーバとクライアントとの間に入り、Vncサーバとの通信を代わりに行うプログラムである。
クライアントはVnc Reflectorへ接続するので、Vncサーバとの接続はVnc Reflectorのみとなり、Vncサーバ側の負荷を減らすことができる。

\section{TreeVNCの実装}
TreeVNCはTightVNCのjava版のビューアを元に作成を行った。TightVNCはフリーのVNC用ソフトである。
2011年8月9日現在とC++で作成されたVNC サーバ用とWindows版、それとJava版のビューアが公開されている。

\subsection{Treeの構成}
今回は、ホストに対しクライアントがツリー状に繋がっていくように実装した。ツリーの構成は以下の手順で行う。
 \begin{enumerate}
  \item クライアントが接続する際、ホストに接続をしているプロキシ(今後このプロキシのことをTopと記述する)に接続する。
 \item Topはクライアントにどこに接続すれば良いかを知らせる。(このときに親の番号と自分の番号それからリーダーであるかどうかを一緒に知らせる)
 \item クライアントはTopから指定されたノードに接続を行う。
 \end{enumerate}


\subsection{Treeの再構成}
今回の実装はクライアントがツリー状に繋がっているので、親ノードが落ちると子ノードも一緒に落ちてしまう。\\
そこで、ツリーの再構成が必要になる。
\begin{enumerate}
  \item 親ノードが落ちた際に、子ノードの中で一番若い番号の子ノードがTopに対して自分の親ノードが落ちたこ\
とを報告する。(親ノードの番号を知らせる)
 \item Topは木の番号が一番大きいノードに対して1で報告を受けた親ノードの代わりになるように命令を出す。$\
\\$
 \item 親ノードがいなくなった子ノードたちはTopに対して、2で新しく繋がった親ノードのIPアドレスを教えて\\
もらいそのアドレスに対して接続をおこなう。
上記の構成の場合、一つのノードが落ちた場合に再接続を行うノードは2分木の場合3ノードである。

図1、図2が再接続の様子である。
 \end{enumerate}


\begin{figure}[!htbp]
\begin{center}
\scalebox{0.80}{\includegraphics{pic/reconnection1.eps}}
\end{center}
\caption{子ノードの番号が若いほう(3番)がTopに報告してツリーの番号が一番大きいノードに対して報告を行う。\
(TはTop)}
\label{figure:splaying}
\end{figure}

\begin{figure}[!htbp]
\begin{center}
\scalebox{0.80}{\includegraphics{pic/reconnection2.eps}}
\end{center}
\caption{番号の一番大きいノードが報告を受け指定された場所(1番)に接続を行う。(TはTop)}
\label{figure:splaying}
\end{figure}

\section{評価}
TreeVNCの実装を行い、Vnc Reflectorとの比較を行った。
テスト環境はBlade サーバ上にVMを48台用意し、Blade サーバの外にTreeVNCとVnc Reflectorを
起動させたPCを置き、VM48台にアクセスさせて実験を行った。

\subsection{Vnc Reflectorとの比較結果}
一極集中型のVnc Reflectorは、スループットが20メガから5メガまで落ちた。
一方TreeVNCの方はスループットを20メガのままをキープすることが確認できた。
これは、1本の通信帯へ48台がアクセスするVnc Reflectorと違い、クライアント同士が通信を行う為である。

\subsection{TreeVNCの利点と欠点}

クライアント同士がデータのやり取りをするのでVnc サーバへ負荷が少ない。

一極集中型ではないので、多人数で使う際に画面表示のストレスが少ない。

Top自身がビューアを持つこともできる。

みんなの通信速度上がる分、スイッチへの負荷が高い。


\section{まとめと今後の課題}
本研究では、VNCとツリー構造を用いて画面共有システムを開発した。結果スループットを落とすことなく48台で接続を行うことができた。

今回、仮想マシーン上でのテストは行ったが、実際の授業などでのテストは行なっていないので実際の授業で使えるのかのテストを行いたい。

クライアントのUIの部分ができていないので、UIを充実させ使いやすいシステムを設計したい。

\thispagestyle{fancy}
\begin{thebibliography}{9}

\bibitem{VncReflector}{TightVNC: VNC-Compatible Free Remote Control / Remote Desktop Software}: 
http://vnc-reflector.sourceforge.net/
\bibitem{TightVNC}{TightVNC: VNC-Compatible Free Remote Control / Remote Desktop Software}: 
http://www.tightvnc.com/

\bibitem{VNC}{Tristan Richardson, Quentin Stafford-fraser, Kenneth R. Wood, Kenneth R. Wood, Andy Hopper}:
Virtual Network Computing (1998): Virtual Network Computing (1998)

\bibitem{ZLIB}{P. Deutsch, J-L. Gailly }:
ZLIB Compressed Data Format Specification version 3.3

\end{thebibliography}
\end{document}