# HG changeset patch # User Nozomi Teruya # Date 1517131436 -32400 # Node ID 3c425e8911cf2d796d7ecc7dd9e959d8d8fb6c73 # Parent 6e9c42922c8d9a79b8880e2d97998ede4bedc4b1 add Topology image diff -r 6e9c42922c8d -r 3c425e8911cf paper/images/nat.pdf Binary file paper/images/nat.pdf has changed diff -r 6e9c42922c8d -r 3c425e8911cf paper/images/nat.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/nat.svg Sun Jan 28 18:23:56 2018 +0900 @@ -0,0 +1,988 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6e9c42922c8d -r 3c425e8911cf paper/images/somehostname.pdf Binary file paper/images/somehostname.pdf has changed diff -r 6e9c42922c8d -r 3c425e8911cf paper/images/vncandchat.pdf Binary file paper/images/vncandchat.pdf has changed diff -r 6e9c42922c8d -r 3c425e8911cf paper/images/vncandchat.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/vncandchat.svg Sun Jan 28 18:23:56 2018 +0900 @@ -0,0 +1,481 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6e9c42922c8d -r 3c425e8911cf paper/nozomi-master.pdf Binary file paper/nozomi-master.pdf has changed diff -r 6e9c42922c8d -r 3c425e8911cf paper/nozomi-master.tex --- a/paper/nozomi-master.tex Sat Jan 27 23:47:41 2018 +0900 +++ b/paper/nozomi-master.tex Sun Jan 28 18:23:56 2018 +0900 @@ -264,17 +264,44 @@ \section{AliceのMeta Computation} Aliceでは、処理をComputationとMeta Computationに階層化し、コアな仕様と複雑な例外処理に分離する。 AliceのComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理と捉えられる。 -それに対して、AliceのMeta Computation は、Remoteノードとの通信トポロジーの構成や扱うデータ形式の変換と言える。 +それに対して、AliceのMeta Computation は、Remoteノードとの通信トポロジーの構成や、通信するデータ形式の変換と言える。 Aliceの機能を追加するということはプログラマ側が使うMeta Computationを追加すると言い換えられる。 AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。 -プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定する。 +プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定するだけでよい。 このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。 +仕様の変更を抑えてプログラムの拡張ができるということは、コードを破壊しないため変更以前の信頼性を保てるということである。 現在Aliceには、データの圧縮機能、トポロジーの構成・管理機能、ノードの生存確認機能、ノードの切断・再接続時の処理管理機能などのMeta Computationが用意されている。 \subsection{Aliceの圧縮機能} -%API +リモートノードに大きなデータを送るために、データを圧縮したい場合がある。 +そこで、Aliceは圧縮をサポートしている。 +しかし、単に圧縮のメソッドを用意したわけではない。 +圧縮データの展開と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、DSに圧縮と非圧縮のデータを同時に持てるようにしている。 +1つのDS内に以下の3つの表現を持たせることでデータに多態性を持たせ、必要に応じた形式でDSを扱う。 + +\begin{enumerate} + \item 一般的なJavaのクラスオブジェクト + \item MessagePack for Java\cite{MessagePack}でシリアライズ化されたバイナリオブジェクト + \item 2を圧縮したバイナリオブジェクト +\end{enumerate} + +Local DSMにputされた場合は、(1)の一般的なJavaクラスオブジェクトとして追加される。 +Remote DSMにputされた場合は、通信時に(2)のbyteArrayに変換されたバイナリオブジェクトに変換されたDSが追加 +される。 +Local/Remote DSMにDSを圧縮して保存したい場合は(3)の圧縮形式を用いる。 + +データの圧縮を指定するには、putするDSMの名前の前に"compressed"をつけるだけでよい。 +\ref{src:before},\ref{src:after}は通常のDSと圧縮のDSを扱う際の記述の例である。 + +\lstinputlisting[label=src:before, caption=通常のDSを扱うCSの例]{source/beforeCompress.java} +\lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java} + +このようにコードの変更を抑えて圧縮できるため、他の計算部分を変えずにデータ形式が指定できる。 +また、DSを取り出す際もasClass()内部で自動で展開が行われるため、コードの変更がなく、プログラマがデータの展開を考える必要がない。 + + \subsection{TopologyManager} Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerとTopology NodeというMeta Computationが提供している。 @@ -293,7 +320,7 @@ \begin{figure}[h] \begin{center} -\includegraphics{images/topologymanager.pdf} +\includegraphics[width=80mm]{images/topologymanager.pdf} \end{center} \caption{Topology Managerが記述に従いトポロジーを構成} \label{fig:topologymanager} @@ -307,7 +334,15 @@ 現在Topology Managerでは動的なトポロジータイプとして二分木に対応している。 %TopologyNodeとnodenameの説明もう少し + + + + + \chapter{Aliceの問題点} +Aliceを拡張していく中でいくつかの問題点が明らかになり、これらを解決するにはAlice自体を再設計する必要があるとわかった。 + + \section{直感的でないAPI} 2.4で示したように、CSで使うDSをtake/peekのメソッドを直接は呼び出せない。 一度フィールドでReceiverをcreateして、その後Reveiverに対してsetKeyで待ち合わせるkeyを指定しなければならない。 @@ -320,6 +355,7 @@ このような書き方をされると、CSだけを見てどのkeyに対して待ち合わせを行っているのかわからないため、setKeyを呼び出しているコードを辿る必要がある。 可読性の低いコードはプログラマの負担となるため、CSが何を待ち合わせているのかそのCSを見ただけで理解できるようにAPIを改善すべきである。 + \section{動的なsetKey} setKeyはCSのコンストラクタで指定することが多い。 このとき、指定するkeyは引数などから動的に受け取り、セットすることができる。 @@ -327,6 +363,7 @@ 現在のAliceではsetKeyが柔軟に使えるがために、慎重に書かなければプログラムの信頼性が保てない。 そのため、動的なsetKeyはできないように制限したほうが良いと考える。 + \section{型が推測できない} inputDSを受け取るReceiverはデータをObject型で持っており、そのデータをCS内で扱うには正しい型にキャストする必要がある。 しかし、inputDSで指定するのはkeyのみであり、そのデータの型までは分からない。 @@ -336,35 +373,71 @@ % ここでMessagePackの話入れる? + \section{key名と変数名の不一致} 2.4のCodeSegmentの例題である通り、key名とそのkeyで待ち合わせたDSを受け取るReceiver名は異なることがある。 もしプログラマが適当に命名してしまえば後々混乱を招くため、待ち合わせるkey名とinput DS の変数名一致を強制させたい。 + \section{LocalDataSegmentManagerを複数持てない} Aliceでは1つのノードにつき1つしかLocalDSMを立ち上げられない作りになっている。 そのために以下のような問題が発生した。 \subsection{1つのノードで複数台DSM同士のテストが行えない} -%ローカルで複数できないからテストが気軽にできない - +当研究室では分散データベースJungle\cite{}を開発しており、その分散通信部分にはAliceが用いられている。 +Jungleのような分散アプリケーションの開発では、1つのマシン上で複数の疑似ノードを立ててテストを行いたい場合があった。 +しかし、Aliceでは一つのアプリケーション内にLocalDSMは一つと決まっていたため、テストに必要なノード数分だけアプリケーションを別で立ち上げなければならないという手間があった。 +このためのシェルスクリプトをプログラマが書かなければならないのは本質的な作業ではない。 +より気軽にテストができるよう、同一プログラム内でLocalDSMを複数立ち上げられるようにすべきだと考えた。 \subsection{TopologyManagerの拡張が困難} Aliceではより自由度の高い通信を行うために、TopologyManagerに幾つかの機能を追加すること考えていた。 -例えば、NAT越えの機能である。NAT越えは分散アプリケーション構築における課題の1つでもあるが、プログラマにとってその実装は容易ではない。Topology ManagerにNATを越えたノード間通信機能をつけることにより、NATを気にせずに通信が行えるようにしたい。 +その一つがNAT越えの機能である。NAT越えは分散アプリケーション構築における課題の1つでもあるが、プログラマにとってその実装は容易ではない。Topology ManagerにNATを越えたノード間通信機能をつけることにより、ネットワークを気にせずに通信が行えるようにしたい。 +図 \ref{fig:nat}はTopologyManagerを用いてNAT越えをするための設計である。 + +\begin{figure}[h] +\begin{center} +\includegraphics[width=105mm]{images/nat.pdf} +\end{center} +\caption{複数のTopologyManagerによるNAT越えの実現} +\label{fig:nat} +\end{figure} + また、別トポロジーで立ち上げたアプリケーション同士を接続する機能も追加したいと考えていた。 -TreeTopologyのVNCアプリとStarTopologyのチャットアプリの連携したいといった要望が生まれたためである。 +TreeTopologyのVNCアプリとStarTopologyのチャットアプリを連携したいという要望が生まれたためである。 +別トポロジーのアプリケーションが接続可能になれば、VNC画面のスナップショットをChat上に載せたり、VNC上にChatの内容をコメントとして流すといった拡張が容易になる(図 \ref{fig:vncandchat})。 -TopologyManagerはネットワークごと、トポロジーごとに存在するため、いずれの機能も複数のTopologyManager同士を連携させることで可能となる。 -1つのノードに複数のTopologyManagerを対応させるには、TopologyNodeが複数のnodeNameを持つ必要がある。 +\begin{figure}[h] +\begin{center} +\includegraphics[width=105mm]{images/vncandchat.pdf} +\end{center} +\caption{別トポロジーのアプリケーションの接続} +\label{fig:vncandchat} +\end{figure} + +TopologyManagerはネットワークごと、トポロジーごとに存在するため、いずれの機能も複数のTopologyManagerを立ち上げ、連携させることで実現可能となる。 -%図 +今までのAliceでは、1つのノードに対してTopology Managerは1つと決められていた。 +Topology Managerと各ノードのやり取りをするのは、ノードごとに実行されるTopology NodeというMeta Computationである。 +Topology Managerは接続されたnodeの情報(nodeNameとIPアドレスのHashMap)を"nodeTable"というKeyに対応するDSとして保存している。 +そしてTopology NodeはTopology Managerから割り当てられたnodeNameを"hostname"というKeyに保存する。 +つまり、接続するTopology Managerが増えればTopoloyNodeに割り当てられるnodeNameも増えるため、今までのように"hostname"という1つのKeyだけでは対応できない。 +1つのノードに複数のTopologyManagerを対応させるには、TopologyNodeが複数のnodeNameを持つ必要がある。 +TopologyNodeが複数のTopologyManagerに対応できるようにしなければならない。 -そこで、通常のLocal DSMとは別にTopology ManagerごとのMeta LocalDSMを立ち上げる方法を考えた。 +そこで、Meta Computationとして、通常のLocal DSMとは別にTopology ManagerごとのMeta Local DSMを立ち上げる方法が考えられる(図 \ref{fig:somehostname})。 +\begin{figure}[h] +\begin{center} +\includegraphics[width=105mm]{images/somehostname.pdf} +\end{center} +\caption{複数のTopologyManagerに複数のLocalDSMが対応} +\label{fig:somehostname} +\end{figure} それぞれのTopology Managerに対応するLocalDSMを作り、それぞれに対応したnodeNameを格納することで、DSMを切り替えるだけでTopologyNodeの仕様は変えずに複数のTopology Managerに対応できるという設計である。 -しかし、現在のAliceのコードではDSMを管理するclassがstatic classであったため、複数のLocal DSMを持つことができない。 +しかし、現在のAliceのコードではDSMを管理するclassがstatic classであったため、複数のLocal DSMを持つことはできなかった。 staticを取り除こうとしたところ、Aliceの大部分のコードを修正する必要があることがわかった。 よって、再設計の際にはstatic classのない実装を行い、DSM切り替えによる方式を実現したい。