view paper/chapter3.tex @ 3:cacc83aea539

modify chapter3
author sugi
date Thu, 01 Jan 2015 12:27:53 +0900
parents 33246fe15eb5
children e59c8e99a5c1
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を指定して起動させた場合(ソースコード \ref{src:DynamicTopologyManager})、ノードがTopologyに従い、順次追加されるようにTopology Managerに機能を追加した。

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

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

\subsection{Dynamic Topology Managerの参加表明処理}
トポロジーファイルを指定して起動した場合は、図 \ref{fig:topologymanagerandnode}で示したように、アプリケーションが起動する前に全ての接続すべきTopology Nodeの情報がTopology Nodeにputされ,、接続処理が行われる。

Dynamic Topologyの場合は、新しくTopology Nodeがアプリケーションに参加するたびにTopology ManagerからTopology Nodeに対して、接続すべきTopology Nodeの情報がputされ、接続処理が行われる。(図 \ref{fig:DynamicTopology})

Dynamic Topologyへの参加表明の方法は、従来の方法と同じく、Topology Nodeの起動時にコマンドライン引数からTopology ManagerのIPアドレスとポート番号を指定するだけでよい。

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=100mm]{images/DynamicTopologymanagerandnode.pdf}
\end{center}
\caption{Topology Nodeが参加する毎に接続すべき情報がTopology Nodeに伝えられる}
\label{fig:DynamicTopology}
\end{figure}

\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として扱う。