6
|
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
|
|
2 \usepackage[papersize={210truemm,297truemm},
|
|
3 top=3truecm,bottom=3truecm,left=2truecm,right=2truecm]{geometry}
|
|
4 \usepackage{setspace}
|
|
5 \usepackage[dvipdfm]{graphicx}
|
|
6 \usepackage{listings,jlisting}
|
|
7 \usepackage{picins}
|
|
8 \usepackage{fancyhdr}
|
|
9 \pagestyle{fancy}
|
|
10 \lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究発表予稿}
|
|
11 \rhead{}
|
|
12 \cfoot{}
|
|
13
|
|
14 \lstset{%
|
|
15 frame=single,
|
|
16 stringstyle={\ttfamily},
|
|
17 commentstyle={\ttfamily},
|
|
18 identifierstyle={\ttfamily},
|
|
19 keywordstyle={\ttfamily},
|
|
20 basicstyle={\ttfamily},
|
|
21 breaklines=true,
|
|
22 xleftmargin=0zw,
|
|
23 xrightmargin=0zw,
|
|
24 framerule=.2pt,
|
|
25 columns=[l]{fullflexible},
|
|
26 numbers=left,
|
|
27 stepnumber=1,
|
|
28 numberstyle={\scriptsize},
|
|
29 numbersep=1em,
|
|
30 language={Java},
|
|
31 tabsize=4,
|
|
32 lineskip=-0.5zw,
|
|
33 morecomment={[s][]{/**}{*/}},
|
|
34 }
|
|
35
|
|
36
|
|
37 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
|
|
38 \setlength{\headheight}{0mm}
|
|
39 \setlength{\headsep}{5mm}
|
|
40 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
|
|
41 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{11mm}}
|
|
42 \setlength{\textwidth}{181mm}
|
|
43 \setlength{\textheight}{261mm}
|
|
44 \setlength{\footskip}{0mm}
|
|
45 \pagestyle{empty}
|
|
46
|
|
47 \begin{document}
|
|
48 \title{分散ネットフレームワーク Aliceにおける例題の作成}
|
|
49 \author{学籍番号 095732B 氏名 杉本優{}{} 指導教員 : 河野真治}
|
|
50 \date{}
|
|
51 \maketitle
|
|
52 \thispagestyle{fancy}
|
|
53
|
|
54
|
|
55 \section{研究背景と目的}
|
7
|
56 インターネット上でのサービスには信頼性とスケーラビリティの両方が要求される。
|
6
|
57 本研究室ではデータをData Segment 、タスクをCode Segmentという単位に分割して記述する分散ネットフレームワークAlice\cite{1}の開発を行なっている。
|
7
|
58 AliceはJavaで実装されており、
|
|
59 % ユーザーがAliceを利用するためにはCode Segmentというclassを継承するだけでよい。
|
|
60 % 記述が大変である こういう口語的なものは論文では使わない
|
|
61 ノード間のData Segmentの送受信APIが提供されている。
|
|
62 % のでユーザーが記述をする必要はない。
|
|
63 また、Blade また PCクラスタ上で分散プログラムのシミューレションするために、オーバレイネットワークを自動的に構成する
|
|
64 TopologyManagerという機能が搭載されている。
|
|
65 % というトポロジーの作成をサポートする機能が含まれているためユーザーはトポロジー完成後の記述を行うだけで良い。
|
|
66 % しかし、提供されているAPIが適当なものであるか、必要な機能が備わっているかどうかは、ソースコード上では確認できず、実際にプログラミングを行うことでしか見えてこない部分である。
|
6
|
67
|
7
|
68 本研究はAliceを用いてプログラムを作成することで、Aliceが抱える問題点、APIの見直しを行った。
|
|
69 まず、分散プログラムを書くためのAPIがちゃんとそろっているかどうかを例題を作成することにより確認した。
|
|
70 スケーラビリティがあるかどうかを調べるためには、Blade 上でのシミューレションを行うことが必要である。
|
|
71 実際にシミューレションを行い、応答時間の測定を行った。
|
|
72 % そして、Aliceの改良を行い、
|
|
73 % 誰でも簡単に
|
|
74 % 分散プログラムを書けるようなフレームワークを作成するのが目的である。
|
6
|
75
|
|
76 \section{Alice}
|
|
77 Aliceを使う際に必要なData SegmentとCode Segmentについて説明を行う。
|
|
78 \subsection{DataSegment}
|
8
|
79 AliceではData Segmentをデータベースとして利用しており、Key Value Storeで実装されている。
|
|
80 従来のKey Value StoreのようにKey と Valueが一対になっているのではなく、Key毎にキューを持っていてデータを管理している。
|
|
81 そのキューに対してData Segment API を用いることでData Segmentにデータを追加、削除を適宜行うことができる。
|
|
82
|
6
|
83
|
|
84 \begin{itemize}
|
7
|
85 \item \verb+void put(String key, Value val)+
|
|
86 \item \verb+void update(String key, Value val)+
|
|
87 \item \verb+void peek(Receiver receiver, String key)+
|
|
88 \item \verb+void take(Receiver receiver, String key)+
|
6
|
89 \end{itemize}
|
|
90
|
|
91
|
8
|
92
|
|
93 \verb+put+ はデータを追加するための API である。
|
7
|
94 % キューというのが何か説明する
|
|
95 \verb+update+ はデータを置き換えるための API である。 キューの先頭を置き換える特急メッセージのように動作する。
|
|
96 \verb+peek+ はデータを調べるためのAPIである。目的のData Segment がなければ、Code Segment の待ち合わせ (Blocking) が起きる。
|
|
97 \verb+take+ もデータを読み込むための API である。読み込まれたデータは Key Value Store のキューから取り除かれる
|
6
|
98
|
|
99 \subsection{CodeSegment}
|
|
100 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により実行させる。
|
|
101
|
|
102 \begin{figure}[htbp]
|
|
103 \begin{center}
|
|
104 \includegraphics[width=70mm]{pic/dsandcs2.pdf}
|
|
105 \caption{DataSegment と CodeSegment の依存関係で一意に決まる実行順序}
|
|
106 \label{fig:dsandcs}
|
|
107 \end{center}
|
|
108 \end{figure}
|
|
109
|
8
|
110
|
|
111
|
6
|
112 \section{水族館ゲーム}
|
7
|
113 % 魚の位置が共有されている
|
|
114 % 複数のディスプレイに異なる視点で表示される
|
|
115 % 魚とディスプレイが増えてもサービスを維持できることを確認するため
|
|
116 % このままではスケールしない
|
8
|
117 Aliceを用いて水族館ゲームの作成を行った。水族館ゲームとは複数の魚の情報をゲームに参加するClinet全体で共有し、複数のディスプレイに異なる視点で表示されるものである。トポロジーはツリー状に構成されている。
|
|
118
|
|
119
|
9
|
120 水族館ゲームを作成した目的は魚とディスプレイが増えてもサービスを維持できることを確認するためである。しかし、現状では魚の数、参加するClinetが増えるとトップノードが処理すべきCode Segmentが増加していくため、スケールしないと思われる。
|
6
|
121
|
|
122
|
|
123 以前水族館ゲームをJava3Dで作成したが、JavaのVersion が1.7になったのに伴いJava3Dが使用不可になった。しかしJavaFXというGUIプラグインが追加されたため、JavaFXで水族館ゲームを書きなおした。(図 \ref{fig:JavaFX})また、描画部分がJava3DからJavaFXに変わっただけであるので、それぞれで魚の情報を共有することが可能である。
|
|
124
|
|
125
|
|
126 \begin{figure}[htbp]
|
|
127 \begin{center}
|
|
128 \includegraphics[width=80mm]{pic/for_Fx.pdf}
|
|
129 \caption{JavaFX版 水族館ゲーム}
|
|
130 \label{fig:JavaFX}
|
|
131 \end{center}
|
|
132 \end{figure}
|
|
133
|
|
134
|
7
|
135 % 以下のようなことを書かないで、Code segment/Data segment が Alice で、どう表現されるかを書く
|
|
136 %\section{注意すべき記述}
|
|
137 %Aliceを記述する際に、注意すべき記述がある。(ソースコード \ref{fig:NullPointerException})
|
|
138 %Code Segmentを作成する際に、コンストラクト内でidsに対してsetKeyを行った後に、処理を記述しても実行されない可能性がある。
|
|
139 %Code Segmentは内部で必要なData Segmentの数を数えている。Data Segmentが取得されるたびにこの値がデクリメントされていき、0になった時にCode Segmentがactiveになる。値が0であるかを確認するのは別スレッドであるため、setKey以降に処理を記述してもThread Poolに送られてしまい、NullPointerException等のエラーが起こる可能性がある。
|
|
140 %
|
|
141 %\begin{table}[htbp]
|
|
142 %\lstinputlisting[label=fig:NullPointerException, caption=実行するとNullPointerExceptionを起こす]{source/NullPointerException.java}
|
|
143 %\end{table}
|
6
|
144
|
8
|
145
|
|
146 \section{実験}
|
9
|
147 トップノードから子ノードに対してデータの送信し、子ノードは受けとったデータをトップノードに送り返す。この作業にかかる時間の測定を行う。台数が増えた際の時間の変化により、スケールするかどうかを評価する。マシン 48 台,CPU Intel(R) Xeon(R) X5650 @ 2.67GHz, 仮想コア数 4,CPU キャッシュ 12MB。Blade 上の仮想マシン上での測定を行った。
|
8
|
148
|
|
149
|
|
150 \begin{figure}[htbp]
|
|
151 \begin{center}
|
|
152 \includegraphics[width=90mm]{pic/result2.pdf}
|
|
153 \caption{測定結果}
|
|
154 \label{fig:result2}
|
|
155 \end{center}
|
|
156 \end{figure}
|
|
157
|
|
158 \section{考察}
|
10
|
159 サービスに参加するClientの数が増加するに連れて、時間が増加していく。これはトップノードがData Segmentを子ノードに送信するというCode SegmentがThread Poolに次々に送られてくる。しかし、同時実行可能すうはCPUに依存するため、Client数が増えるに従ってThread Poolで実行されるのを待つ時間が増えていくのではないかと思われる。
|
8
|
160
|
|
161
|
7
|
162 % 今後の課題ではなくて、今のAPIの評価を行う
|
8
|
163 \section{APIの評価}
|
9
|
164 現在、Aliceが提供されているAPIだけで分散プログラムを記述することが可能であったものの、改善したほうがよいAPIがある。
|
8
|
165
|
|
166
|
|
167 \verb+setKey+ は呼ぶタイミングを気をつけなければ、NullPointerExceptionになる事がわかった。\verb+setKey+ 以降に処理を記述しても実行される前にactiveになってしまう可能性がある。従って\verb+setKey+ の方法を考えなおさなければならない。
|
|
168
|
|
169
|
9
|
170 \verb+peek+ でData Segmentを取得、\verb+put+ でData Segmentの追加を行なっているが、この際にMessage Pack\cite{3}でdecode / encodeの操作が行われている。
|
|
171 他のClientに対してデータの送受信するために行う場合はやむを得ないが、local に送受信する際にも行なっている。localに対しての送受信はencode / decode 抜きに処理できるようにするのが望ましい。また
|
8
|
172
|
|
173 \section{Aliceの問題点}
|
6
|
174 \subsection{Java}
|
8
|
175 Aliceの全てのData SegmentはKVSに格納され、実行時のData SegmentはCode Segmentが activeな時のみメモリ上にある。この最大値は同時にActive Taskの量を見積もれば良い。従って、AliceにGCは必要ない。一方で、KVS上のデータは決してGCの対象にならない。しかし、それではGCに付加をかけてしまう。
|
6
|
176 \subsection{Key}
|
|
177 本実装ではData Segment相互の参照はKey経由となる。分散実装では妥当であるが、並列実装ではすべてのData SegmentをKVSに格納するのは性能的な問題を引き起こす。一方で、分散記述と並列記述がかけ離れてしまうのも好ましくない。また、本来はKVSは持続性を持つべきだと思われる。持続性をもつことで、トラブルで処理が途中で中断された場合であっても途中から処理を再開可能となる。
|
|
178 \thispagestyle{fancy}
|
|
179 \begin{thebibliography}{9}
|
|
180
|
|
181 \bibitem{1}
|
|
182 赤嶺一樹, 河野真治. 分散ネットワークフレームワーク Alice の 提案と実装 Design and Implementation Distributed network framework Alice 平成23年度 学位論文(修士)
|
|
183 \bibitem{2}
|
|
184 赤嶺一樹, 河野真治. Meta engine を用いた federated linda の実験. 日本ソフトウェア科学会第 27 会大会, Sep 2010.
|
|
185 \bibitem{3}
|
|
186 古橋 貞之,新城靖. 分散システムのためのメッセージ表現手法 に関する研究 システム情報工学研究科修士論文
|
|
187 \end{thebibliography}
|
|
188 \end{document}
|