annotate paper/nozomi-master.tex @ 176:055266d62d84

add slide
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 06 Feb 2018 03:56:16 +0900
parents 7e7fe5e28ba4
children b5ab0f9c07aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[a4j,12pt]{jreport}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage{master_paper}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{ascmac}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{bussproofs}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 \usepackage[dvipdfmx]{graphicx}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \usepackage{here}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \usepackage{listings}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 \usepackage{comment}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 \usepackage[deluxe, multi]{otf}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \usepackage{url}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 \usepackage{cite}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 \usepackage{listings}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 \usepackage{colonequals}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \usepackage[utf8]{inputenc}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 %\input{dummy.tex} %% font
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
18 \jtitle{分散フレームワークChristieの設計}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
19 \etitle{Design of Distributed framework Christie}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \year{2018年 3月}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \eyear{March 2018}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 \author{照屋 のぞみ}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \eauthor{NOZOMI TERUYA}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \chife{指導教員:教授 和田 知久}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \echife{Supervisor: Prof. Tomohisa WADA}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \marklefthead{% 左上に挿入
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \begin{minipage}[b]{.4\textwidth}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 琉球大学大学院学位論文(修士)
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \end{minipage}}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \markleftfoot{% 左下に挿入
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \begin{minipage}{.8\textwidth}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 並列分散フレームワークChristieの設計
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \end{minipage}}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \newcommand\figref[1]{図 \ref{fig:#1}}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \newcommand\tabref[1]{表 \ref{tab:#1}}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
39 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
41 \lstset{%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
42 language={Java},%使用言語
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
43 basicstyle={\small},%書体
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
44 commentstyle={\small\itshape},%コメントの書体
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
45 keywordstyle={\small\bfseries},%キーワードの書体
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
46 %identifierstyle={\small},%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
47 %ndkeywordstyle={\small},%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
48 stringstyle={\small},%文字列の書体
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
49 frame={trlb},%外枠
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
50 breaklines=true,%改行
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
51 columns=[l]{fullflexible},%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
52 xrightmargin=0zw,%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
53 xleftmargin=3zw,%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
54 numbers=left,%行番号の表示
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
55 numberstyle={\scriptsize},%行番号の書体
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
56 numbersep=1zw,%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
57 stepnumber=1,
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
58 lineskip=-0.5ex,%
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
59 captionpos=b,%キャプションの位置
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
61
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
62 \def\lstlistingname{ソースコード}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
63 \def\lstlistlistingname{ソースコード目次}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 %%% 索引のために以下の2行を追加
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 \usepackage{makeidx,multicol}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 \makeindex
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 \begin{document}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 %rome
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 \frontmatter
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 \maketitle
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 \newpage
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 \makecommission
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 %要旨
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
80 \input{abstract.tex}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 %目次
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 \tableofcontents
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 %図目次
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 \listoffigures
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 %表目次
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 \listoftables
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 %リスト目次
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 \lstlistoflistings
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 %arabic
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 \mainmatter
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 %chapters
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
99
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
100 \chapter{分散フレームワークへの要求事項}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
101 スマートフォンやタブレット端末の普及率が増加している。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
102 それに伴いインターネット利用者数も増加しており、ネットワークサービスにはそれに対する処理能力が求められる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
103 サーバの処理能力を増強するアプローチとして、スケールアップとスケールアウトがある。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
104 スケールアップはサーバそのものを増強することで処理能力を向上させる手法であり、スケールアウトは複数のサーバを接続することで処理能力を上げる手法である。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
105 スケールアウトは安価なサーバで実現でき、サーバが故障しても別のサーバでカバーできるため、システムを安定運用させやすく、現代のネットワークサービスの要求に合っていると言える。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
106
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
107 スケールアウトのように複数のサーバで処理をまたぐ場合、サーバには分散プログラムが必要になる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
108 分散プログラムとは、プログラムの個々の部分が複数のノード上で並列に実行され、各ノードがネットワークを介して互いに通信を行いながら全体の処理を進行する計算手法のことである。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
109 安定したネットワークサービスを提供するためには、分散プログラムに信頼性とスケーラビリティが要求される。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
110
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
111 ここでいう信頼性とは、定められた環境下で安定して仕様に従った動作を行うことを指す。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
112 これには仕様を記述しやすさも含まれ、可読性が高いほどバグを抑えた信頼性が高いと言える。
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
113 またスケーラビリティーとは、分散ソフトウェアに対して単純にノードを追加するだけで性能を線形的に上昇させることができる性質である。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
114
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
115 しかし、これらをもつ分散プログラムをユーザーが一から記述することは容易ではない。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
116 なぜなら、並列で動く分散した資源を意識しながら記述するのは容易ではなく、また、どのように分散したノードの選択を行えば良いのか明確ではないからである。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
117
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
118 分散プログラムには以下の3つの要素がある\cite{Framework}。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
119 \begin{itemize}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
120 \item {ノード内の計算}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
121 \end{itemize}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
122
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
123 \begin{itemize}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
124 \item {ノード間通信}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
125 \end{itemize}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
126
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
127 \begin{itemize}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
128 \item {地理的に分散したノード}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
129 \end{itemize}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
130
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
131 ノード内の計算には通信プロトコルやデータベースが含まれる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
132 またノード間通信には、トポロジーの構成や通信の信頼性や速度、データの転送やデータの圧縮などの要素がある。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
133
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
134 これらの要素をサポートするのが分散フレームワークである。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
135 すなわち分散フレームワークには、プロトコルの定義、それによってアクセスされるデータベース、トポロジーの決定いった分散アルゴリズムや、信頼性と拡張性の高い通信の提供が求められる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
136
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
137 本章では、これらの項目別に分けて、分散フレームワークであるAkka\cite{Akka}、Hazelcast\cite{Hazelcast}と当研究室で開発したAlice\cite{Alice1}\cite{Alice2}を比較し、本論文で設計するChristieの設計目標を述べる。
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
138
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
139 AkkaはScalaおよびJava向けのオープンソースの並列分散処理フレームワークであり、HazelcastはHazelcast社が開発したJava向けのオープンソースインメモリデータグリッドである。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
140
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
141 \section{従来の分散フレームワーク}
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
142 Akkaではアクターモデルという、アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデルを採用している。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
143 アクターは固有のアドレス持っており、ローカルのアクターにもリモートのアクターにも同じようにアドレスを指定することでメッセージを送りあえるというプロトコルになっている。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
144 アクターはそれぞれメールボックスというキューを持っており、メールボックスに受け取ったメッセージをパターンマッチで順次処理していく。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
145 このパターンマッチにはScalaのcase classを用いられる。
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
146 case classとは、データ構造とデータ型名を同時に持つことができ、その両方を一括してパターンマッチさせることができるクラスである。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
147 メッセージをcase classで記述することにより、異なるメッセージをメールボックス上で使用することがきる。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
148
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
149 Hazelcastは、キーと値の1対1でデータを管理するインメモリ・データグリッドである。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
150 インメモリ・データグリッドとは、複数のノードに分散させたデータを、アプリケーション側からは仮想的な1つのメモリ空間に置かれているように見せるモデルである。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
151 そのため、プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/putできるプロトコルとなっている。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
152 共有のタプルスペースに書き込むとそれに接続しているノードにデータを行き渡らせる、マルチキャストベースの通信を採用している。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
153
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
154 Aliceは、タスクをCode Segment、データをData Segmentという単位で記述し、Code SegmentはインプットとなるData Segmentが全て揃うと並列に実行される。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
155 Data Segmentは対になるkeyが存在し、Data Segment Managerというノードごとに存在する独自のデータベースによって管理されている。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
156 各ノードにはラベル付きのプロキシであるRemote Data Segment Managerを立て、ラベルとkeyを指定してデータをtake/putするプロトコルとなっている。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
157
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
158 \newpage
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
159 記述の面において、Akkaでは基本的にメッセージをFIFO的に処理するため、複数のインプットを待ち合わせる場合は、待ち合わせの処理をプログラマが各必要があった。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
160 しかしAliceは複数のインプットを1箇所に記述するるため、そのような煩雑さがない。
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
161
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
162 プロトコルの設計方針において、AkkaやHazelcastは分散通信の複雜さを抽象度を高めることで隠す方針であるため、ロケーション透過性が高く、プログラマからは処理の流れを把握しにくくなっていた。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
163 一方でAliceでは明示的に分散性を意識する代わりに、計算を通常計算とそれを支えるメタ計算として分離することで記述の複雑さを回避している。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
164 これにより処理の流れを明確にし、分散計算のチューニングをしやすくしている。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
165
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
166 また、Aliceの分散ノード間の通信はラベルを用いてリモートノードを選択することによって指定する。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
167 これはAkkaで送り先をドメインで指定しているのと同様である。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
168 Aliceではラベルの命名をToplogy Managerによって自動的に指定することもできる。
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
170
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
171 \section{トポロジーの構成}
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
172 AkkaではAkka Streamという機能で処理の流れが記述できる。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
173 N入力1出力、1入力N出力、出力のみ、などが用意されたJunctionsと呼ばれる要素をつなぎ合わせることでトポロジーを記述する。
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
175 HazelcastにはMapやQueueといったメモリ空間内のデータ構造は指定できるが、具体的なノード間トポロジーを記述する機構がない。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
176
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
177 AliceではTopologyManagerという機構が分散ノードを管理しており、静的・動的なトポロジーを自動構成する。静的トポロジーではプログラマがトポロジーを図として記述できるため、より分かりやすく詳細な設定ができる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
178
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
179 \newpage
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
180
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
181 \section{信頼性・拡張性の高い通信の提供}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
182 ここでは信頼性・拡張性の高い通信の指標として、障害耐性、圧縮・転送通信、NAT越えについてを比較する。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
183
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
184 \subsection*{障害耐性}
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
185 分散プログラムでは、1つのノードがダウンしてもシステム全体は動き続けなければならないため、フォールト・トレラントであることが重要である。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
186
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
187 Akkaでは親子関係を構成でき、親アクターは子アクターを監視し障害が起こった際に再起動や終了といった処理を指定できる。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
188
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
189 また、Hazelcastは、1つのサーバで障害が起きても他のサーバがデータを共有しているため、データを失うことなく素早く復旧ができる。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
190
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
191 Aliceでは、TopologyManager内にKeepAliveという機能があり、常にノードが生きているかHeartbeatを送信して監視しており、どこかのノードに障害が起こればトポロジーを再構成するといった対応ができる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
192
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
193
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
194 \subsection*{圧縮・転送通信}
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
195 ノード間通信でサービスに沿った柔軟な通信をするためには、送信するデータを圧縮する機能や、受け取ったデータをそのままほかノードへ転送する機能が求められることがある。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
196
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
197 データの圧縮を指定したい場合、Akka、Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことで圧縮伸長を行う。
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
198 また、転送を指定したい場合、Akkaにはforwardメソッドがあるためそれを呼び出すことで受け取ったデータの転送が可能だが、Hazelcastは一つのMapへのアクセスに見立てているため、転送にもputを用いる。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
199
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
200 一方でAliceは圧縮の伸長と転送を同時に行うことを想定した圧縮・転送機能を持っている。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
201 Data Segment内に圧縮と非圧縮の両形式を同時に持てるため、受け取った圧縮データを伸長をしながら圧縮したまま別ノードに転送することができる。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
202 また、圧縮するには送信する宛先ラベルに"compressed"とつけるだけでよく、データ取得時に自動で伸長もされるため、プログラマがメソッドの呼び出しを追加する必要がなく圧縮・非圧縮を簡単に切り替えられる。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
203
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
204 \newpage
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
205
166
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
206 \subsection*{NAT越え}
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
207 ネットワーク間通信の大きな問題の一つに、NATがある。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
208 NATとは、WANとLANの間にあるIPアドレスの変換機構である。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
209 NATを隔てたプライベートネットワーク内では、LAN内だけでユニークなプライベートIPアドレスを持っており、WAN側からはそのIPアドレスを直接指定してアクセスできないためアドレス変換を行う必要がある。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
210 そのためNATを越えたノード間通信は容易ではなく、分散フレームワークでそれをサポートできることが望ましい。
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
211
d09fb22608f1 change chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 164
diff changeset
212 しかしHazelcastではNAT越えをサポートする機能がなく、プログラマが自前で書かなければならない。
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
213 Akkaではノードの設定にグローバルアドレスとプライベートアドレスを両方登録することでNATを越えた通信を可能にする。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
214 AliceにNAT越えの機能はないが、TopologyManagerが各ノードのData Segment Managerと通信してトポロジー管理をしており、TopologyManager/Data Segment Managerを複数立ち上げることによりプライベートトポロジーとグローバルトポロジーの同時構成が可能だと考えた。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
215 しかし、Aliceが複数のData Segment Managerを持てない実装だったため、AliceのままでNAT越えを実装することは困難であると判明した。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
216 よりスケーラブルな分散環境を提供するためにも、Aliceを再設計する必要がある。
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
217
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
218
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
219
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 \chapter{分散フレームワークAliceの概要}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
221
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
222 AliceではCode Segment(以下CS)とData Segment(以下DS)の依存関係を記述することでプログラミングを行う。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
223 CSは実行に必要なDSが全て揃うと実行される。CSを実行するために必要な入力されるDSのことをInputDS、CSが計算を行った後に出力されるDSのことをOutput DSと呼ぶ。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
224
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
225 \section{CodeSegmentとDataSegment}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
226
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
227 データの依存関係にないCSは並列実行が可能である(図 \ref{fig:CS})。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
228 CSの実行においてDSが他のCSから変更を受けることはない。そのためAliceではデータが他から変更され整合性がとれなくなることはない。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
229
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
230 \begin{figure}[htbp]
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
231 \begin{center}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
232 \includegraphics{images/dsandcs2.pdf}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
233 \end{center}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
234 \caption{CodeSegmentの依存関係 }
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
235 \label{fig:CS}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
236 \end{figure}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
237
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
238 \newpage
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
239
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
240 AliceはJavaで実装されており、DSはJava Objectに相当する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
241 CSはRunnableなObject(void run()を持つObject)に相当する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
242 プログラマがCSを記述する際は、CodeSegmentクラスを継承する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
243
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
244 DSは数値や文字列などの基本的なデータの集まりを指し、Aliceが内部にもつデータベースによって管理されている。このデータベースをAliceではDS Managerと呼ぶ。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
245
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
246 CSは複数のDS Managerを持っている。DSには対になるString型のkeyが存在し、それぞれのManagerにkeyを指定してDSにアクセスする。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
247 一つのkeyに対して複数のDSをputするとFIFO的に処理される。なのでData Segment Managerは通常のデータベースとは異なる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
248
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
249
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
250
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 \section{DataSegmentManager}
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
252 DS Manager(以下DSM)にはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
253
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
254 Remote DSMは他ノードのLocal DSMに対応するproxyであり、接続しているノードの数だけ存在する(図 \ref{fig:Remote DSM} )。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
255 他ノードのLocal DSMに書き込みたい場合はRemote DSMに対して書き込めば良い。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
256
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
257 \newpage
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
258
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
259 \begin{figure}[h]
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
260 \begin{center}
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
261 \includegraphics[width=150mm]{images/remote_datasegment.pdf}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
262 \end{center}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
263 \caption{Remote DSMは他のノードのLocal DSMのproxy }
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
264 \label{fig:Remote DSM}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
265 \end{figure}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
266
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
267
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
268 Remote DSMを立ち上げるには、DataSegmentクラスが提供するconnectメソッドを用いる。
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
269 接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
270 その後はManager名を指定してData Segment APIを用いてDSのやり取りを行うため、プログラマはManager名さえ
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
271 意識すればLocalへの操作もRemoteへの操作も同じ様に扱える。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
272
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
273
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
274 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
275
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 \section{Data Segment API}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
277 DSの保存・取得にはAliceが提供するAPIを用いる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
278 putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
279 peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
280
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
281 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
282 \item {\ttfamily void put(String managerKey, String key, Object val)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
283 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
284 DSをDSMに追加するためのAPIである。第一引数はLocal DSMかRemote DSMかといったManager名を指定する。そし
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
285 て第二引数で指定されたkeyに対応するDSとして第三引数の値を追加する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
286
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
287 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
288 \item {\ttfamily void update(String managerKey, String key, Object val)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
289 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
290 updateもDSをDSMに追加するためのAPIである。putとの違いは、queueの先頭のDSを削除してからDSを追加するこ
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
291 とである。そのためAPI実行前後でqueueの中にあるDSの個数は変わらない。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
292
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
293 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
294 \item{\ttfamily void flip(String managerKey, String key, Receiver val)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
295 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
296 flipはDSの転送用のAPIである。取得したDSに対して何もせずに別のKeyに対し保存を行いたい場合、一旦値を取
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
297 り出すのは無駄である。flipはDSを受け取った形式のまま転送するため無駄なコピーなくDSの保存ができる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
298
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
299 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
300 \item {\ttfamily void take(String managerKey, String key)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
301 \end{itemize}
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
302 takeはDSを読み込むためのAPIである。読み込まれたDSは削除される。要求したDSが存在しなければ、CSの待ち合わせ (Blocking)が起こる。putやupdateによりDSに更新があった場合、takeが直ちに実行される。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
303
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
304 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
305 \item {\ttfamily void peek(String managerKey, String key)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
306 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
307 peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
308
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
309
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
310
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
311 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
312
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 \section{CodeSegmentの記述方法}
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
314 CSをユーザーが記述する際にはCodeSegmentクラスを継承して記述する(ソースコード \ref{src:StartCodeSegment} , \ref{src:CodeSegment})。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
315
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
316 継承することによりCode Segmentで使用するData Segment APIを利用する事ができる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
317
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
318 Alice には、Start CS (ソースコード \ref{src:StartCodeSegment} )というC の main に相当するような最初に
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
319 実行される CS がある。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
320 Start CSはどのDSにも依存しない。つまりInput DSを持たない。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
321 このCSをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
322
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
323
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
324 \lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java}
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
325 \lstinputlisting[label=src:CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
326
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
327 \newpage
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
328
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
329 ソースコード \ref{src:StartCodeSegment} は、5行目で次に実行させたいCS(ソースコード \ref{src:CodeSegment} )を作成している。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
330 8行目でOutput DS APIを通してLocal DSMに対してDSをputしている。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
331 Output DS APIはCSの{\tt ods}というフィールドを用いてアクセスする。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
332 {\tt ods}は{\tt put}と{\tt update}と{\tt flip}を実行することができる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
333 TestCodeSegmentはこの"cnt"というkeyに対して依存関係があり、8行目でputが行われるとTestCodeSegmentは実
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
334 行される。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
335
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
336
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
337 CSのInput DSは、CSの作成時に指定する必要がある。指定はCommandType(PEEKかTAKE)、DSM名、そしてkey よっ
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
338 て行われる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
339 Input DS API はCSの{\tt ids}というフィールドを用いてアクセスする。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
340 Output DSは、{\tt ods}が提供するput/update/flipメソッドをそのまま呼べばよかったが、Input DSの場合{\tt ids}にpeek/takeメソッドはなく、create/setKeyメソッド内でCommandTypeを指定して実行する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
341
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
342 ソースコード\ref{src:CodeSegment}は、0から9までインクリメントする例題である。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
343 2行目では、Input DS APIがもつcreateメソッドでInput DSを格納する受け皿(Receiver)を作っている。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
344 引数には{\tt PEEK}または{\tt TAKE}を指定する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
345 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
346 \item {\ttfamily Receiver create(CommandType type)}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
347 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
348
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
349 4行目から6行目はコンストラクタである。コンストラクタはオブジェクト指向のプログラミング言語で新たなオ
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
350 ブジェクトを生成する際に呼び出されて内容の初期化を行う関数である。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
351
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
352 TestCodeSegmentのコンストラクタが呼ばれた際には、
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
353 \begin{enumerate}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
354 \item CSが持つフィールド変数 {\tt Receiver input}に{\tt ids.create(CommandType.TAKE)}が行われ、{\tt input}が初期化される。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
355 \item 5行目にあるTestCodeSegmentのコンストラクタのTAKEが実行される。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
356 \end{enumerate}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
357
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
358 5行目は、2行目のcreateで作られたReceiverが提供するsetKeyメソッドを用いてLocal DSMからDSを取得している。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
359 \begin{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
360 \item \verb+void setKey(String managerKey, String key)+
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
361 \end{itemize}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
362 setKeyメソッドはpeek/takeの実行を行う。どのDSMのどのkeyに対してpeekまたはtakeコマンドを実行させるかを指定できる。コマンドの結果がレスポンスとして届き次第CSは実行される。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
363
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
364 \newpage
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
365
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
366 実行されるrunメソッドの内容は
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
367 \begin{enumerate}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
368 \item 10行目で取得されたDSをInteger型に変換してcountに代入する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
369 \item 12行目でcountをインクリメントする。
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
370 \item 16行目で次に実行されるCSを作る。run内の処理を終えたらCSは破棄されるため、処理を繰り返したい場合はこのように新しいくCSを作る必要がある。この時点で次のCSはInput DSの待ち状態に入る。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
371 \item 17行目でcountをLocal DSMにputする。Input DSが揃い待ち状態が解決されたため、次のCSが実行される。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
372 \item 13行目が終了条件であり、countの値が10になれば終了する。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
373 \end{enumerate}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
374 となっている。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
375
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
376 1.で用いられているasInteger()はasClassメソッドの一部であり、asClassはtake/peekで取得したDSをObject型から任意の型で取得するためのAPIである。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
377
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
378 \begin{itemize}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
379 \item {\ttfamily <T> T asClass(Class<T> clazz)}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
380 \end{itemize}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
381
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
382 CS内でDSのデータを扱うには、正しい型を意識しながらこのasClassメソッドを使わなければならない。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
383
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
384
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
385 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
386
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
387
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
388 \section{AliceのMeta Computation}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
389 Aliceでは、処理をComputationとMeta Computationに階層化し、コアな仕様と複雑な例外処理に分離する。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
390 AliceのComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理と捉えられる。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
391 それに対して、AliceのMeta Computation は、Remoteノードとの通信トポロジーの構成や、通信するデータ形式の変換と言える。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
392
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
393 Aliceの機能を追加するということはプログラマ側が使うMeta Computationを追加すると言い換えられる。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
394 AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
395 プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定するだけでよい。
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
396
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
397 このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
398 仕様の変更を抑えてプログラムの拡張ができるということは、コードを破壊しないため変更以前の信頼性を保てるということである。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
399
159
cad92fc74613 change SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
400 Meta ComputationもCS/DSで作られており、プログラマ側から見えないこれらのCS/DSはMeta CS/Meta DSと呼ばれる。
cad92fc74613 change SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
401
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
402 現在Aliceには、データの圧縮機能、トポロジーの構成・管理機能、ノードの生存確認機能、ノードの切断・再接続時の処理管理機能などのMeta Computationが用意されている。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
403 これらの有用性は水族館の例題\cite{Aquarium}やTreeVNCの例題\cite{TreeVNC}\cite{AliceVNC}によって示された。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
404
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
405 \newpage
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
406
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
407 \subsection{Aliceの圧縮機能}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
408 リモートノードに大きなデータを送るために、データを圧縮したい場合がある。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
409 そこで、Aliceは圧縮をサポートしている。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
410 しかし、単に圧縮のメソッドを用意したわけではない。
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
411 圧縮データの伸長と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
412
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
413 \begin{figure}[h]
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
414 \begin{center}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
415 \includegraphics[width=160mm]{images/compress.pdf}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
416 \end{center}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
417 \caption{DSが圧縮と非圧縮の両方を持つ}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
418 \label{fig:compress}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
419 \end{figure}
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
420
159
cad92fc74613 change SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
421 1つのDS内にMeta DSとして以下の3つの表現を持たせることでデータに多態性を持たせ、必要に応じた形式でDSを扱う。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
422
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
423 \begin{enumerate}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
424 \item 一般的なJavaのクラスオブジェクト
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
425 \item MessagePack for Java\cite{MessagePack}でシリアライズ化されたバイナリオブジェクト
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
426 \item 2を圧縮したバイナリオブジェクト
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
427 \end{enumerate}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
428
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
429 Local DSMにputされた場合は、(1)の一般的なJavaクラスオブジェクトとして追加される。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
430 Remote DSMにputされた場合は、通信時に(2)のbyteArrayに変換されたバイナリオブジェクトに変換されたDSが追加
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
431 される。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
432 Local/Remote DSMにDSを圧縮して保存したい場合は(3)の圧縮形式を用いる。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
433
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
434 \newpage
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
435
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
436 データの圧縮を指定するには、putするDSMの名前の前に"compressed"をつけるだけでよい。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
437 ソースコード\ref{src:before},\ref{src:after}は通常のDSと圧縮のDSを扱う際の記述の例である。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
438
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
439 \lstinputlisting[label=src:before, caption=通常のDSを扱うCSの例]{source/beforeCompress.java}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
440 \lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
441
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
442 このようにコードの変更を抑えて圧縮できるため、他の計算部分を変えずにデータ形式が指定できる。
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
443 また、DSを取り出す際もasClass()内部で自動で伸長が行われるため、コードの変更がなく、プログラマがデータの伸長を考える必要がない。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
444
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
445
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
446 \subsection{TopologyManager}
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
447 Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerとTopology NodeというMeta Computationが提供している。
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
448 プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
449 トポロジーファイルはDOT Language\cite{dot}という言語で記述される。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
450 DOT Languageとは、プレーンテキストを用いてデータ構造としてのグラフを表現するためのデータ記述言語の一つである。
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
451 ソースコード\ref{src:topologyfile}は3台のノードでリングトポロジーを組むときのトポロジーファイルの例である。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
452
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
453 \lstinputlisting[label=src:topologyfile, caption=トポロジーファイルの例]{source/TopologyFile.dot}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
454 DOT Languageファイルはdotコマンドを用いてグラフの画像ファイルを生成することができる。そのため、記述したトポロジーが正しいか可視化することが可能である。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
455
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
456 Topology Managerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送る(図\ref{fig:topologymanager})。
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
457
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
458 \newpage
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
459
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
460 \begin{figure}[h]
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
461 \begin{center}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
462 \includegraphics[width=80mm]{images/topologymanager.pdf}
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
463 \end{center}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
464 \caption{Topology Managerが記述に従いトポロジーを構成}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
465 \label{fig:topologymanager}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
466 \end{figure}
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
467
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
468 トポロジーファイルでlavelとして指定した名前はRemote DSMの名前としてTopology Nodeに渡される。
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
469 そのため、Topology NodeはTopology ManagerのIPアドレスさえ知っていれば自分の接続すべきノードのデータを受け取り、ノード間での正しい接続を実現できる。
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
470
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
471
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
472 また、実際の分散アプリケーションでは参加するノードの数が予め決まっているとは限らない。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
473 そのためTopology Managerは動的トポロジーにも対応している。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
474 トポロジーの種類を選択してTopology Managerを立ち上げれば、あとは新しいTopology Nodeが参加表明するたびに、Topology ManagerからTopology Nodeに対して接続すべきTopology Nodeの情報がput
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
475 され接続処理が順次行われる。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
476 そしてTopology Managerが持つトポロジー情報が更新される。
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
477 現在Topology Managerでは動的なトポロジータイプとして二分木に対応している。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
478
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
479
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
480
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 \chapter{Aliceの問題点}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
482 Aliceを拡張していく中でいくつかの問題点が明らかになり、これらを解決するにはAlice自体を再設計する必要があるとわかった。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
483
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
484
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
485 \section{APIの記述の分離}
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
486 2.4で示したように、InputDSを記述するには、一度フィールドでReceiverをcreateして、その後Reveiverに対してsetKeyで待ち合わせるkeyを指定しなければならない。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
487 このようにインプットの処理が分離されてしまっていては、記述が煩雑な上にコードを読んだ際にどのkeyに対して待ち合わせを行っているのか直感的に分からない。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
488
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
489 さらに、setKeyは明確な記述場所が決まっていないため、そのDSを待ち合わせているCS以外からも呼び出せてしまう(ソースコード\ref{src:StartSetKey})。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
490
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
491 \lstinputlisting[label=src:StartSetKey, caption=setKeyを外部から呼び出す例]{source/StartSetKey.java}
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
492 \lstinputlisting[label=src:SetKey, caption=外部setKeyによりどのkeyを待っているかがわからないCSの例]{source/SetKey.java}
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
493
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
494 このような書き方をされると、CSだけを見てどのkeyに対して待ち合わせを行っているのかわからないため、setKeyを呼び出しているコードを辿る必要がある。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
495 これでは見通しが悪いため、どこでkeyを指定するのか明確にすべきである。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
496
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
497 可読性の低いコードはプログラマの負担となるため、CSが何を待ち合わせているのかそのCSを見ただけで理解できるように記述の分離問題を改善しなくてはならない。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
498
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
499
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
500 \section{setKeyは最後に呼ばなければならない}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
501 setKeyメソッドをコンストラクタで呼ぶ際、setKeyメソッドを必ず最後に呼ばなければならない。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
502
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
503 CSは内部で実行に必要なDSを数えている。DSの取得に成功するとこの値が、デクリメントされ、0になると必要なDSが全て揃ったことと判断されThread poolへ送られる。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
504
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
505 setKey移行に処理を記述した場合、その処理が行われない可能性がありThread poolへと送られNullPointerExceptionを引き起こす。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
506
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
507 \lstinputlisting[label=src:NullPointerException,caption=NullPointerExceptionになる可能性がある]{source/ShowDataFailed.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
508
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
509 ソースコード\ref{src:NullPointerException}は、for文でsetKeyとids.createをcntの回数呼び、動的にDSの取得数を決めようとしている。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
510 しかし、setKeyが最初に呼ばれた際に、DSの取得に成功すると実行可能と判断されてしまう。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
511 runの中でinfoの配列の要素だけ中身を表示させようとしてるが、2回目のasClassでNullPointExceptionを引き起こす。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
512 この問題もインプットAPIの記述の分離により引き起こされるエラーである。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
513
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
514 \newpage
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
515
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
516 今回の場合、コンストラクタ内をソースコード\ref{src:success}のように記述する必要がある。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
517
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
518 \lstinputlisting[label=src:success,caption=NullPointerExceptionにならない記述]{source/ShowData.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
519
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
520 このように記述の順序を考えながらプログラミングしなければならない設計では、バグを引き起こし信頼性を損なうことに繋がる。より自然に扱えるAPI設計にするべきだと考える。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
521
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
522
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
523 \section{動的なsetKey}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
524 setKeyはCSのコンストラクタで指定することが多い。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
525 このとき、指定するkeyは引数などから動的に受け取り、セットすることができる。
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
526 しかし、それでは実際にどんな処理が行われているのかわかりづらく、また、putする部分などの該当するkeyを扱う全てコードを変更しなければならない。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
527 このように、AliceではCSを使いまわすことを考慮して動的なsetKeyを可能にしてしまったせいで、慎重に書かなければプログラムの信頼性が保てないようになってしまっている。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
528 そのため、動的なsetKeyはできないように制限し、コードの見通しを良くする必要がある。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
529 CSに対してインプットとなるkeyが静的に決まれば、待ち合わせているkeyに対してのputのし忘れなどの問題をコンパイル時のモデル検査などで発見することができると考えられる。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
530
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
531 \section{型が推測できない}
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
532 inputDSを受け取るReceiverはデータをObject型で持っており、そのデータをCS内で扱うには正しい型にキャストする必要がある。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
533 しかし、inputDSで指定するのはkeyのみであり、そのデータの型までは分からない。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
534 そのため、DSの型を知るにはputしている部分まで辿る必要がある。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
535 辿ってもflipされている可能性もあるため、最初にそのDSをputしている部分を見つけるのは困難である。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
536 従って、待ち合わせているkeyにどのような型のデータが対応しているのかをそのCSを見ただけで分かるようにするべきと考える。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
537
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
538 \newpage
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
539
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
540 \section{key名と変数名の不一致}
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
541 2.4のCodeSegmentの例題である通り、key名とそのkeyで待ち合わせたDSを受け取るReceiver名は異なることがある。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
542 もしプログラマが適当に命名してしまえば後々混乱を招くため、待ち合わせるkey名とinput DS の変数名一致を強制させたい。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
543
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
544
164
6d6fb11dbd57 add comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 162
diff changeset
545 \section{DataSegmentの型の明瞭性}
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
546 2.5.1で示したように、Aliceに圧縮のMeta Computationを実装した際、DS内に複数の型を同時に持たせるようにした。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
547
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
548
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
549 しかしこれでは、DSが今どの形式を持っているのか、どの状態にあるのかがわかりづらい。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
550 また、DSがbyteArray型を受け取った場合、データであるObject型として渡されたものなのか、MessagePackや圧縮で変換されたものなのかを判別する処理を入れなければならなかった。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
551 今後DSにより多様な形式を同時に持たせることになれば、さらにその判別の処理が増えることになる。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
552
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
553
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
554 Alice自体の拡張・デバッグをしやすくするためにも、DSがどの型を持っているのかをひと目で分かるようにしたい。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
555
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
556
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
557 \section{LocalDataSegmentManagerを複数持てない}
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
558 Aliceでは1つのノードにつき1つしかLocalDSMを立ち上げられない作りになっている。
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
559 そのために以下のような問題が発生した。
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
560
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
561 \subsection{1つのノードで複数台DSM同士のテストが行えない}
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
562 当研究室では分散データベースJungle\cite{Jungle}を開発しており、その分散通信部分にはAliceが用いられている。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
563 Jungleのような分散アプリケーションの開発では、1つのマシン上で複数の疑似ノードを立ててテストを行いたい場合があった。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
564 しかし、Aliceでは一つのアプリケーション内にLocalDSMは一つと決まっていたため、テストに必要なノード数分だけアプリケーションを別で立ち上げなければならないという手間があった。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
565 このためのシェルスクリプトをプログラマが書かなければならないのは本質的な作業ではない。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
566 より気軽にテストができるよう、同一プログラム内でLocalDSMを複数立ち上げられるようにすべきだと考えた。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
567
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
568 \subsection{TopologyManagerの拡張が困難}
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
569 Aliceではより自由度の高い通信を行うために、TopologyManagerに幾つかの機能を追加すること考えていた\cite{OverNAT}。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
570
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
571 その一つがNAT越えの機能である。NAT越えは分散アプリケーション構築における課題の1つでもあるが、プログラマにとってその実装は容易ではない。Topology ManagerにNATを越えたノード間通信機能をつけることにより、ネットワークを気にせずに通信が行えるようにしたい。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
572
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
573 図 \ref{fig:nat}はTopologyManagerを用いてNAT越えをするための設計である。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
574
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
575 \begin{figure}[h]
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
576 \begin{center}
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
577 \includegraphics[width=180mm]{images/nat.pdf}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
578 \end{center}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
579 \caption{複数のTopologyManagerによるNAT越えの実現}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
580 \label{fig:nat}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
581 \end{figure}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
582 \newpage
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
583
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
584 また、別トポロジーで立ち上げたアプリケーション同士を接続する機能も追加したいと考えていた。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
585 TreeTopologyのVNCアプリとStarTopologyのチャットアプリを連携したいという要望が生まれたためである。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
586 別トポロジーのアプリケーションが接続可能になれば、VNC画面のスナップショットをChat上に載せたり、VNC上にChatの内容をコメントとして流すといった拡張が容易になる(図 \ref{fig:vncandchat})。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
587
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
588 \begin{figure}[h]
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
589 \begin{center}
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
590 \includegraphics[width=180mm]{images/vncandchat.pdf}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
591 \end{center}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
592 \caption{別トポロジーのアプリケーションの接続}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
593 \label{fig:vncandchat}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
594 \end{figure}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
595
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
596 TopologyManagerはネットワークごと、トポロジーごとに存在するため、いずれの機能も複数のTopologyManagerを立ち上げ、連携させることで実現可能となる。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
597
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
598 今までのAliceでは、1つのノードに対してTopology Managerは1つと決められていた。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
599 Topology Managerと各ノードのやり取りをするのは、ノードごとに実行されるTopology NodeというMeta Computationである。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
600 Topology Managerは接続されたnodeの情報(nodeNameとIPアドレスのHashMap)を"nodeTable"というKeyに対応するDSとして保存している。
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
601 そしてTopology NodeはTopology Managerから割り当てられたnodeNameを"hostname"というKeyに保存する。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
602 つまり、接続するTopology Managerが増えればTopoloyNodeに割り当てられるnodeNameも増えるため、今までのように"hostname"という1つのKeyだけでは対応できない。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
603 1つのノードに複数のTopologyManagerを対応させるには、TopologyNodeが複数のnodeNameを持つ必要がある。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
604 TopologyNodeが複数のTopologyManagerに対応できるようにしなければならない。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
605
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
606
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
607 そこで、Meta Computationとして、通常のLocal DSMとは別にTopology ManagerごとのMeta Local DSMを立ち上げる方法が考えられる(図 \ref{fig:somehostname})。
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
608 \begin{figure}[h]
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
609 \begin{center}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
610 \includegraphics[width=120mm]{images/somehostname.pdf}
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
611 \end{center}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
612 \caption{複数のTopologyManagerに複数のLocalDSMが対応}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
613 \label{fig:somehostname}
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
614 \end{figure}
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
615
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
616 \newpage
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
617
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
618 それぞれのTopology Managerに対応するLocalDSMを作り、それぞれに対応したnodeNameを格納することで、DSMを切り替えるだけでTopologyNodeの仕様は変えずに複数のTopology Managerに対応できるという設計である。
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
619
151
3c425e8911cf add Topology image
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
620 しかし、現在のAliceのコードではDSMを管理するclassがstatic classであったため、複数のLocal DSMを持つことはできなかった。
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
621 staticを取り除こうとしたところ、Aliceの大部分のコードを修正する必要があることがわかった。
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
622 よって、再設計の際にはstatic classのない実装を行い、DSM切り替えによる方式を実現したい。
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
623
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
624
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
625
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
626
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
627
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
628
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 \chapter{分散フレームワークChristieの設計}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
630
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
631 \section{Christieの必要条件}
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
632 3章でのAliceの問題点を踏まえ、新たにフレームワークを作り直すべきだと考えた。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
633 本章では、新たに作った分散フレームワークChristieの設計を説明する。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
634 Christieに必要な要件は以下のように考える。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
635
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
636 \begin{itemize}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
637 \item {\ttfamily create/setKeyのような煩雑なAPIをシンプルにし可読性を向上させる}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
638 \end{itemize}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
639
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
640 \begin{itemize}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
641 \item {\ttfamily プログラマが型を推測しなくとも整合性がとれるように型を解決し、信頼性を向上させる}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
642 \end{itemize}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
643
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
644 \begin{itemize}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
645 \item {\ttfamily staticなLocalDSMをなくし、複数のインスタンスを同時に立ち上げられるようにすることでスケーラビリティを向上させる}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
646 \end{itemize}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
647
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
648
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
649
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
650 \section{Christieの基本設計}
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
651 基本的にはAliceと同じ、タスクとデータを細かい単位に分割して依存関係を記述し、入力が揃った順から並列実行するというプログラミング手法を用いる。
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
652
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
653
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
654 ChristieはAliceと同じくJavaで書かれている。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
655 しかし将来的に当研究室が開発するGearsOS\cite{GearsOS}に取り入れたいため、GearsOSを構成する言語であるContinuation based C(CbC)に互換可能な設計を目指す。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
656
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
657
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
658 GearsOSではCodeSegment/DataSegmentと同様の概念としてCodeGear/DataGearという名称を用いているため、Christieでもそれに倣いCodeGear/DataGear(以下、CG/DG)と呼ぶこととする。
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
659
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
660 \newpage
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
661
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
662 DGはAliceと同様にDataGearManager(以下DGM)が管理する。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
663 DGMはLocalとRemoteがあり、全てのDGMはCodeGearManager(以下CGM)で管理される。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
664 GearsOSではContextという全てのCG/DGを一括管理するプロセスがあり、AliceのCGMもこのContextに相当する。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
665 全てのCGMはThreadPoolと他のCGM全てのリストを共有しているため、全てのCG/DGにアクセス可能である(図\ref{fig:christieClass})。
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
666
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
667 \begin{figure}[h]
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
668 \begin{center}
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
669 \includegraphics[width=130mm]{images/ChristieClass.pdf}
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
670 \end{center}
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
671 \caption{CGMはCGMとDGMを管理する}
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
672 \label{fig:christieClass}
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
673 \end{figure}
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
674
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
675 CGを記述する際はAlice同様CodeGear.classを継承する。
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
676 CodeGearは
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
677
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
678 void run(CodeGearManager cgm)を持つclassであり、プログラマはrunメソッド内に処理を記述する。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
679 インプットで指定したkeyに対応したDGが全て揃ったとき、runに書かれた処理が実行される。
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
680 ChristieのAPIにはrunの引数で受け取ったCGMを経由してアクセスする。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
681 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスするため、Christieでもその記述方法を採用した。
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
682
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
683 通常のRunnableクラスではこのように引数をうけとることができないが、CodeGearExecutorというRunnableのMeta Computationを挟んだことでこのようにCGMを受け渡しながらの記述を可能にした。
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
684
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
685 詳しいCodeGearの記述方法については、4.4章で説明する。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
686
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
687 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
688
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 \section{APIの改善}
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
690 ここではAliceのAPIの問題を踏まえて設計したChristieのAPIについて、インプット、アウトプット、データの取り出しに分けて説明する。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
691
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
692 \subsection*{アノテーションの導入によるインプットの記述}
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
693 InputAPIにはAliceと同じくTakeとPeekを用意した。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
694 ChristieではInput DG の指定にはアノテーションを使う。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
695 アノテーションとは、クラスやメソッド、パッケージに対して付加情報を記述できるJavaのMeta Computationである。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
696 先頭に@をつけることで記述でき、オリジナルのアノテーションを定義することもできる。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
697
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
698 AliceではInputの受け皿であるReceiverを作り後からkeyをセットしていたが、
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
699 ChristieではInputのためのDGを作り、その上にアノテーションでKeyを指定する(ソースコード\ref{src:take})。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
700
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
701 \lstinputlisting[label=src:take, caption=Takeの例]{source/christie/InputDG.java}
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
702
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
703
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
704 アノテーションで指定したInputDGは、CGを生成した際にCodeGear.class内で待ち合わせの処理が行われる。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
705 これにはJavaのreflectionAPIを利用している。
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
706
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
707 Christieのこのインプットアノテーションはフィールドに対してしか記述できないため、InputDGの生成とTake/Peekの指定とkeyの指定を必ず一箇所で書くことが明確に決まっている。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
708 そのためAliceのように外のCSからのkeyへの干渉をされることがない。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
709 また、アノテーションの指定はRUNTIMEではできないため、動的なkeyの指定も防ぐことができる。
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
710 このように、アノテーションを用いたことで、Aliceの記述の分離問題が解決された。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
711
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
712 ソースコード\ref{src:take}の2行目にあるように、InputDGを宣言する際には必ず型の指定が必要となる。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
713 DataGearは様々な型のデータを扱うためにJavaの総称型で受け取るようにしており、\textless \textgreater 内に指定した型でデータの型を限定できる。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
714 このように記述することで、Christieでは他の部分を辿らなくてもCGを見るだけでインプットされるデータの型が分かるように可読性を向上させた。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
715 また、取得してきたDGが指定と違う型であった場合はエラーとなるため、型の整合性を保ちながら信頼性の高いプログラミングが可能となった。
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
716
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
717 また、Aliceではkeyと変数名の不一致から可読性が低くなっていた。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
718 しかしChristieではkeyと変数名が一致しないとエラーとなるため、自然と読みやすいコードが書けるようになっている。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
719 この部分に関しては、JavaのメタプログラミングAPIであるJavassist\cite{javassist}を用いてアノテーションから変数の自動生成も試みたが、Javassistでは変数生成の前に他のどのクラスも生成してはならないという制限があったため、Christieでは実現できなかった。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
720
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
721
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
722 リモートノードに対してTake/Peekする際は、RemoteTake/RemotePeekのアノテーションを用いる(ソースコード\ref{src:remotetake})。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
723 そのため待ち合わせ先がLocalかRemoteかはアノテーションの違いからひと目でわかるようになった。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
724
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
725 \lstinputlisting[label=src:remotetake, caption=RemoteTakeの例]{source/christie/RemoteInputDG.java}
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
726
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
727
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
728 なお、圧縮のMeta ComputationはAliceと同様で、指定する際にDGM名の前にcompressedをつける(ソースコード\ref{src:compresslocal})。
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
729
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
730 \lstinputlisting[label=src:compresslocal, caption=Localへの圧縮の指定の例]{source/christie/CompressLocal.java}
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
731
159
cad92fc74613 change SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
732 LocalからのTAKEではDGM名の指定がないが、それはLocalでの圧縮は基本想定していないためである。
cad92fc74613 change SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
733 しかし、Localでの圧縮をしようと思えばRemoteTakeを用いて間接的にすることは可能である。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
734
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
735
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
736 \subsection*{DGMを指定してのアウトプットの記述}
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
737 OutputAPIにはput/flipを用意した。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
738 put/flipのメソッドはDGMに用意されている。
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
739 cal.java
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
740 CodeGear.classにはDGMを取得するメソッドがあり、それを用いて書き込みたいDGMを指定して直接putする。
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
741 そのためLocal/Remoteの切り替えは指定するDGMの切り替えによって行う。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
742 ソースコード\ref{src:put}、\ref{src:remoteput}はLocalとRemoteにputする記述の例である。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
743
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
744 \lstinputlisting[label=src:put, caption=Localへputする例]{source/christie/Put.java}
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
745 \lstinputlisting[label=src:remoteput, caption=Remoteへputする例]{source/christie/RemotePut.java}
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
746
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
747 \newpage
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
748
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
749 flipも同様にDGMに直接DGを渡す(ソースコード\ref{src:flip})。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
750
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
751 \lstinputlisting[label=src:flip, caption=Remoteへflipする例]{source/christie/Flip.java}
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
752
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
753 ChristieではDGMに対して直接putするため、AliceのODSにあたる部分はない。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
754 ODSを経由するより直接DGMに書き込むような記述のほうが直感的であると考えたためである。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
755
152
9c1b9562f441 add chapter4
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 151
diff changeset
756
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
757 \subsection*{型を指定しないデータの取り出し}
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
758 AliceのasClassに相当するのがgetDataである。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
759 ソースコード\ref{src:getdata}はgetDataを用いてInputDGからデータを取得する例である。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
760
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
761 \lstinputlisting[label=src:getdata, caption=getDataの例]{source/christie/GetData.java}
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
762
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
763 Aliceと違う点は、プログラマが型を指定しなくて良い点である。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
764 4.3で示したように、InputDGを生成する際には型を指定する。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
765 この型は内部で保存され、リモートノードと通信する際も保たれる。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
766 このようにgetDataするだけでプログラマが指定しなくとも正しい型で取得できるため、プログラマの負担を減らし信頼性を保証することができる。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
767
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
768 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
769
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
770 \section{CodeGearの記述方法}
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
771 以下のコードはLocalDSMにputしたDGを取り出して表示するのを10回繰り返す例題である。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
772
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
773 \lstinputlisting[label=src:StartCodeGear, caption=StartCodeGearの例]{source/christie/StartTest.java}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
774 \lstinputlisting[label=src:TestCodeGear, caption=CodeGearの例]{source/christie/TestCodeGear.java}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
775
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
776 Alice同様、ChristieでもInputDGを持たないStartCGから処理を開始する。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
777 StartCGはStartCodeGear.classを継承することで記述できる。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
778 AliceではStartCSもCodeSegment.classを継承して書かれていたため、どれがStartCSなのか判別しづらかったが、Christieではその心配はない。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
779
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
780 \newpage
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
781
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
782 StartCGを記述する際にはcreateCGMメソッドでCGMを生成してコンストラクタに渡す必要がある。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
783 ソースコード\ref{src:StartCodeGear}の8行目でそれが行われている。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
784 createCGMの引数にはリモートノードとソケット通信する際使うポート番号を指定する。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
785 CGMを生成した際にLocalDGMやリモートと通信を行うためのDaemonも作られる。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
786
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
787 CGに対してアノテーションから待ち合わせを実行する処理はsetupメソッドが行う。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
788 そのためソースコード\ref{src:StartCodeGear}の13行目、ソースコード\ref{src:TestCodeGear}の10行目のように、newしたCGをCGMのsetupメソッドに渡す必要がある。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
789 AliceではnewすればCGが待ちに入ったが、Christieでは一度CGをnewしないとアノテーションから待ち合わせを行う処理ができないため、newの後にsetupを行う。
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
790 そのため、CGの生成には必ずCGMが必要になる。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
791 runでCGMを受け渡すのはこのためである。
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
792 なお、StartCGはインプットを持たないため、setupを行う必要がなく、newされた時点でrunが実行される。
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
793
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
794 \newpage
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
795
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
796
148
cf9c3be20362 add Alice abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 146
diff changeset
797 \section{DataGearManagerの複数立ち上げ}
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
798 AliceではLocalDGMがstaticで書かれていたため複数のLocalDGMを立ち上げることができなかった。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
799 しかしChristieではCGMを2つ生成すればLocalDGMも2つ作られる。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
800 複数のLocalDGM同士のやりとりも、Remoteへの接続と同じようにRemoteDGMをproxyとして立ち上げアクセスする(図\ref{fig:remoteDGM})。
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
801
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
802 \begin{figure}[h]
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
803 \begin{center}
155
573db146fa93 change image size
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 154
diff changeset
804 \includegraphics[width=130mm]{images/DGM.pdf}
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
805 \end{center}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
806 \caption{RemoteDGMを介して他のLocalDGMを参照}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
807 \label{fig:remoteDGM}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
808 \end{figure}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
809
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
810 \newpage
149
d57aa814a69a add source, add chapter2
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 148
diff changeset
811
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
812 ソースコード\ref{src:multilocal}は、LocalDSMを2つ立ち上げ、お互いをリモートに見立てて通信する例である。
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
813 11行目にあるように、RemoteDGMを立ち上げるにはCGMが持つcreateRemoteDGMメソッドを用いる。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
814 引数にはRemoteDGM名と接続するリモートノードのIPアドレス、ポート番号を渡している。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
815
154
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
816 \lstinputlisting[label=src:multilocal, caption=LocalDGMを2つ作る例]{source/christie/MultiLocal.java}
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
817
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
818 リモートの場合の同じようにアクセスできることで、コードの変更をせずに、同一マシン上の1つのアプリケーション内で分散アプリケーションのテストができるようになった。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
819
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
820 また、CGMは内部にCGMのリストをstaticでもっており、複数生成したCGMを全て管理している。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
821 つまり、メタレベルではRemoteDGMを介さずに各LocalDGMに相互アクセス可能である。
14e0a5a932cf add example CodeGear
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
822 そのため、Christieでは容易にNAT越えが実装できることが期待できる。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
823
150
6e9c42922c8d add chapter3
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
824 \section{DataGearの拡張}
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
825 Aliceではデータの多態性を実現するためにDS内に複数のデータ形式を保持していた。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
826 しかしChristieではデータ形式ごとに別のclassに分けている。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
827 DataGearを継承したMessagePackDataGearと、それを更に継承したCompressedDataGearを用意した。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
828 そのため子クラスは親クラスのデータ形式を保持しながら新しいデータ形式を持つ形になっている。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
829 クラスを見るだけで今どの形式を保持しているかわかるようになったため、デバッグがしやすくなった。
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
830
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
831 \section{通信フロー}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
832 本章で説明したChristieの設計をいくつか例をあげてChristieの通信のフローをシーケンス図を用いて解説する。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
833 図\ref{fig:localSequence}はLocalDGMにTakeを行い、LocalDGM内にDGがあったときの処理の流れである。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
834
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
835 \begin{figure}[h]
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
836 \begin{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
837 \includegraphics[width=160mm]{images/LocalSequence.pdf}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
838 \end{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
839 \caption{LocalDGMにTakeしたときのフロー}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
840 \label{fig:localSequence}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
841 \end{figure}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
842
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
843 プログラマはmainでCGMとStartCGを生成する。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
844 CGMと同時にLocalDGMは作られる。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
845 CGが生成され、setupメソッドが呼ばれるとアノテーションからTAKEコマンドが作られ実行される。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
846 CGは生成したインプットコマンドの総数を初期値としたカウンタを持っており、コマンドが解決される(InputDGが揃う)たびにカウンタは減っていき、0になるとrun内の処理がThreadPoolへ送られる。
153
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
847
528fca199827 add some source
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 152
diff changeset
848
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
849 \newpage
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
850
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
851 図\ref{fig:remotePutSequence}は、LocalDGMにTakeを行うが、LocalDGM内にDGがなかったためにPutの待ち合わせをするときの処理の流れである。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
852 mainなどの最初の処理は図\ref{fig:localSequence}と同様のため省略する。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
853
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
854 \begin{figure}[h]
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
855 \begin{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
856 \includegraphics[width=160mm]{images/RemotePutSequence.pdf}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
857 \end{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
858 \caption{RemoteDGMにPutしたときのフロー}
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
859 \label{fig:remotePutSequence}
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
860 \end{figure}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
861 LocalまたはリモードノードからPUTコマンドが実行された際、もしwaitListにPutしたDGを待っているコマンドがあれば実行される。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
862
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
863
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
864 \newpage
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
865 図\ref{fig:remoteTakeSequence}は、RemoteDGMにTakeを行ったときの処理の流れである。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
866
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
867 \begin{figure}[h]
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
868 \begin{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
869 \includegraphics[width=165mm]{images/RemoteTakeSequence.pdf}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
870 \end{center}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
871 \caption{RemoteDGMにTakeしたときのフロー}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
872 \label{fig:remoteTakeSequence}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
873 \end{figure}
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
874
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
875 StartCGで事前にRemoteDGMを生成しておく。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
876 RemoteTakeアノテーションからRemoteDGMに対するTakeコマンドを生成し実行する。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
877 RemoteTakeのようにリモートからの応答を待つコマンドはRemoteDGMのwaitListに入る。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
878 そして、MessagePack形式に変換したRemoteCommandを作成し、それをRemoteDGMが参照している別ノードのLocalDGMに送る。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
879
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
880 それを受け取った側のLocalDGMは、DGがあればREPLYコマンドを生成して送り返す。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
881 もしDGがなければ、リモートから来たコマンドもローカルの場合と同様にLocalDGMのwaitListに入る。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
882
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
883 REPLYを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決する。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
884
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
885 \chapter{再設計への考察}
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
886 Christieではアノテーションを用いることで分離問題を解決することができた。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
887 このようにアノテーションを用いたAPIはAkkaやHazelcastにはないため、より記述性が高いフレームワークとなったと言える。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
888
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
889 また、設計をし直したことでAliceより幅広いMeta Computationの実装が容易になった。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
890 これにより細かな分散プログラムの実装が可能になった。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
891 ロケーション透過性の高いAkkaやHazelcastではこのようなプログラミングは困難である。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
892
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
893 keyを用いたプロトコル
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
894 また、現在はノードごとにDGMとDGのkeyが与えられているが、将来的にはURLのような大域で使えるkeyを用意することでより手軽なRemoteDGMへのアクセスを提供できると考えられる。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
895
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
896 InputDGの指定において、CGにDGを宣言するというのは、DGをそのままflipできるようにするためであった。
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
897 逆に言えばそれ以外でDataGear型でプログラマが利用することは少ない。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
898 そのため、DGを宣言せずにアノテーションから生成し完全にメタレイヤーに移すことで、より分かりやすい記述が可能だと考える。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
899 flipする場合は、keyを指定するだけで良い。
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
900
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
901 また、put/flipする際にDGM名を直接指定する書き方も、まだひと目でアウトプットしている部分が分かるようなシンタックスではないため、改善の余地がある。
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
902
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
903 \chapter{結論}
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
904 \section{まとめ}
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
905 本研究では、まず分散フレームワークに必要な要件を洗い出し、Akka、Hazelcastと比較しながら分散フレームワークAliceが分散性を意識して記述できる特徴をもつことを示した。
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
906 また、Aliceの持つCode Segment/Data Segmentの計算モデルや記述方法、Meta Computationについてを説明し、AliceでNAT越えを実現するための手法を示した。
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
907 さらに現状のAliceの問題点として、NAT越えをするために必要なLocal Data Gear Managerの複数立ち上げができないこと、分散プログラムのテストがしづらいこと、APIシンタックスの分離により信頼性が損なわれていること、型の整合性がとれていないことなどを示し、再設計の必要性を述べた。
175
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 174
diff changeset
908 そして、分散フレームワークChristieの設計を示し、Code Gear ManagerというCode Gear/Data Gearの管理機構を挟むことでData Gear Managerを複数立ち上げられるようにした。
7e7fe5e28ba4 add presen directory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 174
diff changeset
909 これによりテストが容易になり、提案したNAT越えの手法に対応できる。
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
910 また、アノテーションを用いることでシンタックスの分離問題を解決し、さらに型整合のとれたより信頼性の高い記述が可能になったことを示した。
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
911 そして、これら実装したChristieに対しても更に改善すべき点を考察した。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
912
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
913 \section{今後の課題}
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
914 \subsection*{TopologyManagerの実装}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
915 Aliceと同じく、静的・動的なトポロジー管理のできるTopologyManagerの実装が必要である。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
916 Christieでは複数のLocalDSMが立ち上げ可能なため、TopologyManagerでのNAT超えも実装し実用性があるかを検証する
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
917 また、通信の信頼性を保証するために、TopologyManagerがダウンした際に新たなTopologyManagerを立ち上げるMeta Computationも必要だと考える。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
918
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
919
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
920 \subsection*{実用性の検証}
162
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
921 本論文ではChristieの設計と基本実装までを行ったが、それがどれほどの分散性能を持っているのかはまだ計測していない。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
922 CG/DGのプログラミングモデルなどの基本的にはAliceと同じであるが、アノテーションの処理がどれほどのオーバーヘッドに繋がっているか現時点では不明である。
15fed7e1263e change chapter 1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 161
diff changeset
923 そのため、Aliceと同等の速度性能を持っているか、コードの量や複雑度は抑えられているかなどを分散処理の例題を用いて測定する必要がある。
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
924
176
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
925
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
926 \subsection*{Jungleとの統合}
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
927 DGMは一種のデータベースであると述べたが、現状のDGMはデータベースに必要なトランザクションを持っていない。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
928 当研究室で開発しているJungleデータベースはトランザクションを持っており、更にマージ可能な差分管理システムを持っている。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
929 そのためJungleデータベースとの統合することで、DGMへの操作を信頼性高くすることが望ましい。
055266d62d84 add slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
930
170
31b1762b4015 add conclusion
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 167
diff changeset
931 \subsection*{GearsOSへの移行}
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
932 GearsOSはまだ開発途中であったため、本論文の作成時点ではChristieのような分散機能を実装することが叶わなかった。
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
933 GearsOSではモデル検査機構akasya\cite{akasya}があるため、待ちに入っているkeyのputし忘れなどをコンパイルの段階で見つけることができる。
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
934 GearsOS上で分散プログラミングができればより信頼性の高いプログラミングが期待できるため、将来的にはChristieをGearsOSの分散機構として取り込みたい。
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
935
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
936 GearsOSにChristieを移行するには、GearsOSにJavaのアノテーションに相当するMeta Computationを実装する必要がある。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
937 そしてChristieでは実現できなかったアノテーションからの変数の自動生成が行えれば更にプログラミングしやすいAPIになると考えられる。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
938
160
e20f743b5418 add reference
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
939
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
940 \chapter{付録}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
941 \section{独自のアノテーション定義}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
942 Christieのアノテーションの実装方法と、そのアノテーションからtakeを実行する部分を解説する。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
943
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
944 ソースコード\ref{src:take}、\ref{src:remotetake}がChristie独自のアノテーションの定義である。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
945
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
946 \lstinputlisting[label=src:take, caption=Takeの実装]{source/christie/TakeAnnotation.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
947 \lstinputlisting[label=src:remotetake, caption=RemoteTakeの実装]{source/christie/RemoteTakeAnnotation.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
948
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
949 @Targetや@Retentionはアノテーション定義のためのアノテーション、メタアノテーションである。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
950 @Targetには、フィールドやメソッド、コンストラクタなど、このアノテーションの付加対象となる構文要素が何かを記述する。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
951 @Retentionには、SOURCE・CLASS・RUNTIMEが選択でき、アノテーションで付加された情報がどの段階まで保持されるかを定義する。reflectionAPIを利用するにはRUNTIMEでなければならないため、Christieのアノテーションの@Retentionは全てRUNTIMEである。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
952
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
953 \newpage
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
954
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
955 定義したアノテーションの仕様例がソースコード\ref{src:takeAno}、\ref{src:remotetakeAno}である。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
956
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
957 \lstinputlisting[label=src:takeAno, caption=Takeアノテーションの使用例]{source/christie/InputDG.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
958 \lstinputlisting[label=src:remotetakeAno, caption=RemoteTakeアノテーションの使用例]{source/christie/RemoteInputDG.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
959
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
960 アノテーションを使う際、()内に記述する値がソースコード\ref{src:take}のvalueやソースコード\ref{src:remotetake}のdsmNameといったキーに保存される。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
961 通常キーに対して値を入れる場合は、ソースコード\ref{src:remotetakeAno}のようにkey=の形で記述しなければならないが、Takeのようにキーが1つの場合、キー名をvalueにすることでその記述を省略することができる。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
962
158
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
963 setupメソッド内では生成されたフィールドに対してアノテーションを含めた情報を処理している。
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
964 これにはJavaのreflectionAPIが使用されている。
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
965 reflectionAPIでは対象となるクラスのフィールドやメソッド、それに対するアノテーションやアノテーションが保持するキーにアクセスすることができる。
2bf8a1edcecc add SequenceDiagram
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 157
diff changeset
966 ソースコード\ref{src:setup}はsetupメソッド内でreflectionAPIを用いてアノテーションからTakeコマンドを作成する部分である。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
967
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
968 \lstinputlisting[label=src:setup, caption=reflectionAPIでフィールドの情報を取得]{source/christie/Setup.java}
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
969
174
f0e9cc7d13f9 minor change
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
970 フィールドから取得したDGとアノテーションから取得したkeyからインプットコマンド(TAKE/PEEK)を生成し、DGMへ送って実行する。
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
971
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
972
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
973 \chapter{謝辞}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
974 本研究の遂行、また本論文の作成にあたり、ご多忙にも関わらず終始懇切なる御指導と御
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
975 教授を賜わりました河野真治准教授に深く感謝したします。
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
976
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
977 そして、数々の貴重な御助言と技術的指導を戴いた伊波立樹さん、他フレームワークの調査に協力してくださった清水隆博さん、赤堀貴一さん、浜瀬裕暉さん、大城由也さん、並びに信頼研究室の皆様に感謝いたします。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
978 先行研究であるAlice, Federated Linda, Jungle, TreeVNCがなければ本研究はありませんでした。 これら先行研究の設計や実装に関わった全ての先輩方に感謝いたします。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
979
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
980 また、本フレームワークの名前の由来となったクリスティー式戦車の生みの親、ジョン・W・クリスティーに敬意を評します。
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
981
167
9a072c2d6e12 add English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 166
diff changeset
982 最後に、日々の研究生活を支えてくださった新里幸恵さん、大嶺志歩さん、阿波連知恵さん、米須智子さん、菱田正和さん、情報工学科の方々、そして家族に心より感謝いたします。
156
bc9be2d40d0d add requiremants
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
983
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
984
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
985 %参考文献
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
986 \nocite{*}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
987 \bibliographystyle{junsrt}
157
d620f126a383 change abstract & chapter1
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 156
diff changeset
988 \bibliography{reference}
146
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
989
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
990 %発表履歴
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 \addcontentsline{toc}{chapter}{発表履歴}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
992 %\input{history.tex}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
993
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
994 %付録
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
995 \addcontentsline{toc}{chapter}{付録}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
996 \appendix
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
997 %\input{sources.tex}
a2aaf1d0bf01 add Makefile
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
diff changeset
998 \end{document}