annotate paper/chapter3.tex @ 48:6553b7a3717c

Modified chapter3
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 31 Jan 2014 09:31:57 +0900
parents b303f22d8b0d
children 7b595f4b341e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
13 (\ref{src:alice_ntm_run}).
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
14 \begin{lstlisting}[frame=lrbt,label=src:alice_ntm_run,caption=Alice によるネットワークトポロジーマネージャーの起動,numbers=left]
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
15 % java -cp Alice.jar alice.topology.manager.TopologyManager -p 10000 -conf ./topology/tree5.dot
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
18
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
19 ポート番号は Alice により記述された並列分散プログラムの起動時に渡す必要がある.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
20 dot ファイルには, トポロジーをどのように形成するかが書かれている.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
36 node0 や node1 はサーバノードの名前を示す.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
37 サーバノードの間にはラベルがあり, Alice 上ではこのラベル
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
38 に指定される文字列(キー)を使うことで他のサーバノードのデータへアクセスすることができる.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
39 node0 -> node1 はサーバノード同士の繋がりを示している.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
40 次に続く label="child1" は, node0 が node1 のデータに"child1"という文字列を使うことでアクセス
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
41 できることを示す.
18
fc14b1876141 Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
42
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
43 dot ファイルを読み込んだ Alice のトポロジーマネージャーに対して, サーバノードは
20
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
44 誰に接続を行えばよいかを訪ねる.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
45 トポロジーマネージャーは訪ねてきたサーバノードに対してノード番号を割り振り, dot ファイル
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
46 に記述している通りにサーバノード同士が接続を行うよう指示をだす.
18
fc14b1876141 Modified description of topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
47
20
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
48 トポロジーマネージャーは接続要求先を聞いてくるサーバノードに対して名前を割り振り, 接続相手を伝える.
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
70 public static void main( String[] args ) throws Exception
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
71 {
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
74 }
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a7fbd5db80fb chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
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
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
84 例えば, mass00.cs.ie.u-ryukyu.ac.jp というサーバ上でポート番号10000を指定してトポロジーマネージャーを
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
85 起動した場合は次のようになる(\ref{src:run_program}).
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
86 \begin{lstlisting}[frame=lrbt,label=src:run_program,caption=トポロジーマネージャーの利用,numbers=left]
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
87 % java Program -host mass00.cs.ie.u-ryukyu.ac.jp -port 10000
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
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
b87deec129df Added images
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
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
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
255
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
256 このInterfaceをimplementsしつつシリアライズを行えるクラスとしてNetworkTreeOperationLogを実装した.
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
257 NetworkTreeOperationLogでは次のフィールドを保持する(\ref{src:nettreeoplog}).
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
258 \begin{lstlisting}[frame=lrbt,label=src:nettreeoplog,caption=NetworkTreeOperationLogの実装,numbers=left]
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
259 @Message
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
260 public class NetworkTreeOperationLog implements TreeOperationLog
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
261 {
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
262 public LinkedList<NetworkTreeOperation> list;
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
263 public int size;
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
264 String uuid;
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
265 String treeName;
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
266 long timestamp;
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
267 : // 実装が続いていく
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
268 \end{lstlisting}
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
269
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
270
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
271
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
272
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
273 TreeOperationLogの仕様はInterfaceにより定義される.
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
274 \begin{lstlisting}[frame=lrbt,label=src:treeoperationlog,caption=TreeOperationLogの仕様,numbers=left]
46
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
275 public interface TreeOperationLog extends Iterable<TreeOperation>
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
276 {
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
277 public TreeOperationLog add(NodePath _p,NodeOperation _op);
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
278 public TreeOperationLog append(TreeOperationLog _log);
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
279 public int length();
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
280 }
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
281 \end{lstlisting}
48
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
282 \verb|Iterable<TreeOperationLog>|を継承しているクラスがTreeOperationLogとなる.
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
283 次にTreeOperationの仕様と, NodeOperation, NodePath の仕様について以下に示す
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
284 \begin{lstlisting}[frame=lrbt,label=src:treeop,caption=TreeOperationの仕様,numbers=left]
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
285 public interface TreeOperation
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
286 {
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
287 public NodePath getNodePath();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
288 public NodeOperation getNodeOperation();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
289 }
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
290 \end{lstlisting}
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
291
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
292 \begin{lstlisting}[frame=lrbt,label=src:nodeop,caption=NodeOperationの仕様,numbers=left]
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
293 public interface NodeOperation
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
294 {
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
295 public Command getCommand();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
296 public <T extends EditableNode<T>> Either<Error,T> invoke(T _target);
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
297
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
298 public int getPosition();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
299 public String getKey();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
300 public ByteBuffer getValue();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
301 }
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
302 \end{lstlisting}
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
303
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
304 \begin{lstlisting}[frame=lrbt,label=src:nodepath,caption=Nodepathの仕様,numbers=left]
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
305 public interface NodePath extends Iterable<Integer>
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
306 {
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
307 public NodePath add(int _pos);
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
308 public Pair<Integer,NodePath> pop();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
309 public int size();
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
310 }
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
311 \end{lstlisting}
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
312
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
313
6553b7a3717c Modified chapter3
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
314
47
b303f22d8b0d Modified
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
315
44
618adf0a9b2b Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
316
618adf0a9b2b Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
317
618adf0a9b2b Added some figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
318
46
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
319 % TreeOperationLog に木の名前の情報がない
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
320 % そのため木の名前を追加して持たせた
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
321 % 木がなければそのばでつくるようにした
17
dfa2fd4658b2 Modified abstract
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
322
46
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
323 \subsection{local専用の編集の用意}
16
e16dad3b80fc Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
324
e16dad3b80fc Writed topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
325
45
cd3b8cf7a3a1 Added file for gnuplot
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
326 \subsection{}
46
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
327
c63aaa629330 Added dat files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
328
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
329
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
330 \section{掲示板プログラムにおけるマージの実装}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
331 Jungle に分散実装を行った後の問題としてデータ衝突がある.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
332 他のサーバノードから送られてくるデータが既に手元で変更を加えた木構造を対象とした
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
333 場合に発生する問題である.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
334 Jungle ではこれをアプリケーション毎にマージを実装することで解決させる.
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
335
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
336 今回分散実装を行い, 例題として掲示板プログラムを用意した.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
337 掲示板プログラムに実装を行ったマージについて述べる.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
338 まず Jungle を用いた掲示板プログラムのデータ保持方法を図\ref{fig:merge2}に示す.
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
339 \begin{figure}[htpb]
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
340 \begin{center}
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
341 \includegraphics[scale=0.70]{figures/merge2.pdf}
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
342 \caption{Jungle による掲示板プログラムのデータ保持方法}
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
343 \label{fig:merge2}
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
344 \end{center}
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
345 \end{figure}
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
346
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
347 掲示板プログラムでは各掲示板毎に1つの木構造が作成される.
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
348 掲示板への1つの書き込みは子ノードを1つ追加することに相当する.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
349 また, 各子ノードは attributes として書き込みの内容である message と書き込まれた時間を表す timestamp を保持している.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
350 先に追加された順で子ノードには若い番号が割り振られる.
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
351
23
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
352 他サーバノードからの書き込みをそのまま子ノードの後ろに追加してしまうと, データの整合性が崩れてしまう.
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
353 この時の状態を表しているのが図\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
354 \begin{figure}[htpb]
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
355 \begin{center}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
356 \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
357 \caption{他サーバノードの編集データ反映による整合性の崩れ1}
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
358 \label{fig:merge_imp1}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
359 \end{center}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
360 \end{figure}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
361
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
362 \begin{figure}[htpb]
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
363 \begin{center}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
364 \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
365 \caption{他サーバノードの編集データ反映による整合性の崩れ2}
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
366 \label{fig:merge_imp2}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
367 \end{center}
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
368 \end{figure}
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
369
23
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
370 \newpage
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
371
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
372 図\ref{fig:merge_imp2}の server node0 の木の状態にするのが理想である.
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
373 掲示板のへの書き込みの表示は, 書き込みされた時間が早い順に表示されるようにしたい.
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
374 これを timestamp を利用することで行う.
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
375 他サーバノードから来たデータに関しては, timestamp を参照し, 次に自分の保持している
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
376 木の子ノードの timestamp と比べていくことでデータの追加する場所を決める.
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
377 これが今回実装を行った掲示板システムにおけるマージになる.
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
378
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
379 %単一サーバで動いている時の Jungle はただ子ノードとして後ろに追加するだけだが, 分散
21e1a110f258 Writed description of merge
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
380 %環境下においては timestamp に従い子ノードを追加する位置を決めるようにする.
21
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
381
a4dfb70496ee Added figure
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
382
22
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
383
56753cfbeeab Added merge_imp.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
384