view paper/chapter3.tex @ 2:33246fe15eb5

edit omnigraffle
author sugi
date Mon, 29 Dec 2014 06:22:37 +0900
parents cf3a4335c64a
children cacc83aea539
line wrap: on
line source

\chapter{Aliceの新機能} \label{chapter:chapter3}
水族館の例題によって、Aliceを用いて分散プログラムを記述可能であることが証明された。
しかし、実用的なアプリケーションを記述するには、まだ機能が足りないと予測される。
そこで、当研究室で開発を行っているTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。

\section{Dynamic Topologyへの対応}
第2章で示したように分散フレームワークAliceはTopology Fileを読み込むことでTopologyを構成する。
つまり、予め参加するノードの台数が決まっている必要がある。また、Topologyに全ノードが参加するまでアプリケーションが起動しない。
しかし、実際のアプリケーションでは、参加するノードの数は決まっていないため、Topologyを動的に変化させる必要がある。
そこで、Topology Fileの代わりにTopologyを指定して起動させた場合、ノードがTopologyに従い、順次追加されるようにTopology Managerに機能を追加した。

\begin{table}[htbp]
\lstinputlisting[label=fig:TopologyManager, caption=Topology Managerの起動方法]{source/TopologyManager.sh}
\end{table}

現在は、TreeVNCのTopologyである木構造のみ指定可能である。引数Childの後に子供の数を指定することで2分木だけではなく3分木などのTopologyを作ることができる。デフォルトでは2分木になっている。

\section{Keep Alive}
ノード間の通信は、Remote Data Segmentに対してputやpeekを行うことでのみ発生する。従って、Code Segmentの実装次第では、長時間通信が行われない可能性がある。通信が行われない間にRemote Data Segmentとの接続が切れた場合、切断されたことを通信が行われるまで確認することができない。また、接続状態ではあるが問題が発生し、応答に時間がかかる場合も考えられる。
以上の問題を検知するために分散アプリケーションではKeep Aliveという、定期的にheart beatを送り生存確認を行う機能を持つことが望ましい。
そこで、AliceにKeep Aliveの機能を実装した。

一定時間内にノードから応答がない場合、Keep Aliveにより、そのノードのRemote Data Segmentが切断される。

\section{切断時の処理}
DataBaseではデータ更新の際にトランザクション処理に障害が起こった場合、DataBase側でトランザクション処理開始前に戻すロールバックという処理が行われる。
同様にTreeVNCでは切断を検知した場合、LostParentというメッセージがトップノードに対して送信される。
以上の例のように、アプリケーションはノードの切断に対する処理を用意したい場合がある。
しかし、Aliceを用いたアプリケーションの場合、アプリケーション側で検知するのは難しい。
切断自体は、Remote Data Segmentに対してwriteまたはreadを行った際に出るExceptionにより判断することができる。
だが、I/O の処理はCode Segmentを実行するThreadで行われず、専用のI/O Threadによって行われるためCode SegmentでExceptionを捕まえられない。
そこで、Aliceが切断を検知、管理する機能 (ClosedEventManager)を追加した。
アプリケーション側でClosedEventManagerにCode Segmentを登録することで切断時に任意のCode Segmentを実行することができる。
また、切断したRemote Data Segmentの情報を利用したい場合は、Code Segmentをextends する代わりにClosed Event Code Segmentをextendsし、用意されているMethodを使うことで取得可能である。


\section{再接続の処理}

\section{Multicast Data Segment}
TreeVNCには、Multicastを利用して起動しているTreeVNCのRoot Nodeの情報の一覧にして表示する接続先自動検索システムという機能がある。この機能によりTreeVNCの起動の際にIPアドレスを入力する手間を省くことができる。

現在のAliceは起動時にTopology ManagerのIPアドレスを入力する必要がある。そこで、Aliceにも同様なTopology Manager検索システムを実装するためにMulticast Data Segmentを追加した。
Multicast Data Segmentは同じマルチキャストアドレスを持つ端末を1つのRemote Data Segmentとして扱う。