annotate paper/chapter1.tex @ 1:cf3a4335c64a

add source code and modify chapters
author gi
date Sat, 27 Dec 2014 16:06:56 +0900
parents 295b393a7134
children 33246fe15eb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
295b393a7134 first commit
sugi
parents:
diff changeset
1 \chapter{分散フレームワーク Alice の概要} \label{chapter:chapter1}
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
2
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
3
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
4 \section{Data Segment}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
5 Data Segmentはデータを細かく分割したものであり、数値や文字列などのデータを構造的に保持する。AliceはData Segmentをデータベースとして扱っている。Data Segmentには必ず対になるKeyが存在する。つまりKey Value Storeとして考える事ができる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
6
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
7 Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在できる。便宜上これをKey Value Queueと呼ぶものとする。Key毎の追加と取得はLindaに準じた設計になっている。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
8
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
9 Data SegmentはData Segment Manager(以下DSM)によって管理されている。ノード毎にLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のKVSとなっている。従ってRemote DSMを指定するKeyはノード内部でuniqueなものである。Remote DSMは他のノードのLocal DSMのproxyと考えられる。つまりRemote DSMは複数存在し、それぞれに対応するノードは異なる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
10
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
11 KVQへのアクセスはqueueによって、ノード内部で逐次化される。それ以外は、すべてJavaのThread Poolにより並列実行される。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
12 \subsection{Data Segment API}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
13 以下が用意されているData Segment APIである。これらを用いてデータの送受信を行う。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
14 \begin{itemize}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
15 \item {\ttfamily void put(String key, Object val)}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
16 \item {\ttfamily void update(String key, Object val)}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
17 \item {\ttfamily void peek(Receiver receiver, String key)}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
18 \item {\ttfamily void take(Receiver receiver, String key)}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
19 \end{itemize}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
20 \subsubsection{put}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
21 putはデータをQueueに追加するためのAPIである。Lindaのout()に相当する
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
22 \subsubsection{update}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
23 updateはデータを置き換える特急メッセージのように動作する。Lindaのupdate()に相当する。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
24 \subsubsection{peek}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
25 peekはデータを読み込むAPIである。読み込まれたデータはQueueに残る。要求したデータが存在しなければ、Code Segmentの待ち合わせ (Blocking)が起こる。putやupdateによりデータに更新があった場合、peekが直ちに実行される。Lindaのread()に相当する。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
26 \subsubsection{take}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
27 takeもデータを読み込むためのAPIである。読み込まれたデータはQueueから削除される。Lindaのin()に相当する。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
28 \subsection{Data Segment の表現}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
29
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
30
0
295b393a7134 first commit
sugi
parents:
diff changeset
31 \section{Meta Data Segment}
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
32 \section{Code Segment}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
33 Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。入力時のData SegmentをInput Data Segment、出力時をOutput Data Segmentと呼ぶ。Input Data SegmentとOutput Data SegmentによってCode Segmentの間の依存関係が自動的に記述される。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
34
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
35 Input Data Segment と Output Data SegmentはCode Segmentに用意されているAPIを用いて作成する。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
36 Input Data Segmentは、LocalかRemoteか、またkeyを指定する必要がある。Code Segmentは、記述したInput Data Segmentが全て揃うとThread poolに送られ、実行される。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
37
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
38 Out Data SegmentもLocalかRemoteか、またkeyを指定する必要がある。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
39
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
40 現在、Inputの場合はsetKeyを呼ぶ際、Outputはput(またはupdate)の際にノードとkeyの指定を行っている。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
41 しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
42
0
295b393a7134 first commit
sugi
parents:
diff changeset
43 \section{Meta Code Segment}
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
44
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
45 \section{Topology Manager}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
46
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
47 \section{Aliceによるプログラミング手法}