changeset 155:573db146fa93

change image size
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 29 Jan 2018 17:35:22 +0900
parents 14e0a5a932cf
children bc9be2d40d0d
files paper/images/compress.pdf paper/nozomi-master.pdf paper/nozomi-master.tex
diffstat 3 files changed, 48 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
Binary file paper/images/compress.pdf has changed
Binary file paper/nozomi-master.pdf has changed
--- 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}