Mercurial > hg > Papers > 2014 > nobuyasu-master
annotate paper/chapter3.tex @ 49:7b595f4b341e
modified chapter3.txt
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 31 Jan 2014 11:19:32 +0900 |
parents | 6553b7a3717c |
children | faa708c2958b |
rev | line source |
---|---|
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
1 \chapter{Jungle の分散実装} |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
2 本章では Jungle に行った分散実装について述べる. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
3 前章では Jungle のアーキテクチャと分散設計について説明した. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
4 トポロジーの形成と他サーバノードのデータのアクセス方法には Alice を使用する. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
5 また, Jungle ではデータ編集のログとして TreeOperationLog がある. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
6 この TreeOperationLog を Alice により他サーバノードへ送ることでデータの分散を行う. |
16
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
7 |
20 | 8 \section{Alice のトポロジーマネージャーの利用} |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
9 |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
10 \subsection{トポロジーマネージャーの起動} |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
11 Alice を用いてサーバノードでトポロジーの形成を行う方法を述べる. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
12 Alice のトポロジーマネージャーの起動は\ref{src:alice_dot}の様に行う. |
20 | 13 (\ref{src:alice_ntm_run}). |
14 \begin{lstlisting}[frame=lrbt,label=src:alice_ntm_run,caption=Alice によるネットワークトポロジーマネージャーの起動,numbers=left] | |
15 % java -cp Alice.jar alice.topology.manager.TopologyManager -p 10000 -conf ./topology/tree5.dot | |
16 \end{lstlisting} | |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
17 -p オプションはトポロジーマネージャーが開くポートの番号, -conf オプションには dot ファイルのパスを渡す. |
20 | 18 |
19 ポート番号は Alice により記述された並列分散プログラムの起動時に渡す必要がある. | |
20 dot ファイルには, トポロジーをどのように形成するかが書かれている. | |
21 以下に, サーバノード数5で, 2分木ツリー構造を形成する dot ファイルの例を示す(\ref{src:alice_dot}). | |
18
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
22 \begin{lstlisting}[frame=lrbt,label=src:alice_dot,caption=ネットワークトポロジー設定用 dot ファイル,numbers=left] |
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
23 % cat tree5.dot |
16
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
24 digraph test { |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
25 node0 -> node1 [label="child1"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
26 node0 -> node2 [label="child2"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
27 node1 -> node0 [label="parent"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
28 node1 -> node3 [label="child1"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
29 node1 -> node4 [label="child2"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
30 node2 -> node0 [label="parent"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
31 node3 -> node1 [label="parent"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
32 node4 -> node1 [label="parent"] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
33 } |
18
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
34 \end{lstlisting} |
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
35 |
20 | 36 node0 や node1 はサーバノードの名前を示す. |
37 サーバノードの間にはラベルがあり, Alice 上ではこのラベル | |
38 に指定される文字列(キー)を使うことで他のサーバノードのデータへアクセスすることができる. | |
39 node0 -> node1 はサーバノード同士の繋がりを示している. | |
40 次に続く label="child1" は, node0 が node1 のデータに"child1"という文字列を使うことでアクセス | |
41 できることを示す. | |
18
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
42 |
21 | 43 dot ファイルを読み込んだ Alice のトポロジーマネージャーに対して, サーバノードは |
20 | 44 誰に接続を行えばよいかを訪ねる. |
45 トポロジーマネージャーは訪ねてきたサーバノードに対してノード番号を割り振り, dot ファイル | |
46 に記述している通りにサーバノード同士が接続を行うよう指示をだす. | |
18
fc14b1876141
Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
47 |
20 | 48 トポロジーマネージャーは接続要求先を聞いてくるサーバノードに対して名前を割り振り, 接続相手を伝える. |
49 dot ファイル\ref{src:alice_dot}により形成されるトポロジーを図\ref{fig:tree_topology}に示す. | |
16
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
50 |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
51 |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
52 \begin{figure}[htpb] |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
53 \begin{center} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
54 \includegraphics[scale=0.70]{figures/tree_topology.pdf} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
55 \caption{Alice によるネットワークトポロジー形成} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
56 \label{fig:tree_topology} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
57 \end{center} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
58 \end{figure} |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
59 |
17
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
60 矢印に書かれている文字列は, 相手のデータにアクセスするキーを示す. |
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
61 "child1", "child2", "parent" というキーを使うことで別のサーバノードにあるデータを取得することができる. |
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
62 %子共となるノードは "parent" キーにより親の DSM (Remote DSM) にアクセスすることができる. |
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
63 %また, 親も子供となるノードの DSM に対して "child1" や "child2" キーによりアクセスすることが可能となる. |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
64 これでトポロジーマネージャーが起動される. |
16
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
65 |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
66 \subsection{アプリケーション側の記述} |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
67 次は Jungle 側のプログラムが最初に Alice のトポロジーノードと通信を行うようにする. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
68 そのためには Alice の TopologyNode クラスに必要な情報を渡してインスタンスを生成する(\ref{src:app_start}). |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
69 \begin{lstlisting}[frame=lrbt,label=src:app_start,caption=アプリケーションの起動,numbers=left] |
20 | 70 public static void main( String[] args ) throws Exception |
71 { | |
72 RemoteConfig conf = new RemoteConfig(args); | |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
73 new TopologyNode(conf, new StartJungleCodeSegment(args, conf.bbsPort)); |
20 | 74 } |
75 \end{lstlisting} | |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
76 TopologyNode クラスは第2引数として CodeSegment を受け取る. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
77 TopologyNode のインスタンスはまず初めにトポロジーマネージャーへ接続を行う. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
78 次にトポロジーマネージャーから受け取った情報を元に別のサーバノードとトポロジーの形成を行う. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
79 その後, 第2引数で渡された StartJungleCodeSegment の実行を行う. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
80 StartJungleCodeSegment には通常のアプリケーションの処理が書かれる. |
20 | 81 |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
82 アプリケーションの起動時にはコンフィグの情報として, トポロジーマネージャーが動いているサーバのドメインとポート番号を |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
34
diff
changeset
|
83 渡す必要がある. |
21 | 84 例えば, mass00.cs.ie.u-ryukyu.ac.jp というサーバ上でポート番号10000を指定してトポロジーマネージャーを |
85 起動した場合は次のようになる(\ref{src:run_program}). | |
86 \begin{lstlisting}[frame=lrbt,label=src:run_program,caption=トポロジーマネージャーの利用,numbers=left] | |
87 % java Program -host mass00.cs.ie.u-ryukyu.ac.jp -port 10000 | |
88 \end{lstlisting} | |
17
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
89 |
39
63eca978482f
Writed description of experiment
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
38
diff
changeset
|
90 \section{Alice を用いての分散実装} |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
91 Aliceのポロジー形成と他のサーバのデータへのアクセスする機構を用いるためには, Aliceが |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
92 提供するプログラミングスタイルに沿わなければならない. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
93 それはDataSegment(データ)とCodeSegment(タスク)によるプログラムである. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
94 ここではまずDataSegmentとCodeSegmentによるプログラムの方法について説明し, 他サーバとの |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
95 通信部分の実装について述べる. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
96 |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
97 \subsection{Alice によるプログラミング} |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
98 AliceはDataSegment(データ)とCodeSegment(タスク)単位でプログラミングを行うことを述べた. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
99 CodeSegmentには計算に必要なDataSegmentが登録される. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
100 そしてDataSegmentが準備され次第CodeSegmentによる計算が実行される. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
101 DataSegmentの取得は文字列のキーを使うことで行える. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
102 以下のコードにCodeSegmentの例を示す. |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
103 \begin{lstlisting}[frame=lrbt,label=src:syslog_nfconntrack,caption=CodeSegmentの実行,numbers=left] |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
104 public class TestCodeSegment extends CodeSegment { |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
105 public Receiver arg1 = ids.create(CommandType.TAKE); |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
106 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
107 public TestCodeSegment() { } |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
108 |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
109 public void run() { |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
110 int count = ds.asInteger(); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
111 count++; |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
112 System.out.println("count = "+count); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
113 if(c > 10) { exit(0); } |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
114 CodeSegment cs = new TestCodeSegment(); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
115 cs.setKey("count"); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
116 ods.update("local", "count", c); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
117 } |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
118 |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
119 public static void main(String[] args) { |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
120 CodeSegment cs = new TestCodeSegment(); |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
121 cs.arg1.setKey("local", "count"); // setKey API |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
122 cs.ods.update("local", "count", 0); |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
123 } |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
124 } |
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
125 \end{lstlisting} |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
126 これは, 数字を1から10まで出力を行い終了するプログラムである. |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
127 コードの説明を行う. |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
128 17行目から19行目の処理が最初に行われる. |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
129 まずTestCodeSegmentというCodeSegmentのインスタンスcsを生成する. |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
130 csはarg1というReceiverクラスのフィールドを保持しており, Receiverクラスは |
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
131 DataSegmentを受けとるためのクラスである. |
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
132 arg1に対しsetKey APIを使うことで, 使用したいDataSegmentのキー"count"を登録することができる. |
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
133 これによりキー"count"に対してデータが登録された場合, そのデータを受け取りcsの計算が自動で始まる. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
134 setKey APIの第一引数に渡している"local"はどのマシンのDataSegmentにアクセスするのかを指定している. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
135 この場合は自分自身を表す"local"になる. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
136 |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
137 データの登録は\verb|ods.update|により行える. |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
138 上記のコード19行目ではupdateにより"count"をキーとして数値の0を登録している. |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
139 updateがされるとcsの計算が始まり別スレッドにより8行目からの処理が行われる. |
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
140 |
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
141 updateによりキー"count"に登録された数値0はReceiverであるdsを使って取ることができる. |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
142 7行目から13行目では\verb|ds.asInteger()|により, "count"に登録したデータの中身を受け取りインクリメントし出力する. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
143 そして最後には\verb|ods.update|を行っている. |
43
34ac359f20f1
Writed programming using Alice
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
42
diff
changeset
|
144 新たなTestCodeSegmentも生成しており, これはインクリメントされた"count"がupdateされることで実行される. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
145 この一連の処理を"count"の数値が10以上になるまで行う. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
146 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
147 DataSegmentへデータの追加とCodeSegmentの実行について表した図\ref{fig:testcodesegment}になる. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
148 \begin{figure}[htpb] |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
149 \begin{center} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
150 \includegraphics[scale=0.70]{figures/testcodesegment.pdf} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
151 \caption{DataSegmentとCodeSegmentによるプログラムの例} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
152 \label{fig:testcodesegment} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
153 \end{center} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
154 \end{figure} |
10
02c7fc1cda10
Writed description of TreeOperationLog
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
155 |
11 | 156 |
42
585196deaace
Added figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
39
diff
changeset
|
157 % Alice の他サーバノードへの"log"のputの問題 |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
158 |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
159 \subsection{他サーバノードのDataSegmentへアクセス} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
160 Aliceにおける基本的なプログラミングは述べた. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
161 次はネットワークを介して他サーバノードのDataSegmentにアクセスするプログラムについて述べる. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
162 |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
163 まず, Aliceにより2分木3ノードのトポロジーが形成された場合を想定する. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
164 その時に実際に作られるトポロジーを図\ref{fig:remote_cs}に示す. |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
165 \begin{figure}[htpb] |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
166 \begin{center} |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
167 \includegraphics[scale=0.70]{figures/remote_codesegment.pdf} |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
168 \caption{トポロジーの形成} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
169 \label{fig:remote_cs} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
170 \end{center} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
171 \end{figure} |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
172 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
173 ネットワークを介したDataSegmentへのアクセスはそのサーバノードを示す |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
174 文字列のキーを追加することで行える. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
175 他サーバノードを示す文字列のキーとは図\ref{fig:remote_cs}に矢印の隣に書かれている文字列 |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
176 "parent", "child1", "child2" のことを指す. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
177 例えば, server node0 が server node1のDataSegmentに入っている"count"というデータを |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
178 を使用したい場合は, 次のようにsetKeyを行えばよい(\ref{src:remote_cs1}). |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
179 \begin{lstlisting}[frame=lrbt,label=src:remote_cs1,caption=CodeSegmentで他サーバノードのDataSegmentを使用する,numbers=left] |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
180 CodeSegment cs = new RemoteCodeSegment(); |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
181 cs.arg1.setKey("child1", "count"); |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
182 \end{lstlisting} |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
183 また, 他サーバノードのDataSegmentにデータを送りたい場合は, putを行うときにサーバノードへのキーを |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
184 追加すればよい. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
185 例として, server node1やserver node2がserver node0のDataSegmentに"message"というキーでデータを追加したい場合 |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
186 次のようになる(\ref{src:remote_cs2}). |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
187 \begin{lstlisting}[frame=lrbt,label=src:remote_cs2,caption=他サーバーノードのDatasSegmentにデータを追加する,numbers=left] |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
188 ods.put("parent", "message", "Hello parent"); |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
189 \end{lstlisting} |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
190 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
191 \subsection{独自クラスのインスタンスの送受信} |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
192 最後に, 独自クラスのインスタンスのDataSegmentでの扱い方について述べる. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
193 AliceではMessagePackを用いてシリアライズを行い他サーバノードへと送信している. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
194 MessagePackはクラス単位でシリアライズを行うことができる. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
195 そのため, Aliceではプリミティブな型に限らずクラスのインスタンスをDataSegmentとして |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
196 扱うことができる. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
197 |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
198 MessagePackによりシリアライズとなるクラスはいくつか制限がある. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
199 それはそのクラスに@Messageアノテーションを付けることと, そのクラスが保持するフィールドが |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
200 MessagePackによりシリアライズ可能であることである. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
201 例えば次のようなクラスである. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
202 \begin{lstlisting}[frame=lrbt,label=src:msgpack1,caption=MessagePackによりシリアライズ可能なクラス1,numbers=left] |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
203 import org.msgpack.annotation.Message |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
204 |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
205 @Message |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
206 public class Student { |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
207 String name; |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
208 int age; |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
209 } |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
210 \end{lstlisting} |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
211 上記のStudenクラスはプリミティブ型しか保持していない. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
212 そのためシリアライズが可能である |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
213 また, 次のようなクラスもシリアライズ可能な型となる. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
214 \begin{lstlisting}[frame=lrbt,label=src:msgpack2,caption=MessagePackによりシリアライズ可能なクラス2,numbers=left] |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
215 import org.msgpack.annotation.Message |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
216 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
217 @Message |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
218 public class Class { |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
219 List<Student> studentList; |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
220 } |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
221 \end{lstlisting} |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
222 この場合, フィールドはプリミティブな型でないStudentクラスのフィールドを保持している. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
223 しかし, Studentクラスはシリアライズ可能な形で作成しているため, クラスのフィールドとして |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
224 保持しても問題はない. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
225 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
226 これらの制約にそった形で作成しDataSegmentにネットワークを介してクラスのインスタンス |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
227 をupdateすることができる. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
228 DataSegmentから受け取ったデータはそのままではシリアライズされたものため, 一度手元で |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
229 元のクラスにコンバートすることで扱う. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
230 例として, AliceにおけるStudenクラス(Listing\ref{src:msgpack1})のコンバートを次に示す. |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
231 \begin{lstlisting}[frame=lrbt,label=src:msgpack3,caption=DataSegment,numbers=left] |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
232 // public Receiver arg1 = ids.create(CommandType.PEEK); |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
233 Student s = arg1.asClass(Student.class); |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
234 \end{lstlisting} |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
235 MessagePackでシリアライズ可能な形としているためDataSegmentはネットワークを介して |
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
236 送受信が可能である. |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
237 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
238 |
46
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
239 \section{ログのシリアライズ} |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
240 Jungleの具体的な分散実装について述べる. |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
241 実装にあたり, 解決しなければならない問題はまず, ログをDataSegmentで扱える形にすることである. |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
242 そのためには, @Messageアノテーションを付けたログのクラスの作成を行わなければならない. |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
243 |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
244 |
48
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
245 \subsection{TreeOperationLogのシリアライズ} |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
246 TreeOperationLogをシリアライズ可能な形にするにあたって気をつけなければならないのが, フィールドを |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
247 シリアライズ可能にする部分である. |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
248 TreeOperationLogはTreeOperationをいくつも保持し, TreeOperationはNodePathとNodeOperationを保持するものであった. |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
249 そのため, これら全てシリアライズ可能な形にしなければならない. |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
250 |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
251 基本的にこれらの実装は, フィールドを全てプリミティブなものだけにすればよい. |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
252 MessagePackはListを扱うこともできるため, TreeOperationLogで継承されていたIterableの挙動もListを使うことで |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
253 実装を行うことができた. |
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
254 |
49
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
255 \subsection{ログに対する情報の追加} |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
256 TreeOperationLogをシリアライズ可能な形にした後, 問題が発生した. |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
257 それは, TreeOperationLog事態は木の名前を保持していないというものである. |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
258 そのため, TreeOperationLogだけを受け取っても, そのログがどの木に対して行われるのか |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
259 わからなかった. |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
260 そこで, TreeOperationLogの情報だけでなく, 木の名前とUUID, それとtimestampの情報も付与 |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
261 してシリアライズが可能なNetworkTreeOperationLogの実装を行った. |
48
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
262 |
49
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
263 \subsection{NetworkTreeOperationLogの実装} |
7b595f4b341e
modified chapter3.txt
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
48
diff
changeset
|
264 NetworkTreeOperationLogの実装の一部を以下に示す. |
48
6553b7a3717c
Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
265 |
47 | 266 |
44
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
267 |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
268 |
618adf0a9b2b
Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
43
diff
changeset
|
269 |
46
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
270 % TreeOperationLog に木の名前の情報がない |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
271 % そのため木の名前を追加して持たせた |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
272 % 木がなければそのばでつくるようにした |
17
dfa2fd4658b2
Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
273 |
46
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
274 \subsection{local専用の編集の用意} |
16
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
275 |
e16dad3b80fc
Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
276 |
45
cd3b8cf7a3a1
Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
44
diff
changeset
|
277 \subsection{} |
46
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
278 |
c63aaa629330
Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
45
diff
changeset
|
279 |
21 | 280 |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
281 \section{掲示板プログラムにおけるマージの実装} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
282 Jungle に分散実装を行った後の問題としてデータ衝突がある. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
283 他のサーバノードから送られてくるデータが既に手元で変更を加えた木構造を対象とした |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
284 場合に発生する問題である. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
285 Jungle ではこれをアプリケーション毎にマージを実装することで解決させる. |
21 | 286 |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
287 今回分散実装を行い, 例題として掲示板プログラムを用意した. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
288 掲示板プログラムに実装を行ったマージについて述べる. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
289 まず Jungle を用いた掲示板プログラムのデータ保持方法を図\ref{fig:merge2}に示す. |
21 | 290 \begin{figure}[htpb] |
291 \begin{center} | |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
292 \includegraphics[scale=0.70]{figures/merge2.pdf} |
21 | 293 \caption{Jungle による掲示板プログラムのデータ保持方法} |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
294 \label{fig:merge2} |
21 | 295 \end{center} |
296 \end{figure} | |
297 | |
298 掲示板プログラムでは各掲示板毎に1つの木構造が作成される. | |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
299 掲示板への1つの書き込みは子ノードを1つ追加することに相当する. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
300 また, 各子ノードは attributes として書き込みの内容である message と書き込まれた時間を表す timestamp を保持している. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
301 先に追加された順で子ノードには若い番号が割り振られる. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
302 |
23
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
303 他サーバノードからの書き込みをそのまま子ノードの後ろに追加してしまうと, データの整合性が崩れてしまう. |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
304 この時の状態を表しているのが図\ref{fig:merge_imp1}と\ref{fig:merge_imp2}になる. |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
305 \begin{figure}[htpb] |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
306 \begin{center} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
307 \includegraphics[scale=0.70]{figures/merge_imp1.pdf} |
23
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
308 \caption{他サーバノードの編集データ反映による整合性の崩れ1} |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
309 \label{fig:merge_imp1} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
310 \end{center} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
311 \end{figure} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
312 |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
313 \begin{figure}[htpb] |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
314 \begin{center} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
315 \includegraphics[scale=0.70]{figures/merge_imp2.pdf} |
23
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
316 \caption{他サーバノードの編集データ反映による整合性の崩れ2} |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
317 \label{fig:merge_imp2} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
318 \end{center} |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
319 \end{figure} |
21 | 320 |
23
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
321 \newpage |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
322 |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
323 図\ref{fig:merge_imp2}の server node0 の木の状態にするのが理想である. |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
324 掲示板のへの書き込みの表示は, 書き込みされた時間が早い順に表示されるようにしたい. |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
325 これを timestamp を利用することで行う. |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
326 他サーバノードから来たデータに関しては, timestamp を参照し, 次に自分の保持している |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
327 木の子ノードの timestamp と比べていくことでデータの追加する場所を決める. |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
328 これが今回実装を行った掲示板システムにおけるマージになる. |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
329 |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
330 %単一サーバで動いている時の Jungle はただ子ノードとして後ろに追加するだけだが, 分散 |
21e1a110f258
Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
331 %環境下においては timestamp に従い子ノードを追加する位置を決めるようにする. |
21 | 332 |
333 | |
22
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
334 |
56753cfbeeab
Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
335 |