# HG changeset patch # User kazz # Date 1313067994 -32400 # Node ID 56417fb1bb7e895cdefe7ab90e361cb3c0f9ebf8 # Parent 30be612413774247c1a7b311a779b1aee814b20c add about DataSegment diff -r 30be61241377 -r 56417fb1bb7e paper/kazz-jssst.tex --- 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 が揃ったら実行開始}