comparison paper/nozomi-master.tex @ 176:055266d62d84

add slide
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Tue, 06 Feb 2018 03:56:16 +0900
parents 7e7fe5e28ba4
children b5ab0f9c07aa
comparison
equal deleted inserted replaced
175:7e7fe5e28ba4 176:055266d62d84
195 ノード間通信でサービスに沿った柔軟な通信をするためには、送信するデータを圧縮する機能や、受け取ったデータをそのままほかノードへ転送する機能が求められることがある。 195 ノード間通信でサービスに沿った柔軟な通信をするためには、送信するデータを圧縮する機能や、受け取ったデータをそのままほかノードへ転送する機能が求められることがある。
196 196
197 データの圧縮を指定したい場合、Akka、Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことで圧縮伸長を行う。 197 データの圧縮を指定したい場合、Akka、Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことで圧縮伸長を行う。
198 また、転送を指定したい場合、Akkaにはforwardメソッドがあるためそれを呼び出すことで受け取ったデータの転送が可能だが、Hazelcastは一つのMapへのアクセスに見立てているため、転送にもputを用いる。 198 また、転送を指定したい場合、Akkaにはforwardメソッドがあるためそれを呼び出すことで受け取ったデータの転送が可能だが、Hazelcastは一つのMapへのアクセスに見立てているため、転送にもputを用いる。
199 199
200 一方でAliceは圧縮の展開と転送を同時に行うことを想定した圧縮・転送機能を持っている。 200 一方でAliceは圧縮の伸長と転送を同時に行うことを想定した圧縮・転送機能を持っている。
201 Data Segment内に圧縮と非圧縮の両形式を同時に持てるため、受け取った圧縮データを展開をしながら圧縮したまま別ノードに転送することができる。 201 Data Segment内に圧縮と非圧縮の両形式を同時に持てるため、受け取った圧縮データを伸長をしながら圧縮したまま別ノードに転送することができる。
202 また、圧縮するには送信する宛先ラベルに"compressed"とつけるだけでよく、データ取得時に自動で展開もされるため、プログラマがメソッドの呼び出しを追加する必要がなく圧縮・非圧縮を簡単に切り替えられる。 202 また、圧縮するには送信する宛先ラベルに"compressed"とつけるだけでよく、データ取得時に自動で伸長もされるため、プログラマがメソッドの呼び出しを追加する必要がなく圧縮・非圧縮を簡単に切り替えられる。
203 203
204 \newpage 204 \newpage
205 205
206 \subsection*{NAT越え} 206 \subsection*{NAT越え}
207 ネットワーク間通信の大きな問題の一つに、NATがある。 207 ネットワーク間通信の大きな問題の一つに、NATがある。
273 273
274 \newpage 274 \newpage
275 275
276 \section{Data Segment API} 276 \section{Data Segment API}
277 DSの保存・取得にはAliceが提供するAPIを用いる。 277 DSの保存・取得にはAliceが提供するAPIを用いる。
278 putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。
279 peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。
280
281 \begin{itemize}
282 \item {\ttfamily void put(String managerKey, String key, Object val)}
283 \end{itemize}
284 putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。 278 putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。
285 peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。 279 peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。
286 280
287 \begin{itemize} 281 \begin{itemize}
288 \item {\ttfamily void put(String managerKey, String key, Object val)} 282 \item {\ttfamily void put(String managerKey, String key, Object val)}
412 406
413 \subsection{Aliceの圧縮機能} 407 \subsection{Aliceの圧縮機能}
414 リモートノードに大きなデータを送るために、データを圧縮したい場合がある。 408 リモートノードに大きなデータを送るために、データを圧縮したい場合がある。
415 そこで、Aliceは圧縮をサポートしている。 409 そこで、Aliceは圧縮をサポートしている。
416 しかし、単に圧縮のメソッドを用意したわけではない。 410 しかし、単に圧縮のメソッドを用意したわけではない。
417 圧縮データの展開と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。 411 圧縮データの伸長と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。
418 412
419 \begin{figure}[h] 413 \begin{figure}[h]
420 \begin{center} 414 \begin{center}
421 \includegraphics[width=160mm]{images/compress.pdf} 415 \includegraphics[width=160mm]{images/compress.pdf}
422 \end{center} 416 \end{center}
444 438
445 \lstinputlisting[label=src:before, caption=通常のDSを扱うCSの例]{source/beforeCompress.java} 439 \lstinputlisting[label=src:before, caption=通常のDSを扱うCSの例]{source/beforeCompress.java}
446 \lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java} 440 \lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java}
447 441
448 このようにコードの変更を抑えて圧縮できるため、他の計算部分を変えずにデータ形式が指定できる。 442 このようにコードの変更を抑えて圧縮できるため、他の計算部分を変えずにデータ形式が指定できる。
449 また、DSを取り出す際もasClass()内部で自動で展開が行われるため、コードの変更がなく、プログラマがデータの展開を考える必要がない。 443 また、DSを取り出す際もasClass()内部で自動で伸長が行われるため、コードの変更がなく、プログラマがデータの伸長を考える必要がない。
450 444
451 445
452 \subsection{TopologyManager} 446 \subsection{TopologyManager}
453 Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerとTopology NodeというMeta Computationが提供している。 447 Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerとTopology NodeというMeta Computationが提供している。
454 プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。 448 プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。
490 484
491 \section{APIの記述の分離} 485 \section{APIの記述の分離}
492 2.4で示したように、InputDSを記述するには、一度フィールドでReceiverをcreateして、その後Reveiverに対してsetKeyで待ち合わせるkeyを指定しなければならない。 486 2.4で示したように、InputDSを記述するには、一度フィールドでReceiverをcreateして、その後Reveiverに対してsetKeyで待ち合わせるkeyを指定しなければならない。
493 このようにインプットの処理が分離されてしまっていては、記述が煩雑な上にコードを読んだ際にどのkeyに対して待ち合わせを行っているのか直感的に分からない。 487 このようにインプットの処理が分離されてしまっていては、記述が煩雑な上にコードを読んだ際にどのkeyに対して待ち合わせを行っているのか直感的に分からない。
494 488
495 さらに、setKeyは明確な記述場所が決まっていないため、そのDSを待ち合わせているCS以外からも呼び出せてしまう(ソースコード\ref{src:StartSetKey)})。 489 さらに、setKeyは明確な記述場所が決まっていないため、そのDSを待ち合わせているCS以外からも呼び出せてしまう(ソースコード\ref{src:StartSetKey})。
496 490
497 \lstinputlisting[label=src:StartSetKey, caption=setKeyを外部から呼び出す例]{source/StartSetKey.java} 491 \lstinputlisting[label=src:StartSetKey, caption=setKeyを外部から呼び出す例]{source/StartSetKey.java}
498 \lstinputlisting[label=src:SetKey]{source/SetKey.java} 492 \lstinputlisting[label=src:SetKey, caption=外部setKeyによりどのkeyを待っているかがわからないCSの例]{source/SetKey.java}
499 493
500 このような書き方をされると、CSだけを見てどのkeyに対して待ち合わせを行っているのかわからないため、setKeyを呼び出しているコードを辿る必要がある。 494 このような書き方をされると、CSだけを見てどのkeyに対して待ち合わせを行っているのかわからないため、setKeyを呼び出しているコードを辿る必要がある。
501 これでは見通しが悪いため、どこでkeyを指定するのか明確にすべきである。 495 これでは見通しが悪いため、どこでkeyを指定するのか明確にすべきである。
502 496
503 可読性の低いコードはプログラマの負担となるため、CSが何を待ち合わせているのかそのCSを見ただけで理解できるように記述の分離問題を改善しなくてはならない。 497 可読性の低いコードはプログラマの負担となるため、CSが何を待ち合わせているのかそのCSを見ただけで理解できるように記述の分離問題を改善しなくてはならない。
887 もしDGがなければ、リモートから来たコマンドもローカルの場合と同様にLocalDGMのwaitListに入る。 881 もしDGがなければ、リモートから来たコマンドもローカルの場合と同様にLocalDGMのwaitListに入る。
888 882
889 REPLYを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決する。 883 REPLYを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決する。
890 884
891 \chapter{再設計への考察} 885 \chapter{再設計への考察}
886 Christieではアノテーションを用いることで分離問題を解決することができた。
887 このようにアノテーションを用いたAPIはAkkaやHazelcastにはないため、より記述性が高いフレームワークとなったと言える。
888
889 また、設計をし直したことでAliceより幅広いMeta Computationの実装が容易になった。
890 これにより細かな分散プログラムの実装が可能になった。
891 ロケーション透過性の高いAkkaやHazelcastではこのようなプログラミングは困難である。
892
893 keyを用いたプロトコル
894 また、現在はノードごとにDGMとDGのkeyが与えられているが、将来的にはURLのような大域で使えるkeyを用意することでより手軽なRemoteDGMへのアクセスを提供できると考えられる。
895
892 InputDGの指定において、CGにDGを宣言するというのは、DGをそのままflipできるようにするためであった。 896 InputDGの指定において、CGにDGを宣言するというのは、DGをそのままflipできるようにするためであった。
893 逆に言えばそれ以外でDataGear型でプログラマが利用することは少ない。 897 逆に言えばそれ以外でDataGear型でプログラマが利用することは少ない。
894 そのため、DGを宣言せずにアノテーションから生成し完全にメタレイヤーに移すことで、より分かりやすい記述が可能だと考える。 898 そのため、DGを宣言せずにアノテーションから生成し完全にメタレイヤーに移すことで、より分かりやすい記述が可能だと考える。
895 flipする場合は、keyを指定するだけで良い。 899 flipする場合は、keyを指定するだけで良い。
896 900
897 また、put/flipする際にDGM名を直接指定する書き方も、まだひと目でアウトプットしている部分が分かるようなシンタックスではないため、改善の余地がある。 901 また、put/flipする際にDGM名を直接指定する書き方も、まだひと目でアウトプットしている部分が分かるようなシンタックスではないため、改善の余地がある。
898
899 DGMは一種のデータベースであると述べたが、現状のDGMはデータベースに必要なトランザクションを持っていない。
900 当研究室で開発しているJungleデータベースはトランザクションを持っており、更にマージ可能な差分管理システムを持っている。
901 そのためJungleデータベースとの統合することで、DGMへの操作を信頼性高くすることが望ましい。
902
903 また、現在はノードごとにDGMとDGのkeyが与えられているが、将来的にはURLのような大域で使えるkeyを用意することでより手軽なRemoteDGMへのアクセスを提供できると考えられる。
904 902
905 \chapter{結論} 903 \chapter{結論}
906 \section{まとめ} 904 \section{まとめ}
907 本研究では、まず分散フレームワークに必要な要件を洗い出し、Akka、Hazelcastと比較しながら分散フレームワークAliceが分散性を意識して記述できる特徴をもつことを示した。 905 本研究では、まず分散フレームワークに必要な要件を洗い出し、Akka、Hazelcastと比較しながら分散フレームワークAliceが分散性を意識して記述できる特徴をもつことを示した。
908 また、Aliceの持つCode Segment/Data Segmentの計算モデルや記述方法、Meta Computationについてを説明し、AliceでNAT越えを実現するための手法を示した。 906 また、Aliceの持つCode Segment/Data Segmentの計算モデルや記述方法、Meta Computationについてを説明し、AliceでNAT越えを実現するための手法を示した。
922 \subsection*{実用性の検証} 920 \subsection*{実用性の検証}
923 本論文ではChristieの設計と基本実装までを行ったが、それがどれほどの分散性能を持っているのかはまだ計測していない。 921 本論文ではChristieの設計と基本実装までを行ったが、それがどれほどの分散性能を持っているのかはまだ計測していない。
924 CG/DGのプログラミングモデルなどの基本的にはAliceと同じであるが、アノテーションの処理がどれほどのオーバーヘッドに繋がっているか現時点では不明である。 922 CG/DGのプログラミングモデルなどの基本的にはAliceと同じであるが、アノテーションの処理がどれほどのオーバーヘッドに繋がっているか現時点では不明である。
925 そのため、Aliceと同等の速度性能を持っているか、コードの量や複雑度は抑えられているかなどを分散処理の例題を用いて測定する必要がある。 923 そのため、Aliceと同等の速度性能を持っているか、コードの量や複雑度は抑えられているかなどを分散処理の例題を用いて測定する必要がある。
926 924
925
926 \subsection*{Jungleとの統合}
927 DGMは一種のデータベースであると述べたが、現状のDGMはデータベースに必要なトランザクションを持っていない。
928 当研究室で開発しているJungleデータベースはトランザクションを持っており、更にマージ可能な差分管理システムを持っている。
929 そのためJungleデータベースとの統合することで、DGMへの操作を信頼性高くすることが望ましい。
930
927 \subsection*{GearsOSへの移行} 931 \subsection*{GearsOSへの移行}
928 GearsOSはまだ開発途中であったため、本論文の作成時点ではChristieのような分散機能を実装することが叶わなかった。 932 GearsOSはまだ開発途中であったため、本論文の作成時点ではChristieのような分散機能を実装することが叶わなかった。
929 GearsOSではモデル検査機構akasya\cite{akasya}があるため、待ちに入っているkeyのputし忘れなどをコンパイルの段階で見つけることができる。 933 GearsOSではモデル検査機構akasya\cite{akasya}があるため、待ちに入っているkeyのputし忘れなどをコンパイルの段階で見つけることができる。
930 GearsOS上で分散プログラミングができればより信頼性の高いプログラミングが期待できるため、将来的にはChristieをGearsOSの分散機構として取り込みたい。 934 GearsOS上で分散プログラミングができればより信頼性の高いプログラミングが期待できるため、将来的にはChristieをGearsOSの分散機構として取り込みたい。
931 935