view alice.tex @ 1:484bf45ca3ee

add new file
author sugi
date Sun, 31 Mar 2013 16:35:18 +0900
parents
children ddd5a624bb7a
line wrap: on
line source

\section{分散ネットフレームワークAlice}
Aliceは、本研究室で開発を行なっている分散管理フレームワークである。Cell用ののOpen CLに似たTask管理フレームワークCerium\cite{kono09b} \cite{cerium-sourceforge}とLinda\cite{linda} を相互接続した分散フレームワークであるFederated Lindaの開発を通して得られた知見が生かされている。

まず、Aliceを使用するに必要なData Segment、Code Segmentについて説明を行う。
\subsection{Data Segment API}
Data Segmentは数値や文字列などのデータ構造体的に保持するが、Data Segmentの相互参照が問題になる。AliceはData Segmentをデータベース的に扱い、またData Segmentは必ずuniqueなKeyをもつ。つまりKey Value Storeとして考えることができる。Key毎にキューがあり、Key毎に順に実行される。Key毎の追加と取得は、Lindaに準じた設計となっている。

Data Segmentを管理するのがData Segment Manager(以下DSM)である。ノード毎にLocal DSMとRemote DSMが存在する。Local DSMはノード固有のKey Value Storeと考えることができる。Remote DSMは他のノードのLocal DSMのproxyである。AliceのトポロジーマネージャーがRemote DSMを自動的に構成する。
Key Value Storeへのアクセスはキューによって、ノード内部で逐次化される。それ以外は、すべてJavaのThread poolにより並列実行される。

以下が用意されているData Segment APIである。これらを用いてData Segmentの送受信を行う。
\begin{itemize}
\item \verb+void put(String key, Value val)+
\item \verb+void update(String key, Value val)+
\item \verb+void peek(Receiver receiver, String key)+
\item \verb+void take(Receiver receiver, String key)+
\end{itemize}
\subsubsection{put}
\verb+put+ はData Segmentを追加するための API である。Key Value Storeのキューに追加される。 

\subsubsection{update}
\verb+update+ はData Segmentを更新するためのAPIである。キューの先頭を置き換える。
\subsubsection{peek}
peek はData Segmentを取得する。Data Segmentが無ければCode Segmentの待ち合わせが起きる。
put、updateによりData Segmentの更新があれば、peekが直ちに実行され、待ち合わせを行なっていたCode Segmentがactive queue に移される。

\subsubsection{take}
takeもData Segmentを取得するためのAPIである。peekとの違いは取得されたData SegmentはKey Value Storeのキューから取り除かれる。

\subsection{Data Segment }
Data Segmentのデータの表現にはMessage Packを利用している。Message Packに関してJavaにおけるデータ表現は以下の3つあり、これらのデータ表現は制限を伴うが互いに変換可能である。
\begin{itemize}
\item {\ttfamily 一般的なJavaのクラスオブジェクト}
\item {\ttfamily MessagePack for JavaのValueオブジェクト}
\item {\ttfamily byte[]で表現されたバイナリ}
\end{itemize}

Data Segmentは、MessagePack for JavaのValueオブジェクトを用いてデータが表現されている。
MessagePackはJavaのように静的に型付けされたオブジェクトではなく、自己記述なデータ形式である。MessagePack for JavaのValueオブジェクトはMessagePackのバイナリにシリアライズできる型のみで構成されたJavaのオブジェクトである。そのため、Valueも自己記述式のデータ形式になっている。

Valueオブジェクトは通信に関わるときには、シリアライズ・デシリアライズを高速に行うことができる。
また、ユーザーはメソッドを用いてオブジェクト内部のデータを閲覧、編集することができる。

ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。
この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。

\subsection{Code Segment}

Code Segmentはタスクのことである。Code Segmentをユーザーが記述するときにCode Segment内で使用するData Segmentの作成を記述する。Code SegmentにはInput Data SegmentとOutput Data Segmentを作るAPIが存在する。


Input Data Segmentで作成されたData SegmentはRemoteかLocalを指定する必要がある。
Code Segmentがactiveになるためには、Input Data Segmentが全て揃う必要がある。


Output Data Segmentで作成されたData Segmentにも、RemoteかLocalを指定する。