view paper/chapter2.tex @ 31:819eedb5189e

add poster
author sugi
date Sat, 21 Feb 2015 00:10:08 +0900
parents cefaf86da446
children
line wrap: on
line source

\chapter{Aliceを使った例題} \label{chapter:chapter2}
この章ではAliceを用いて作成されたアプリケーションを紹介する。
\section{水族館ゲーム}
Aliceで作成された始めての分散アプリケーションである。Aliceに分散アプリケーションを記述する能力があることを確かめるために作成された。
過去にFederated Linda \cite{linda} でも作成されている。UIとしてJava7から組み込まれたJavaFxが使用されている。

アプリケーションを起動すると参加したノード1台ごとに1つウインドウが表示される。表示されたウインドウの中にユーザが操作可能な魚が1匹表示されている。魚は画面端まで移動すると自分の画面上からは消え、隣のプレイヤーの画面端に表示される。


\begin{figure}[htbp]
\begin{center}
\includegraphics[width=90mm]{images/NodeToClient.pdf}
\end{center}
\caption{データの伝搬の様子}
\label{fig:NodeToClient}
\end{figure}

\subsubsection{処理の流れ}
図\ref{fig:NodeToClient}はデータの伝搬の様子をコラボレーションダイアグラムで示したものである。
\begin{enumerate}
\item ユーザーが魚を操作することで魚の座標のData SegmentであるfishDataが更新される。
\item \label{point:replyData} fishDataが魚のオブジェクトに座標をセットするためのCode Segment であるSetLocationにreplyされる。
\item SetLocationが実行され魚が移動する。
\item 他のノードに更新されたfishDataを送信するためのCode SegmentであるSendDataにfishDataがreplyされる。
\item SendDataに自分と接続されているノード一覧のData Segmentであるlistがreplyされる。

\item \label{point:sendData} SendDataはlistを参照してfishDataを送信する。

\item 各clientで\ref{point:replyData} から\ref{point:sendData} が実行され、fishPositionが全体で共有される。 
\end{enumerate}
\ref{point:sendData}ではlistを参照して、利用可能なRemote Data SegmentにData Segmentをputしているが、この利用可能なRemote Data Segmentの中にはData Segmentを送信してきたものが含まれている。全てのRemote Data Segmentに送信してしまうと同じData Segmentを永遠にやりとりすることになる。しかし、Data Segmentは送信元のメタ情報が付加されており、このメタ情報を利用して送信元のRemote Data Segmentに対してfishDataを送り返すことを防いでいる。
\begin{figure}[htbp]
\begin{center}
\includegraphics[width=160mm]{images/aquarium.pdf}
\end{center}
\caption{JavaFx 水族館ゲーム}
\label{fig:aquarium}
\end{figure}

今回の研究で再接続の際の挙動をMeta Computationにより変更することができる。水族館の例題ではノードが再接続してきた場合に前回の位置から始められるように挙動が変更されている。



\section{bitonic sort}
bitnic sortは並列ソートであり、Aliceがマルチコアに対応していることを確認するため実装した。

\begin{figure}[htbp]
\begin{center}
\includegraphics{images/sortflow.pdf}
\end{center}
\caption[width=100mm]{sort flow}
\label{fig:sortflow}
\end{figure}

\subsubsection{処理の流れ}
指定された数の乱数を生成し、Sortを行う例題である。
また、図\ref{fig:bitonicSort}はSortされるまでの流れをコラボレーションダイアグラムで示したものである。
\begin{enumerate}
\item SetTask (Code Segment)が乱数列を分割してarray1とarray2にputする。
\item \label {fig:start}replyされたData SegmentをSort (Code Segment)で昇順に整列させる。
\item \label {fig:end}整列された配列を分割する。上半分をarray1-F、下半分をarray1-Bにputする。
\item 分割した各数列(array2)に対しても同様に \ref{fig:start}と\ref{fig:end}を行う。
\item \label {fig:start2}replyされた2つのData Segment(array1-B、array2-F)を合体させ、整列させる。
\item 整列された配列の上半分をarray1-B、下半分をarray2-Fにputする。
\item \label {fig:start1}replyされた2つのData Segment(array1-F、array1-B)を合体させ、整列させる。
\item \label {fig:end1}整列された配列の上半分をarray1-F、下半分をarray1-Bにputする。
\item \label {fig:end2}array2に対しても操作 \ref {fig:start1} と\ref {fig:end1} を行う。
\item \ref {fig:start2} - \ref {fig:end2} を繰り返し行うことで全体がSortされる。
\end{enumerate}

\begin{figure}[htbp]
\begin{center}
\includegraphics{images/bitonicsort.pdf}
\end{center}
\caption{Aliceにおけるbitonic sortの動き}
\label{fig:bitonicSort}
\end{figure}

\section{分散データベースJungle}
JungleはスケーラビリティのあるCMSの開発を目指して当研究室で開発されている非破壊的木構造データベースである。
非破壊的にデータを編集を行なうため、過去の全てのデータを参照することができる。また、編集の際にロックが不要であるため、破壊的木構造に比べスケールアウトがし易い。
Jungleはデータの編集の際にlogが残すため、障害が発生してもlogを読み込ませることにより前回の状態を再現することができる。このlogをハードディスクに書き出すことにより永続性を持たせている。

この木構造データベースを複数接続することにより、可用性と分断耐性をもつ分散データベースJungleとなる。
Aliceはトポロジーの形成とデータアクセスへの機構を提供している。


\section{AliceVNC} \label{section:AliceVNC}
AliceVNCは、当研究室で開発を行っているTreeVNCをAliceを用いて実装された、授業向け画面共有システムである。
Aliceが実用的なアプリケーションを記述する能力をもつことを確認するために作成した。

授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちてしまう(図\ref{fig:vnc})。この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図\ref{fig:treestructure})。TreeVNCは、TightVNCのソースコードを利用して開発されている。

\begin{figure}[htbp]
 \begin{minipage}{0.5\hsize}
  \begin{center}
   \includegraphics[width=80mm]{images/vnc.pdf}
  \end{center}
  \caption{VNCの構造}
  \label{fig:vnc}
 \end{minipage}
 \begin{minipage}{0.5\hsize}
 \begin{center}
  \includegraphics[width=80mm]{images/treestructure.pdf}
 \end{center}
  \caption{TreeVNC, AliceVNCの構造}
  \label{fig:treestructure}
 \end{minipage}
\end{figure}