annotate paper/alice.tex @ 13:bf1f3378108b

add images
author sigi
date Thu, 25 Apr 2013 03:10:50 +0900
parents e17bc730af1a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
e17bc730af1a separate folder
sugi
parents:
diff changeset
1 \section{分散ネットフレームワークAlice}
e17bc730af1a separate folder
sugi
parents:
diff changeset
2 Alice\cite{kono11g}は、本研究室で開発を行なっている分散管理フレームワークである。Cell用の並列フレームワークCerium\cite{kono09b} \cite{cerium-sourceforge}に似たタスク管理機構とLinda\cite{linda} を相互接続した分散フレームワークであるFederated Linda\cite{kono05b}\cite{kono10d}に似たData Semgnetの通信構造をもつ。
e17bc730af1a separate folder
sugi
parents:
diff changeset
3
e17bc730af1a separate folder
sugi
parents:
diff changeset
4 まず、Aliceを使用するに必要なData Segment、Code Segmentについて説明を行う。
e17bc730af1a separate folder
sugi
parents:
diff changeset
5 \subsection{Data Segment API}
e17bc730af1a separate folder
sugi
parents:
diff changeset
6 Data Segmentは数値や文字列などのデータを構造体的に保持する。AliceはData Segmentをデータベース的に扱う。しかし、Aliceは通常のデータベースとは異なりKey毎にキューがある。Data Segmentはキューにput した順番に取得することができる。これはLindaに準じた設計となっている。
e17bc730af1a separate folder
sugi
parents:
diff changeset
7
e17bc730af1a separate folder
sugi
parents:
diff changeset
8 Data Segmentを管理するのがData Segment Manager(以下DSM)である。ノード毎にキーを持ち他のノードにはRemote DSM経由でアクセスすることができる。つまり、Remote DSMは他のノードのLocal DSMのproxyである。(図 \ref{fig:proxy})他のノードに対するアクセスはキューによって、ノード内部で逐次化される。それ以外は、すべてJavaのThread poolにより並列実行される。
e17bc730af1a separate folder
sugi
parents:
diff changeset
9 \begin{figure}[tb]
e17bc730af1a separate folder
sugi
parents:
diff changeset
10 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
11 \scalebox{1.0}{\includegraphics{images/remote_datasegment.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
12 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
13 \caption{Remote DSMは他のノードの Local DSMのproxy}
e17bc730af1a separate folder
sugi
parents:
diff changeset
14 \label{fig:proxy}
e17bc730af1a separate folder
sugi
parents:
diff changeset
15 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
16 以下が用意されているData Segment APIである。これらを用いてData Segmentの送受信を行う。
e17bc730af1a separate folder
sugi
parents:
diff changeset
17 \begin{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
18 \item \verb+void put(String key, Value val)+
e17bc730af1a separate folder
sugi
parents:
diff changeset
19 \item \verb+void update(String key, Value val)+
e17bc730af1a separate folder
sugi
parents:
diff changeset
20 \item \verb+void peek(Receiver receiver, String key)+
e17bc730af1a separate folder
sugi
parents:
diff changeset
21 \item \verb+void take(Receiver receiver, String key)+
e17bc730af1a separate folder
sugi
parents:
diff changeset
22 \end{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
23
e17bc730af1a separate folder
sugi
parents:
diff changeset
24 \subsubsection{put}
e17bc730af1a separate folder
sugi
parents:
diff changeset
25 \verb+put+ はデータを追加するための API である。Key Value Storeのキューに追加される。 (図 \ref{fig:put})
e17bc730af1a separate folder
sugi
parents:
diff changeset
26
e17bc730af1a separate folder
sugi
parents:
diff changeset
27 \begin{figure}[htbl]
e17bc730af1a separate folder
sugi
parents:
diff changeset
28 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
29 \scalebox{1.1}{\includegraphics{images/put.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
30 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
31 \caption{putはデータを追加する}
e17bc730af1a separate folder
sugi
parents:
diff changeset
32 \label{fig:put}
e17bc730af1a separate folder
sugi
parents:
diff changeset
33 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
34
e17bc730af1a separate folder
sugi
parents:
diff changeset
35
e17bc730af1a separate folder
sugi
parents:
diff changeset
36 \subsubsection{update}
e17bc730af1a separate folder
sugi
parents:
diff changeset
37 \verb+update+ はデータを更新するためのAPIである。キューの先頭を置き換える。
e17bc730af1a separate folder
sugi
parents:
diff changeset
38 (図 \ref{fig:update})
e17bc730af1a separate folder
sugi
parents:
diff changeset
39
e17bc730af1a separate folder
sugi
parents:
diff changeset
40
e17bc730af1a separate folder
sugi
parents:
diff changeset
41 \begin{figure}[htbl]
e17bc730af1a separate folder
sugi
parents:
diff changeset
42 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
43 \scalebox{1.1}{\includegraphics{images/update.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
44 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
45 \caption{updateはキューの先頭を書き換える}
e17bc730af1a separate folder
sugi
parents:
diff changeset
46 \label{fig:update}
e17bc730af1a separate folder
sugi
parents:
diff changeset
47 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
48
e17bc730af1a separate folder
sugi
parents:
diff changeset
49 \subsubsection{peek}
e17bc730af1a separate folder
sugi
parents:
diff changeset
50 peek はデータを取得する。(図 \ref{fig:peek})
e17bc730af1a separate folder
sugi
parents:
diff changeset
51 \begin{figure}[html]
e17bc730af1a separate folder
sugi
parents:
diff changeset
52 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
53 \scalebox{1.0}{\includegraphics{images/peek.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
54 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
55 \caption{peekはデータを取得する}
e17bc730af1a separate folder
sugi
parents:
diff changeset
56 \label{fig:peek}
e17bc730af1a separate folder
sugi
parents:
diff changeset
57 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
58
e17bc730af1a separate folder
sugi
parents:
diff changeset
59
e17bc730af1a separate folder
sugi
parents:
diff changeset
60 Data Segmentが無ければCode Segmentの待ち合わせが起きる。(図 \ref{fig:no_peek})
e17bc730af1a separate folder
sugi
parents:
diff changeset
61
e17bc730af1a separate folder
sugi
parents:
diff changeset
62 \begin{figure}[htbl]
e17bc730af1a separate folder
sugi
parents:
diff changeset
63 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
64 \scalebox{1.1}{\includegraphics{images/peek1.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
65 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
66 \caption{希望のデータが無いときは保留する}
e17bc730af1a separate folder
sugi
parents:
diff changeset
67 \label{fig:no_peek}
e17bc730af1a separate folder
sugi
parents:
diff changeset
68 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
69
e17bc730af1a separate folder
sugi
parents:
diff changeset
70 put、updateによりData Segmentの更新があれば、peekが直ちに実行され、待ち合わせを行なっていたCode Segmentがactive queue に移される。
e17bc730af1a separate folder
sugi
parents:
diff changeset
71
e17bc730af1a separate folder
sugi
parents:
diff changeset
72 \subsubsection{take}
e17bc730af1a separate folder
sugi
parents:
diff changeset
73 takeもデータを取得するためのAPIである。(図 \ref{fig:take})peekとの違いは取得されたData SegmentはKey Value Storeのキューから取り除かれる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
74 \begin{figure}[htbl]
e17bc730af1a separate folder
sugi
parents:
diff changeset
75 \begin{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
76 \scalebox{1.1}{\includegraphics{images/take.pdf}}
e17bc730af1a separate folder
sugi
parents:
diff changeset
77 \end{center}
e17bc730af1a separate folder
sugi
parents:
diff changeset
78 \caption{take はデータを読み込む}
e17bc730af1a separate folder
sugi
parents:
diff changeset
79 \label{fig:take}
e17bc730af1a separate folder
sugi
parents:
diff changeset
80 \end{figure}
e17bc730af1a separate folder
sugi
parents:
diff changeset
81
e17bc730af1a separate folder
sugi
parents:
diff changeset
82 \subsection{Code Segment}
e17bc730af1a separate folder
sugi
parents:
diff changeset
83
e17bc730af1a separate folder
sugi
parents:
diff changeset
84 Code Segmentはタスクのことである。Code Segmentをユーザーが記述するときにCode Segment内で使用するData Segmentの作成を記述する。Code SegmentにはInput Data SegmentとOutput Data Segmentを作るAPIが存在する。
e17bc730af1a separate folder
sugi
parents:
diff changeset
85
e17bc730af1a separate folder
sugi
parents:
diff changeset
86
e17bc730af1a separate folder
sugi
parents:
diff changeset
87 Input Data SegmentはRemoteかLocalを指定する必要がある。さらに、どのData Segmentを取るかをキーで指定する。
e17bc730af1a separate folder
sugi
parents:
diff changeset
88 実際にsetKeyのメソッドを呼んだ時に指定する。
e17bc730af1a separate folder
sugi
parents:
diff changeset
89 Code Segmentがactiveになるためには、Input Data Segmentが全て揃う必要がある。
e17bc730af1a separate folder
sugi
parents:
diff changeset
90
e17bc730af1a separate folder
sugi
parents:
diff changeset
91
e17bc730af1a separate folder
sugi
parents:
diff changeset
92 Output Data SegmentもRemoteかLocalを指定する。Input と同様にどのキーに対してData Segmentを追加するか指定する。
e17bc730af1a separate folder
sugi
parents:
diff changeset
93 実際にはputまたはupdateメソッドを呼ぶタイミングでおこなう。
e17bc730af1a separate folder
sugi
parents:
diff changeset
94
e17bc730af1a separate folder
sugi
parents:
diff changeset
95 これらのInput/OutputがCode Segment間の依存関係を自動的に記述することになる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
96
e17bc730af1a separate folder
sugi
parents:
diff changeset
97 \subsubsection{Code Segmentの実行方法}
e17bc730af1a separate folder
sugi
parents:
diff changeset
98 Alice には、Start Code Segment (ソースコード \ref{fig:StartCodeSegment})というC の main に相当するような最初に実行される Code Segment がある。
e17bc730af1a separate folder
sugi
parents:
diff changeset
99 \begin{table}[html]
e17bc730af1a separate folder
sugi
parents:
diff changeset
100 \lstinputlisting[label=fig:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java}
e17bc730af1a separate folder
sugi
parents:
diff changeset
101 \end{table}
e17bc730af1a separate folder
sugi
parents:
diff changeset
102
e17bc730af1a separate folder
sugi
parents:
diff changeset
103 Start Code SegmentはどのData Segmentにも依存しない。つまりInput Data Segmentを持たない。
e17bc730af1a separate folder
sugi
parents:
diff changeset
104 このCode Segmentをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。(ソースコード \ref{fig:TestLocalAlice})
e17bc730af1a separate folder
sugi
parents:
diff changeset
105
e17bc730af1a separate folder
sugi
parents:
diff changeset
106 \begin{table}[html]
e17bc730af1a separate folder
sugi
parents:
diff changeset
107 \lstinputlisting[label=fig:TestLocalAlice, caption=Start Code Segmentを実行させる方法]{source/TestLocalAlice.java}
e17bc730af1a separate folder
sugi
parents:
diff changeset
108 \end{table}
e17bc730af1a separate folder
sugi
parents:
diff changeset
109
e17bc730af1a separate folder
sugi
parents:
diff changeset
110 \subsubsection{Code Segmentの記述方法}
e17bc730af1a separate folder
sugi
parents:
diff changeset
111 Code Segmentをユーザーが記述する際にはCode Segmentを継承して記述する。(ソースコード \ref{fig:CodeSegment})そのCodeSegmentはInputDataSegmentManagerとOutputDataSegmentManagerを利用することができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
112
e17bc730af1a separate folder
sugi
parents:
diff changeset
113 InputDataSegmentManagerはCode Segmentの{\tt ids}というフィールドを用いてアクセスする。
e17bc730af1a separate folder
sugi
parents:
diff changeset
114
e17bc730af1a separate folder
sugi
parents:
diff changeset
115
e17bc730af1a separate folder
sugi
parents:
diff changeset
116
e17bc730af1a separate folder
sugi
parents:
diff changeset
117 \begin{table}[html]
e17bc730af1a separate folder
sugi
parents:
diff changeset
118 \lstinputlisting[label=fig:CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java}
e17bc730af1a separate folder
sugi
parents:
diff changeset
119 \end{table}
e17bc730af1a separate folder
sugi
parents:
diff changeset
120
e17bc730af1a separate folder
sugi
parents:
diff changeset
121 \begin{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
122 \item {\ttfamily Receiver create(CommandType type)}
e17bc730af1a separate folder
sugi
parents:
diff changeset
123 \end{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
124 createでコマンドが実行された際に取得されるData Segmentが格納される受け皿を作る。引数にはCommandTypeが取られ、指定できるCommandTypeは{\tt PEEK}または{\tt TAKE}である。
e17bc730af1a separate folder
sugi
parents:
diff changeset
125 \begin{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
126 \item {\ttfamily void setKey(String managerKey, String key)}
e17bc730af1a separate folder
sugi
parents:
diff changeset
127 \end{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
128 setKeyメソッドにより、どこのData Segmentのあるkeyに対してpeekまたはtakeコマンドを実行させるかを指定することができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
129 コマンドの結果がレスポンスとして届き次第Code Segmentは実行される。
e17bc730af1a separate folder
sugi
parents:
diff changeset
130
e17bc730af1a separate folder
sugi
parents:
diff changeset
131 OutputDataSegmentManagerはCode Segmentの{\tt ods}というフィールドを用いてアクセスする。
e17bc730af1a separate folder
sugi
parents:
diff changeset
132 OutPutDataSegmentManagerは{\tt put}または{\tt update}を実行することができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
133 \begin{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
134 \item {\ttfamily void put(String managerKey, String key, \\ Value val)}
e17bc730af1a separate folder
sugi
parents:
diff changeset
135 \item {\ttfamily void update(String managerKey, String key, Value val)}
e17bc730af1a separate folder
sugi
parents:
diff changeset
136 \end{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
137
e17bc730af1a separate folder
sugi
parents:
diff changeset
138
e17bc730af1a separate folder
sugi
parents:
diff changeset
139
e17bc730af1a separate folder
sugi
parents:
diff changeset
140 \section{Message Pack }
e17bc730af1a separate folder
sugi
parents:
diff changeset
141 Data Segmentのデータの表現にはMessage Packを利用している。Message Packに関してJavaにおけるデータ表現は以下の3つある。
e17bc730af1a separate folder
sugi
parents:
diff changeset
142 \begin{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
143 \item {\ttfamily 一般的なJavaのクラスオブジェクト}
e17bc730af1a separate folder
sugi
parents:
diff changeset
144 \item {\ttfamily MessagePack for JavaのValueオブジェクト}
e17bc730af1a separate folder
sugi
parents:
diff changeset
145 \item {\ttfamily byte[]で表現されたバイナリ}
e17bc730af1a separate folder
sugi
parents:
diff changeset
146 \end{itemize}
e17bc730af1a separate folder
sugi
parents:
diff changeset
147
e17bc730af1a separate folder
sugi
parents:
diff changeset
148 Data Segmentは、MessagePack for JavaのValueオブジェクトを用いてデータが表現されている。
e17bc730af1a separate folder
sugi
parents:
diff changeset
149 MessagePackはJavaのように静的に型付けされたオブジェクトではなく、自己記述なデータ形式である。
e17bc730af1a separate folder
sugi
parents:
diff changeset
150 MessagePack for JavaのValueオブジェクトはMessagePackのバイナリにシリアライズできる型のみで構成されたJavaのオブジェクトである。
e17bc730af1a separate folder
sugi
parents:
diff changeset
151 そのため、Valueも自己記述式のデータ形式になっている。
e17bc730af1a separate folder
sugi
parents:
diff changeset
152
e17bc730af1a separate folder
sugi
parents:
diff changeset
153 Valueオブジェクトは通信に関わるときには、シリアライズ・デシリアライズを高速に行うことができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
154 ユーザーはメソッドを用いてオブジェクト内部のデータを閲覧、編集することができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
155
e17bc730af1a separate folder
sugi
parents:
diff changeset
156 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。
e17bc730af1a separate folder
sugi
parents:
diff changeset
157 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。
e17bc730af1a separate folder
sugi
parents:
diff changeset
158 ただし、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。