# HG changeset patch # User Nozomi Teruya # Date 1517214922 -32400 # Node ID 573db146fa930678dae94c2c196f595358528128 # Parent 14e0a5a932cff06a8874b3673193200c804ef130 change image size diff -r 14e0a5a932cf -r 573db146fa93 paper/images/compress.pdf Binary file paper/images/compress.pdf has changed diff -r 14e0a5a932cf -r 573db146fa93 paper/nozomi-master.pdf Binary file paper/nozomi-master.pdf has changed diff -r 14e0a5a932cf -r 573db146fa93 paper/nozomi-master.tex --- a/paper/nozomi-master.tex Mon Jan 29 15:41:16 2018 +0900 +++ b/paper/nozomi-master.tex Mon Jan 29 17:35:22 2018 +0900 @@ -117,6 +117,8 @@ \label{fig:CS} \end{figure} +\newpage + AliceはJavaで実装されており、DSはJava Objectに相当する。 CSはRunnableなObject(void run()を持つObject)に相当する。 プログラマがCSを記述する際は、CodeSegmentクラスを継承する。 @@ -127,6 +129,7 @@ 一つのkeyに対して複数のDSをputするとFIFO的に処理される。なのでData Segment Managerは通常のデータベースとは異なる。 +\newpage \section{DataSegmentManager} DS Manager(以下DSM)にはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。 @@ -134,22 +137,23 @@ Remote DSMは他ノードのLocal DSMに対応するproxyであり、接続しているノードの数だけ存在する(図 \ref{fig:Remote DSM} )。 他ノードのLocal DSMに書き込みたい場合はRemote DSMに対して書き込めば良い。 -Remote DSMを立ち上げるには、DataSegmentクラスが提供するconnectメソッドを用いる。 -接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。 -その後はManager名を指定してData Segment APIを用いてDSのやり取りを行うため、プログラマはManager名さえ -意識すればLocalへの操作もRemoteへの操作も同じ様に扱える。 \begin{figure}[h] \begin{center} - \includegraphics[width=105mm]{images/remote_datasegment.pdf} + \includegraphics[width=150mm]{images/remote_datasegment.pdf} \end{center} \caption{Remote DSMは他のノードのLocal DSMのproxy } \label{fig:Remote DSM} \end{figure} +Remote DSMを立ち上げるには、DataSegmentクラスが提供するconnectメソッドを用いる。 +接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。 +その後はManager名を指定してData Segment APIを用いてDSのやり取りを行うため、プログラマはManager名さえ +意識すればLocalへの操作もRemoteへの操作も同じ様に扱える。 +\newpage \section{Data Segment API} DSの保存・取得にはAliceが提供するAPIを用いる。 @@ -186,6 +190,7 @@ +\newpage \section{CodeSegmentの記述方法} CSをユーザーが記述する際にはCodeSegmentクラスを継承して記述する(ソースコード \ref{src:StartCodeSegmen @@ -239,6 +244,8 @@ \end{itemize} setKeyメソッドはpeek/takeの実行を行う。どのDSMのどのkeyに対してpeekまたはtakeコマンドを実行させるかを指定できる。コマンドの結果がレスポンスとして届き次第CSは実行される。 +\newpage + 実行されるrunメソッドの内容は \begin{enumerate} \item 10行目で取得されたDSをInteger型に変換してcountに代入する。 @@ -258,7 +265,7 @@ CS内でDSのデータを扱うには、正しい型を意識しながらこのasClassメソッドを使わなければならない。 - +\newpage \section{AliceのMeta Computation} @@ -269,16 +276,28 @@ Aliceの機能を追加するということはプログラマ側が使うMeta Computationを追加すると言い換えられる。 AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。 プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定するだけでよい。 + このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。 仕様の変更を抑えてプログラムの拡張ができるということは、コードを破壊しないため変更以前の信頼性を保てるということである。 現在Aliceには、データの圧縮機能、トポロジーの構成・管理機能、ノードの生存確認機能、ノードの切断・再接続時の処理管理機能などのMeta Computationが用意されている。 +\newpage + \subsection{Aliceの圧縮機能} リモートノードに大きなデータを送るために、データを圧縮したい場合がある。 そこで、Aliceは圧縮をサポートしている。 しかし、単に圧縮のメソッドを用意したわけではない。 -圧縮データの展開と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、DSに圧縮と非圧縮のデータを同時に持てるようにしている。 +圧縮データの展開と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta Computationを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。 + +\begin{figure}[h] +\begin{center} +\includegraphics[width=160mm]{images/compress.pdf} +\end{center} +\caption{DSが圧縮と非圧縮の両方を持つ} +\label{fig:compress} +\end{figure} + 1つのDS内に以下の3つの表現を持たせることでデータに多態性を持たせ、必要に応じた形式でDSを扱う。 \begin{enumerate} @@ -292,6 +311,8 @@ される。 Local/Remote DSMにDSを圧縮して保存したい場合は(3)の圧縮形式を用いる。 +\newpage + データの圧縮を指定するには、putするDSMの名前の前に"compressed"をつけるだけでよい。 \ref{src:before},\ref{src:after}は通常のDSと圧縮のDSを扱う際の記述の例である。 @@ -302,7 +323,6 @@ また、DSを取り出す際もasClass()内部で自動で展開が行われるため、コードの変更がなく、プログラマがデータの展開を考える必要がない。 - \subsection{TopologyManager} Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerとTopology NodeというMeta Computationが提供している。 プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。 @@ -315,8 +335,8 @@ DOT Languageファイルはdotコマンドを用いてグラフの画像ファイルを生成することができる。そのため、記述したトポロジーが正しいか可視化することが可能である。 Topology Managerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送る(図\ref{fig:topologymanager})。 -また、トポロジーファイルでlavelとして指定した名前はRemote DSMの名前としてTopology Nodeに渡される。 -そのため、Topology NodeはTopology ManagerのIPアドレスさえ知っていれば自分の接続すべきノードのデータを受け取り、ノード間での正しい接続を実現できる。 + +\newpage \begin{figure}[h] \begin{center} @@ -326,6 +346,10 @@ \label{fig:topologymanager} \end{figure} +トポロジーファイルでlavelとして指定した名前はRemote DSMの名前としてTopology Nodeに渡される。 +そのため、Topology NodeはTopology ManagerのIPアドレスさえ知っていれば自分の接続すべきノードのデータを受け取り、ノード間での正しい接続を実現できる。 + + また、実際の分散アプリケーションでは参加するノードの数が予め決まっているとは限らない。 そのためTopology Managerは動的トポロジーにも対応している。 トポロジーの種類を選択してTopology Managerを立ち上げれば、あとは新しいTopology Nodeが参加表明するたびに、Topology ManagerからTopology Nodeに対して接続すべきTopology Nodeの情報がput @@ -356,6 +380,8 @@ 可読性の低いコードはプログラマの負担となるため、CSが何を待ち合わせているのかそのCSを見ただけで理解できるようにAPIを改善すべきである。 +\newpage + \section{動的なsetKey} setKeyはCSのコンストラクタで指定することが多い。 このとき、指定するkeyは引数などから動的に受け取り、セットすることができる。 @@ -388,6 +414,7 @@ Alice自体の拡張・デバッグをしやすくするためにも、DSがどの型を持っているのかをひと目で分かるようにしたい。 +\newpage \section{LocalDataSegmentManagerを複数持てない} Aliceでは1つのノードにつき1つしかLocalDSMを立ち上げられない作りになっている。 @@ -405,27 +432,27 @@ その一つがNAT越えの機能である。NAT越えは分散アプリケーション構築における課題の1つでもあるが、プログラマにとってその実装は容易ではない。Topology ManagerにNATを越えたノード間通信機能をつけることにより、ネットワークを気にせずに通信が行えるようにしたい。 -図 \ref{fig:nat}はTopologyManagerを用いてNAT越えをするための設計である。 +\newpage - +図 \ref{fig:nat}はTopologyManagerを用いてNAT越えをするための設計である。 \begin{figure}[h] \begin{center} -\includegraphics[width=140mm]{images/nat.pdf} +\includegraphics[width=180mm]{images/nat.pdf} \end{center} \caption{複数のTopologyManagerによるNAT越えの実現} \label{fig:nat} \end{figure} -\newpage また、別トポロジーで立ち上げたアプリケーション同士を接続する機能も追加したいと考えていた。 TreeTopologyのVNCアプリとStarTopologyのチャットアプリを連携したいという要望が生まれたためである。 別トポロジーのアプリケーションが接続可能になれば、VNC画面のスナップショットをChat上に載せたり、VNC上にChatの内容をコメントとして流すといった拡張が容易になる(図 \ref{fig:vncandchat})。 +\newpage \begin{figure}[h] \begin{center} -\includegraphics[width=130mm]{images/vncandchat.pdf} +\includegraphics[width=180mm]{images/vncandchat.pdf} \end{center} \caption{別トポロジーのアプリケーションの接続} \label{fig:vncandchat} @@ -446,7 +473,7 @@ そこで、Meta Computationとして、通常のLocal DSMとは別にTopology ManagerごとのMeta Local DSMを立ち上げる方法が考えられる(図 \ref{fig:somehostname})。 \begin{figure}[h] \begin{center} -\includegraphics[width=90mm]{images/somehostname.pdf} +\includegraphics[width=100mm]{images/somehostname.pdf} \end{center} \caption{複数のTopologyManagerに複数のLocalDSMが対応} \label{fig:somehostname} @@ -484,12 +511,14 @@ CGを記述する際はAlice同様CodeGear.classを継承する。 -CodeGearはvoid run(CodeGearManager cgm)を持つclassであり、プログラマはrunメソッド内に処理を記述する。 +CodeGearは + +void run(CodeGearManager cgm)を持つclassであり、プログラマはrunメソッド内に処理を記述する。 インプットで指定したkeyに対応したDGが全て揃ったとき、runに書かれた処理が実行される。 ChristieのAPIにはrunの引数で受け取ったCGMを経由しアクセスする。 GearsOSではCG間でContextを受け渡すことによってCGはDGにアクセスするため、Christieでもその記述方法を採用した。 - +\newpage \section{APIの改善} \subsection{TAKE/PEEK} @@ -599,7 +628,7 @@ \begin{figure}[h] \begin{center} -\includegraphics[width=100mm]{images/DGM.pdf} +\includegraphics[width=130mm]{images/DGM.pdf} \end{center} \caption{RemoteDGMを介して他のLocalDGMを参照} \label{fig:remoteDGM}