annotate paper/chapter3.tex @ 2:33246fe15eb5

edit omnigraffle
author sugi
date Mon, 29 Dec 2014 06:22:37 +0900
parents cf3a4335c64a
children cacc83aea539
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
295b393a7134 first commit
sugi
parents:
diff changeset
1 \chapter{Aliceの新機能} \label{chapter:chapter3}
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
2 水族館の例題によって、Aliceを用いて分散プログラムを記述可能であることが証明された。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
3 しかし、実用的なアプリケーションを記述するには、まだ機能が足りないと予測される。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
4 そこで、当研究室で開発を行っているTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
5
0
295b393a7134 first commit
sugi
parents:
diff changeset
6 \section{Dynamic Topologyへの対応}
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
7 第2章で示したように分散フレームワークAliceはTopology Fileを読み込むことでTopologyを構成する。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
8 つまり、予め参加するノードの台数が決まっている必要がある。また、Topologyに全ノードが参加するまでアプリケーションが起動しない。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
9 しかし、実際のアプリケーションでは、参加するノードの数は決まっていないため、Topologyを動的に変化させる必要がある。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
10 そこで、Topology Fileの代わりにTopologyを指定して起動させた場合、ノードがTopologyに従い、順次追加されるようにTopology Managerに機能を追加した。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
11
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
12 \begin{table}[htbp]
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
13 \lstinputlisting[label=fig:TopologyManager, caption=Topology Managerの起動方法]{source/TopologyManager.sh}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
14 \end{table}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
15
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
16 現在は、TreeVNCのTopologyである木構造のみ指定可能である。引数Childの後に子供の数を指定することで2分木だけではなく3分木などのTopologyを作ることができる。デフォルトでは2分木になっている。
0
295b393a7134 first commit
sugi
parents:
diff changeset
17
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
18 \section{Keep Alive}
2
33246fe15eb5 edit omnigraffle
sugi
parents: 1
diff changeset
19 ノード間の通信は、Remote Data Segmentに対してputやpeekを行うことでのみ発生する。従って、Code Segmentの実装次第では、長時間通信が行われない可能性がある。通信が行われない間にRemote Data Segmentとの接続が切れた場合、切断されたことを通信が行われるまで確認することができない。また、接続状態ではあるが問題が発生し、応答に時間がかかる場合も考えられる。
33246fe15eb5 edit omnigraffle
sugi
parents: 1
diff changeset
20 以上の問題を検知するために分散アプリケーションではKeep Aliveという、定期的にheart beatを送り生存確認を行う機能を持つことが望ましい。
33246fe15eb5 edit omnigraffle
sugi
parents: 1
diff changeset
21 そこで、AliceにKeep Aliveの機能を実装した。
33246fe15eb5 edit omnigraffle
sugi
parents: 1
diff changeset
22
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
23 一定時間内にノードから応答がない場合、Keep Aliveにより、そのノードのRemote Data Segmentが切断される。
0
295b393a7134 first commit
sugi
parents:
diff changeset
24
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
25 \section{切断時の処理}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
26 DataBaseではデータ更新の際にトランザクション処理に障害が起こった場合、DataBase側でトランザクション処理開始前に戻すロールバックという処理が行われる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
27 同様にTreeVNCでは切断を検知した場合、LostParentというメッセージがトップノードに対して送信される。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
28 以上の例のように、アプリケーションはノードの切断に対する処理を用意したい場合がある。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
29 しかし、Aliceを用いたアプリケーションの場合、アプリケーション側で検知するのは難しい。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
30 切断自体は、Remote Data Segmentに対してwriteまたはreadを行った際に出るExceptionにより判断することができる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
31 だが、I/O の処理はCode Segmentを実行するThreadで行われず、専用のI/O Threadによって行われるためCode SegmentでExceptionを捕まえられない。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
32 そこで、Aliceが切断を検知、管理する機能 (ClosedEventManager)を追加した。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
33 アプリケーション側でClosedEventManagerにCode Segmentを登録することで切断時に任意のCode Segmentを実行することができる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
34 また、切断したRemote Data Segmentの情報を利用したい場合は、Code Segmentをextends する代わりにClosed Event Code Segmentをextendsし、用意されているMethodを使うことで取得可能である。
0
295b393a7134 first commit
sugi
parents:
diff changeset
35
295b393a7134 first commit
sugi
parents:
diff changeset
36
295b393a7134 first commit
sugi
parents:
diff changeset
37 \section{再接続の処理}
295b393a7134 first commit
sugi
parents:
diff changeset
38
1
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
39 \section{Multicast Data Segment}
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
40 TreeVNCには、Multicastを利用して起動しているTreeVNCのRoot Nodeの情報の一覧にして表示する接続先自動検索システムという機能がある。この機能によりTreeVNCの起動の際にIPアドレスを入力する手間を省くことができる。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
41
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
42 現在のAliceは起動時にTopology ManagerのIPアドレスを入力する必要がある。そこで、Aliceにも同様なTopology Manager検索システムを実装するためにMulticast Data Segmentを追加した。
cf3a4335c64a add source code and modify chapters
gi
parents: 0
diff changeset
43 Multicast Data Segmentは同じマルチキャストアドレスを持つ端末を1つのRemote Data Segmentとして扱う。