changeset 14:56417fb1bb7e

add about DataSegment
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Thu, 11 Aug 2011 22:06:34 +0900
parents 30be61241377
children 807429fb3398
files paper/kazz-jssst.tex
diffstat 1 files changed, 51 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/paper/kazz-jssst.tex	Thu Aug 11 19:10:51 2011 +0900
+++ b/paper/kazz-jssst.tex	Thu Aug 11 22:06:34 2011 +0900
@@ -125,7 +125,7 @@
 きた。 Meta Engine は、 タプルスペースと同一プロセス上に組み込まれた
 Protocol Engine である。(図\ref{fig:fedlinda})すなわち、タプルスペースと
 同じメモリ空間にあるため、ソケット通信を用いることなく直接 Linda の API
-を使用して、タプルスペースにアクセスすることが出来る。
+を使用して、タプルスペースにアクセスすることができる。
 
 \subsection{Federated Linda の問題点}\label{"fedlinda2"}
 大きく分けて分散アプリケーションは、次の3つのパートで構成することができる。
@@ -147,7 +147,7 @@
 \label{"datasegment"}
 
 FederatedLinda の経験を踏まえて、新しい分散フレームワークの設計を行う。主なターゲットとしては、ネットワークゲームを考えている。
-ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することが出来なかった。ここでは、 MessagePack \cite{MessagePack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。
+ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することができなかった。ここでは、 MessagePack \cite{MessagePack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。
 
 DataSegment はネットワーク上でやり取りされるので、その場所を表す ID を持っている。 FederatedLinda にはなかった Persistency を導入するために Persistent Storage Class を導入する。 DataSegment の ID に Persistent Storage Class を指定することにより、 Cassandra などのような分散データベースのレコードを直接指し示す。自サーバー上にある DataSegment は Local Storage Class を指定する。他のサーバー上にある DataSegment は Remote Storage Class を指定する。
 
@@ -164,11 +164,20 @@
 \subsection{MessagePack によるデータの型付け}
 \label{"msgpack"}
 
-FederatedLinda では、 Tuple の中の型は binary のみであったため、マシンごとに浮動小数点のフォーマットが異なっていたり、複数の変数をまとめて構造体として扱うことを、利用者がすべて管理する必要があった。
+FederatedLinda では、 Tuple の型は binary のみであったため、バイトオーダーやマシンごとに浮動小数点のフォーマットが異なっていたり、複数の変数をまとめて構造体として扱うことを、利用者が管理する必要があった。
+
+そこで、 MessagePack を導入することにより、データに型付けを行い。転送する際にもシリアライズされたデータを送信できるようにする。
 
 \subsection{ProtocolEngine の代わりに CodeSegment を利用}
 \label{"codesegment"}
 
+FederatedLinda における ProtocolEngine は、 ProtocolEngine の繋がりは Tuple に依存するため、接続を管理する機構がなかった。また、シングルスレッドで作られているため、並列実行できなかった。
+
+そこで、新設計では、 ProtocolEngine に代わり、 CodeSegment という単位で処理を記述することにした。
+CodeSegment は InputDataSegment のリストと OutputDataSegment のリストを持っている。
+InputDataSegment は、 CodeSegment が利用するデータのことであり、 OutputDataSegment は、 CodeSegment が書きだすデータのことである。
+InputDataSegment が揃い次第、 CodeSegment が Executor 上で走るため、並列で実行することが可能となる。並列度を上げるためには、 CodeSegment の処理内容は細かく分割するほうが望ましい。
+
 \begin{figure}[htbp]
 \begin{center}
 \scalebox{0.50}{\includegraphics{./fig/dsandcs.pdf}}
@@ -177,38 +186,56 @@
 \label{fig:dsandcs}
 \end{figure}
 
-\subsection{GeometricRouting}
+また、Callback function を FederatedLinda の Tuple へ接続(in)すると、そのリクエストは Queue で管理されていたため、ひとつの書き込みで複数の Callback function を実行することはできなかった。
+
+\subsection{DataSegment}
+\label{"datasegment"}
+
+DataSegment は、データ型と ID で表現される。
+
+データ型は MessagePack で使われる構造体を用いて表現する。
+
+ID は、 GeoAddress と LocalAddress の2つの部分に分けられる。
+GeoAddress は、トポロジー上の場所を表すアドレスであり、 LocalAddress は自サーバー上の場所を表すアドレスである。
+
+また、その GeoAddress は3種類存在する。
+
+\begin{enumerate}
+\item {\bf Persistent} KVS 上にある DataSegment
+\item {\bf Remote} 他のサーバー上にある DataSegment
+\item {\bf Local} 自サーバー上にある DataSegment
+\end{enumerate}
+
+\begin{figure}[htbp]
+\begin{center}
+\scalebox{0.50}{\includegraphics{./fig/datasegment.pdf}}
+\end{center}
+\caption{DataSegment には3つの種類がある。}
+\label{fig:datasegment}
+\end{figure}
+
+\subsection{Geometric Routing}
 \label{"routing"}
 
+分散アプリケーションを開発する際に直面する問題として、 Connection と Routing が複雑になるということが挙げられる。
+新設計ではその接続を固定的なものに限定することで、その管理をシンプルにすることにした。アプリケーションを起動する前に、台数とトポロジー(リング、ツリー、メッシュなど)を指定する。その情報をもとに固定されたトポロジーの設計図を作成する。トポロジーの構成ルーチンは、 Routing に関するルーチンとは独立して記述できるため、管理しやすくなる。
+
 \subsection{Key Value Store に合わせたAPI}
 \label{"kvsapi"}
 
+DataSegment の create, read, update, delete といった API は KVS の API と一致しているので、自明にアクセスできる。
+PersistentDataSegment を Input または Output する CodeSegment を呼び出せばよい。
+Database はどこからでもアクセスすることができる。 Database のアクセスの集中は、自分で解決する必要がある。
+
+SQL などの複雑な操作は、複数の CodeSegment にコンパイルすることで実現する。
+
+通常の DataSegment には Persistency はない。 CodeSegment の処理が終了すると自動的に消滅する。
 \subsection{CodeSegment の使い方}
 \label{"usecodesegment"}
 
 \subsubsection{InputDataSegment を指定}
 \label{"inputdatasegment"}
 
-ID
-
-MessagePackClass
-
-\begin{figure}[htbp]
-\begin{center}
-\scalebox{0.50}{\includegraphics{./fig/datasegment.pdf}}
-\end{center}
-\caption{DataSegment には3つの Type がある。}
-\label{fig:datasegment}
-\end{figure}
-
-Type
-
- Persistent
-
- Local
-
- Remote
-
 \subsubsection{OutputDataSegment を指定}
 
 \begin{figure}[htbp]
@@ -219,7 +246,6 @@
 \label{fig:remoteds}
 \end{figure}
 
-
 Remote は自動的に allocate
 
 \subsubsection{InputDataSegment が揃ったら実行開始}