# HG changeset patch # User Shinji KONO # Date 1361166256 -32400 # Node ID 54a58a13bb11021a59a96144a20dbe6cb65063ae # Parent 52dff3fd4f40617b19ad3e4d42dbbc1338afe307 fix diff -r 52dff3fd4f40 -r 54a58a13bb11 Draft/Draft.tex --- a/Draft/Draft.tex Mon Feb 18 02:48:08 2013 +0900 +++ b/Draft/Draft.tex Mon Feb 18 14:44:16 2013 +0900 @@ -53,40 +53,45 @@ \section{研究背景と目的} +インターネット上でのサービスには信頼性とスケーラビリティの両方が要求される。 本研究室ではデータをData Segment 、タスクをCode Segmentという単位に分割して記述する分散ネットフレームワークAlice\cite{1}の開発を行なっている。 - - -AliceはJavaで実装されており、ユーザーがAliceを利用するためにはCode Segmentというclassを継承するだけでよい。記述が大変であるノード間のData Segmentの送受信はAPIが提供されているのでユーザーが記述をする必要はない。また、TopologyManagerというトポロジーの作成をサポートする機能が含まれているためユーザーはトポロジー完成後の記述を行うだけで良い。 +AliceはJavaで実装されており、 +% ユーザーがAliceを利用するためにはCode Segmentというclassを継承するだけでよい。 +% 記述が大変である こういう口語的なものは論文では使わない +ノード間のData Segmentの送受信APIが提供されている。 +% のでユーザーが記述をする必要はない。 +また、Blade また PCクラスタ上で分散プログラムのシミューレションするために、オーバレイネットワークを自動的に構成する +TopologyManagerという機能が搭載されている。 +% というトポロジーの作成をサポートする機能が含まれているためユーザーはトポロジー完成後の記述を行うだけで良い。 +% しかし、提供されているAPIが適当なものであるか、必要な機能が備わっているかどうかは、ソースコード上では確認できず、実際にプログラミングを行うことでしか見えてこない部分である。 - -しかし、提供されているAPIが適当なものであるか、必要な機能が備わっているかどうかは、ソースコード上では確認できず、実際にプログラミングを行うことでしか見えてこない部分である。 +本研究はAliceを用いてプログラムを作成することで、Aliceが抱える問題点、APIの見直しを行った。 +まず、分散プログラムを書くためのAPIがちゃんとそろっているかどうかを例題を作成することにより確認した。 +スケーラビリティがあるかどうかを調べるためには、Blade 上でのシミューレションを行うことが必要である。 +実際にシミューレションを行い、応答時間の測定を行った。 +% そして、Aliceの改良を行い、 +% 誰でも簡単に +% 分散プログラムを書けるようなフレームワークを作成するのが目的である。 - -本研究はAliceを用いてプログラムを作成することで、Aliceが抱える問題点、APIの見直しを行った。そして、Aliceの改良を行い、誰でも簡単に分散プログラムを書けるようなフレームワークを作成するのが目的である。 \section{Alice} Aliceを使う際に必要なData SegmentとCode Segmentについて説明を行う。 \subsection{DataSegment} AliceではData Segmentをデータベースとして利用しており、以下のDataSegment API を用いることでData Segmentにデータを追加、削除を適宜行うことができる。 \begin{itemize} -\item void put(String key, Value val) -\item void update(String key, Value val) -\item void peek(Receiver receiver, String key, int id) -\item void take(Receiver receiver, String key, int id) +\item \verb+void put(String key, Value val)+ +\item \verb+void update(String key, Value val)+ +\item \verb+void peek(Receiver receiver, String key)+ +\item \verb+void take(Receiver receiver, String key)+ \end{itemize} -"put" はデータを追加するための API である。 - - -"update" はデータを置き換えるための API である。 キューの先頭を置き換える特急メッセージのように動作する。 - +\verb+put はデータを追加するための API である。 +% キューというのが何か説明する +\verb+update+ はデータを置き換えるための API である。 キューの先頭を置き換える特急メッセージのように動作する。 +\verb+peek+ はデータを調べるためのAPIである。目的のData Segment がなければ、Code Segment の待ち合わせ (Blocking) が起きる。 +\verb+take+ もデータを読み込むための API である。読み込まれたデータは Key Value Store のキューから取り除かれる -"peek" はデータを調べるためのAPIである。目的のData Segment がなければ、Code Segment の待ち合わせ (Blocking) が起きる。 - - - -"take" もデータを読み込むための API である。読み込まれたデータは Key Value Store のキューから取り除かれる \subsection{CodeSegment} CodeSegmentはタスクを分割したものであり、Code SegmentはInput Data SegmentとOutput Data Segmentを持つ。CodeSegmentに依存するData Segmentを記述することにより、(図 \ref{fig:dsandcs})のように実行される順番が一意に決まる。Code SegmentはInput Data Segmentが揃い次第Code Segment Managerに送られ順次実行されていく。またCode SegmentにInput Data Segmentがない場合はexecuteにより実行させる。 @@ -99,6 +104,10 @@ \end{figure} \section{水族館ゲーム} +% 魚の位置が共有されている +% 複数のディスプレイに異なる視点で表示される +% 魚とディスプレイが増えてもサービスを維持できることを確認するため +% このままではスケールしない Aliceを用いて水族館ゲームの作成を行った。水族館ゲームとは複数のclientのディスプレイを並べて使用する。アプリケーションを実行するとウインドウが表示され、複数の魚がウインドウの中を泳ぎ始める。魚は画面の端まで移動すると自分の画面上からは消え、隣のプレイヤーの画面の端から出てくるものである。 @@ -113,15 +122,18 @@ \end{center} \end{figure} -\section{注意すべき記述} -Aliceを記述する際に、注意すべき記述がある。(ソースコード \ref{fig:NullPointerException}) -Code Segmentを作成する際に、コンストラクト内でidsに対してsetKeyを行った後に、処理を記述しても実行されない可能性がある。 -Code Segmentは内部で必要なData Segmentの数を数えている。Data Segmentが取得されるたびにこの値がデクリメントされていき、0になった時にCode Segmentがactiveになる。値が0であるかを確認するのは別スレッドであるため、setKey以降に処理を記述してもThread Poolに送られてしまい、NullPointerException等のエラーが起こる可能性がある。 -\begin{table}[htbp] -\lstinputlisting[label=fig:NullPointerException, caption=実行するとNullPointerExceptionを起こす]{source/NullPointerException.java} -\end{table} +% 以下のようなことを書かないで、Code segment/Data segment が Alice で、どう表現されるかを書く +%\section{注意すべき記述} +%Aliceを記述する際に、注意すべき記述がある。(ソースコード \ref{fig:NullPointerException}) +%Code Segmentを作成する際に、コンストラクト内でidsに対してsetKeyを行った後に、処理を記述しても実行されない可能性がある。 +%Code Segmentは内部で必要なData Segmentの数を数えている。Data Segmentが取得されるたびにこの値がデクリメントされていき、0になった時にCode Segmentがactiveになる。値が0であるかを確認するのは別スレッドであるため、setKey以降に処理を記述してもThread Poolに送られてしまい、NullPointerException等のエラーが起こる可能性がある。 +% +%\begin{table}[htbp] +%\lstinputlisting[label=fig:NullPointerException, caption=実行するとNullPointerExceptionを起こす]{source/NullPointerException.java} +%\end{table} +% 今後の課題ではなくて、今のAPIの評価を行う \section{今後の課題} 今回の実装は、Java により Code Segment と Data Segment に必要な API を洗い出すためのものであった。この実装でもいくつかの問題が明らかになっている。 \subsection{API}