# HG changeset patch # User Nozomi Teruya # Date 1517856976 -32400 # Node ID 055266d62d84bbb98f637becf1c1a275adc31051 # Parent 7e7fe5e28ba4f61e384e572d598f93770eb12ea3 add slide diff -r 7e7fe5e28ba4 -r 055266d62d84 paper/nozomi-master.pdf Binary file paper/nozomi-master.pdf has changed diff -r 7e7fe5e28ba4 -r 055266d62d84 paper/nozomi-master.tex --- a/paper/nozomi-master.tex Mon Feb 05 17:54:31 2018 +0900 +++ b/paper/nozomi-master.tex Tue Feb 06 03:56:16 2018 +0900 @@ -197,9 +197,9 @@ データの圧縮を指定したい場合、Akka、Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことで圧縮伸長を行う。 また、転送を指定したい場合、Akkaにはforwardメソッドがあるためそれを呼び出すことで受け取ったデータの転送が可能だが、Hazelcastは一つのMapへのアクセスに見立てているため、転送にもputを用いる。 -一方でAliceは圧縮の展開と転送を同時に行うことを想定した圧縮・転送機能を持っている。 -Data Segment内に圧縮と非圧縮の両形式を同時に持てるため、受け取った圧縮データを展開をしながら圧縮したまま別ノードに転送することができる。 -また、圧縮するには送信する宛先ラベルに"compressed"とつけるだけでよく、データ取得時に自動で展開もされるため、プログラマがメソッドの呼び出しを追加する必要がなく圧縮・非圧縮を簡単に切り替えられる。 +一方でAliceは圧縮の伸長と転送を同時に行うことを想定した圧縮・転送機能を持っている。 +Data Segment内に圧縮と非圧縮の両形式を同時に持てるため、受け取った圧縮データを伸長をしながら圧縮したまま別ノードに転送することができる。 +また、圧縮するには送信する宛先ラベルに"compressed"とつけるだけでよく、データ取得時に自動で伸長もされるため、プログラマがメソッドの呼び出しを追加する必要がなく圧縮・非圧縮を簡単に切り替えられる。 \newpage @@ -281,12 +281,6 @@ \begin{itemize} \item {\ttfamily void put(String managerKey, String key, Object val)} \end{itemize} -putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。 -peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。 - -\begin{itemize} -\item {\ttfamily void put(String managerKey, String key, Object val)} -\end{itemize} DSをDSMに追加するためのAPIである。第一引数はLocal DSMかRemote DSMかといったManager名を指定する。そし て第二引数で指定されたkeyに対応するDSとして第三引数の値を追加する。 @@ -414,7 +408,7 @@ リモートノードに大きなデータを送るために、データを圧縮したい場合がある。 そこで、Aliceは圧縮をサポートしている。 しかし、単に圧縮のメソッドを用意したわけではない。 -圧縮データの展開と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。 +圧縮データの伸長と、圧縮したまま別ノードへの転送を同時に実現したい場合があるため、Meta CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。 \begin{figure}[h] \begin{center} @@ -446,7 +440,7 @@ \lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java} このようにコードの変更を抑えて圧縮できるため、他の計算部分を変えずにデータ形式が指定できる。 -また、DSを取り出す際もasClass()内部で自動で展開が行われるため、コードの変更がなく、プログラマがデータの展開を考える必要がない。 +また、DSを取り出す際もasClass()内部で自動で伸長が行われるため、コードの変更がなく、プログラマがデータの伸長を考える必要がない。 \subsection{TopologyManager} @@ -492,10 +486,10 @@ 2.4で示したように、InputDSを記述するには、一度フィールドでReceiverをcreateして、その後Reveiverに対してsetKeyで待ち合わせるkeyを指定しなければならない。 このようにインプットの処理が分離されてしまっていては、記述が煩雑な上にコードを読んだ際にどのkeyに対して待ち合わせを行っているのか直感的に分からない。 -さらに、setKeyは明確な記述場所が決まっていないため、そのDSを待ち合わせているCS以外からも呼び出せてしまう(ソースコード\ref{src:StartSetKey)})。 +さらに、setKeyは明確な記述場所が決まっていないため、そのDSを待ち合わせているCS以外からも呼び出せてしまう(ソースコード\ref{src:StartSetKey})。 \lstinputlisting[label=src:StartSetKey, caption=setKeyを外部から呼び出す例]{source/StartSetKey.java} - \lstinputlisting[label=src:SetKey]{source/SetKey.java} + \lstinputlisting[label=src:SetKey, caption=外部setKeyによりどのkeyを待っているかがわからないCSの例]{source/SetKey.java} このような書き方をされると、CSだけを見てどのkeyに対して待ち合わせを行っているのかわからないため、setKeyを呼び出しているコードを辿る必要がある。 これでは見通しが悪いため、どこでkeyを指定するのか明確にすべきである。 @@ -889,6 +883,16 @@ REPLYを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決する。 \chapter{再設計への考察} +Christieではアノテーションを用いることで分離問題を解決することができた。 +このようにアノテーションを用いたAPIはAkkaやHazelcastにはないため、より記述性が高いフレームワークとなったと言える。 + +また、設計をし直したことでAliceより幅広いMeta Computationの実装が容易になった。 +これにより細かな分散プログラムの実装が可能になった。 +ロケーション透過性の高いAkkaやHazelcastではこのようなプログラミングは困難である。 + +keyを用いたプロトコル +また、現在はノードごとにDGMとDGのkeyが与えられているが、将来的にはURLのような大域で使えるkeyを用意することでより手軽なRemoteDGMへのアクセスを提供できると考えられる。 + InputDGの指定において、CGにDGを宣言するというのは、DGをそのままflipできるようにするためであった。 逆に言えばそれ以外でDataGear型でプログラマが利用することは少ない。 そのため、DGを宣言せずにアノテーションから生成し完全にメタレイヤーに移すことで、より分かりやすい記述が可能だと考える。 @@ -896,12 +900,6 @@ また、put/flipする際にDGM名を直接指定する書き方も、まだひと目でアウトプットしている部分が分かるようなシンタックスではないため、改善の余地がある。 -DGMは一種のデータベースであると述べたが、現状のDGMはデータベースに必要なトランザクションを持っていない。 -当研究室で開発しているJungleデータベースはトランザクションを持っており、更にマージ可能な差分管理システムを持っている。 -そのためJungleデータベースとの統合することで、DGMへの操作を信頼性高くすることが望ましい。 - -また、現在はノードごとにDGMとDGのkeyが与えられているが、将来的にはURLのような大域で使えるkeyを用意することでより手軽なRemoteDGMへのアクセスを提供できると考えられる。 - \chapter{結論} \section{まとめ} 本研究では、まず分散フレームワークに必要な要件を洗い出し、Akka、Hazelcastと比較しながら分散フレームワークAliceが分散性を意識して記述できる特徴をもつことを示した。 @@ -924,6 +922,12 @@ CG/DGのプログラミングモデルなどの基本的にはAliceと同じであるが、アノテーションの処理がどれほどのオーバーヘッドに繋がっているか現時点では不明である。 そのため、Aliceと同等の速度性能を持っているか、コードの量や複雑度は抑えられているかなどを分散処理の例題を用いて測定する必要がある。 + +\subsection*{Jungleとの統合} +DGMは一種のデータベースであると述べたが、現状のDGMはデータベースに必要なトランザクションを持っていない。 +当研究室で開発しているJungleデータベースはトランザクションを持っており、更にマージ可能な差分管理システムを持っている。 +そのためJungleデータベースとの統合することで、DGMへの操作を信頼性高くすることが望ましい。 + \subsection*{GearsOSへの移行} GearsOSはまだ開発途中であったため、本論文の作成時点ではChristieのような分散機能を実装することが叶わなかった。 GearsOSではモデル検査機構akasya\cite{akasya}があるため、待ちに入っているkeyのputし忘れなどをコンパイルの段階で見つけることができる。 diff -r 7e7fe5e28ba4 -r 055266d62d84 presen/pictures/ChristieClass.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/pictures/ChristieClass.svg Tue Feb 06 03:56:16 2018 +0900 @@ -0,0 +1,533 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 7e7fe5e28ba4 -r 055266d62d84 presen/pictures/DGM.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/pictures/DGM.svg Tue Feb 06 03:56:16 2018 +0900 @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 7e7fe5e28ba4 -r 055266d62d84 presen/pictures/compress.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/pictures/compress.svg Tue Feb 06 03:56:16 2018 +0900 @@ -0,0 +1,503 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 7e7fe5e28ba4 -r 055266d62d84 presen/pictures/vncandchat.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/pictures/vncandchat.svg Tue Feb 06 03:56:16 2018 +0900 @@ -0,0 +1,481 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 7e7fe5e28ba4 -r 055266d62d84 presen/sample.html --- a/presen/sample.html Mon Feb 05 17:54:31 2018 +0900 +++ b/presen/sample.html Tue Feb 06 03:56:16 2018 +0900 @@ -2,10 +2,10 @@ - 分散システム向けのTopology Managerの改良 + 分散フレームワークChristieの設計 - + @@ -67,15 +67,15 @@
-

分散システム向けのTopology Managerの改良

+

分散フレームワークChristieの設計

- 照屋のぞみ 河野真治 - 琉球大学 工学部 情報工学科 + 照屋のぞみ + - profile not found -
@@ -87,72 +87,83 @@ -

研究目的(1/3)

+

研究背景

- - - -
- -

研究目的(2/3)

-
-

研究目的(3/3)

+

研究目的

+

NAT越えが必要

+ +

NAT越えなどの手法を提案し、その実現にはAliceの再設計が必要であることを示す +Aliceの問題点を踏まえChristieの設計要件を述べる

+ +

本研究では、Aliceから得られた知見をもとに、分散フレームワークChristieの設計を行う。 +Christieでは、シンプルな記述でスケーラブルな分散プログラムの作成を可能にし、当研究室で開発している言語CbCと互換可能な設計を目指す。

+
-

目次

+

目次

@@ -208,7 +219,8 @@ @@ -216,6 +228,57 @@
+

Data Segment API

+ + + +
+
+ +

Code Segmentの記述例

+ +
public class TestCodeSegment extends CodeSegment { 
+    private Receiver input = ids.create(CommandType.TAKE);
+    
+    public TestCodeSegment() {
+        input.setKey("count");
+    }
+    
+    @Override
+    public void run() {
+        int count = input.asClass(Integer.class);
+        System.out.println("data = " + count);
+        
+        new TestCodeSegment();
+        
+        ods.put("count", count);
+    }
+}
+
+ + +
+
+

Computation と Meta Computation

-

Topology ManagerとTopology Node

+

AliceのMeta Computation - Topology Manager/Topology Node

-

Static Topology Manager

+

AliceのMeta Computation - Static Topology Manager

-

Static Topology Manager

+

AliceのMeta Computation - Static Topology Manager

-

Static Topology Manager

+

AliceのMeta Computation - Static Topology Manager

-

Static Topology Manager

+

AliceのMeta Computation - Static Topology Manager

-

Dynamic Topology Manager

+

AliceのMeta Computation - Dynamic Topology Manager

-

障害発生時の対応

+

AliceのMeta Computation - 圧縮

+ + +
+
+ +

AliceのMeta Computation - 圧縮

+
-

Alice上にTreeVNCを実装する際の課題

+

Aliceに求められるMeta Computation - アプリケーションの接続

- -

opt

- - -
-
- -

課題1 - AliceVNCとAliceChatの接続

-
-

課題2 - NATを越えた接続

+

Aliceに求められるMeta Computation - アプリケーションの接続

- -

opt

- - -
-
- -

課題2 - TreeVNCのNAT越えの欠点

-
-

Topology Managerの拡張設計 - 別トポロジーへの接続

-

以降の機能をMeta Meta Computationとして実装
-1. 接続を要求する側のいずれかの Node が接続先 Topology Manager(A)のIPアドレスを自身を管理するTopology Manager(B)に保存。
-opt

+

Aliceに求められるMeta Computation - NATを越えた接続

+
-

Topology Managerの拡張設計 - 別トポロジーへの接続

-
    -
  1. Topology Manager(B)はRootNode(B)にTopology Manager(A) への接続をするよう要求 -opt
  2. -
- - -
-
- -

Topology Managerの拡張設計 - 別トポロジーへの接続

-
    -
  1. RootNode(B) が Topology Manager(A) と接続し、接続すべきRootNode(A)の情報を取得 -opt
  2. -
- - -
-
- -

Topology Managerの拡張設計 - 別トポロジーへの接続

-
    -
  1. 取得した情報をもとに RootNode(A) に接続
    -※①でTopology Managerに保存することでRootNodeが落ちてもトポロジーの再構成時にまた接続要求が出せる
    -opt
  2. -
+

Aliceに求められるMeta Computation - NATを越えた接続

+
@@ -451,6 +475,7 @@

複数のTopology Managerへの対応

@@ -472,107 +497,142 @@
-

Keyの切り替えによる対応

+

Aliceの問題点 - LocalDSMを複数立ち上げられない

-

Topology Managerの拡張設計 - 別ネットワークへの接続

+

Aliceの問題点 - APIシンタックスの分離

- - -
-
- -

Topology Managerの拡張設計 - 別ネットワークへの接続

-
-

Topology Managerの拡張設計 - 別ネットワークへの接続

-

以降の機能をMeta Meta Computationとして実装
-1. 接続を要求する側のいずれかのノードがGlobal Topology ManagerのIPアドレスを自身を管理するTopology ManagerのDSMに保存 -opt

+

Aliceの問題点 - APIシンタックスの分離

+ +
class ShowData extends CodeSegment{
+    private Receiver[] info;
+
+    public ShowData(int cnt) {
+        info = new Receiver[cnt];
+        for (int i= 0;i < cnt; i++) {
+            info[i] = ids.create(CommandType.TAKE);
+            info[i].setKey(SetInfo.array[i]);
+        }
+    }
+
+    @Override
+    public void run() {
+        int size = 0;
+        for (Receiver anInfo : info) {
+            DataList dlist = anInfo.asClass(DataList.class);
+            dlist.showData();
+        }
+    }
+}
+
-

Topology Managerの拡張設計 - 別ネットワークへの接続

-
    -
  1. Topology ManagerはRootNodeにGlobal Topology Managerへの接続をするよう要求 -opt
  2. -
- - -
-
- -

Topology Managerの拡張設計 - 別ネットワークへの接続

-
    -
  1. RootNodeがGrobal Topology Managerと接続し、自身のIPアドレスを送る。Global Topology Manager が受け取ったIPアドレスがプライベートアドレスであれば、ノードに対してNATの外側IPアドレス/ポート番号を要求される。RootNode はそれに返答。 -opt
  2. -
+

Aliceの問題点 - 型が推測できない

+
-

Topology Managerの拡張設計 - 別ネットワークへの接続

-
    -
  1. UDP hole punching 行われ、Network1のRootNodeとNetwork2のRootNodeが接続される -opt
  2. -
+

Aliceの問題点 - まとめ

+
-

Topology Managerの拡張設計 - 別ネットワークへの接続

-
    -
  1. もし接続が確立されなければ、Global Topology Manager がデータ中継用の CSを用意しデータを中継する -opt
  2. -
+

分散フレームワークChristieへの必要要件

+
-

Aliceと他言語等との比較(1) - Erlang

-

Ericssonが開発した並列指向関数型プログラミング言語

- +

Christie - 基本設計

+ + +
+
+ +

Christie - 基本設計

+ @@ -581,19 +641,110 @@
-

Aliceと他言語等との比較(2) - Akka

-

アクターモデルのScalaおよびJava向けの並列および分散処理フレームワーク

+

Christie - 基本設計

+ + +
+
+ +

Christie - DGMの複数立ち上げ

+ + +
+
+ +

Christie - CGの生成方法

+
    +
  1. StartCodeGear.classを継承しCGMを生成する
  2. +
  3. CGをnewしたあとsetupを用いる
      -
    • 通信部分等を子アクターで分離し階層化
    • +
    • newが終わらないとアノテーションから待ち合わせを行う処理ができないため
    • +
    • このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない
  4. -
  5. 相違点 +
+ +
public class StartTest extends StartCodeGear{//StartCG
+
+    public StartTest(CodeGearManager cgm) {
+        super(cgm);
+    }
+
+    public static void main(String args[]){
+        StartTest start = new StartTest(createCGM(10000));//CGMを生成
+    }
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        cgm.setup(new TestCodeGear());//CGの待ち合わせを開始
+        getLocalDGM().put("count", 1);
+    }
+}
+
+ + +
+
+ +

Christie - アノテーションを用いたインプット記述

+ + + +
+
+ +

Christie - アノテーションを用いたインプット記述

+ +
@Take(”count”)
+public DataGear<Integer> count = new DataGear<>();
+
+ +
@RemoteTake(dgmName="remote", key=”count”)
+public DataGear<Integer> count = new DataGear<>();
+
+ + +
+
+ +

Christie - アノテーションを用いたインプット記述

+ @@ -602,11 +753,155 @@
-

まとめ

+

Christie - 型を指定しないデータ取り出し

+ +
@Take(”count”)
+public DataGear<Integer> count = new DataGear<>();
+
+ + +
+
+ +

Christie - 型を指定しないデータ取り出し

+ +
public class GetData extends CodeGear{ @Take(”name”)
+    public DataGear<String> name = new DataGear<>();
+    
+    @Override
+    protected void run(CodeGearManager cgm) {
+        System.out.println(”this name is : ” + name.getData());
+    }
+}
+
+ + + +
+
+ +

Christie - 設計の効果

+ + + +
+
+ +

Christieと他フレームワークの比較

+ + + +
+
+ +

Christieと他フレームワークの比較 - Akka

+ + +
+
+ +

Christieと他フレームワークの比較 - Hazelcast

+ + + +
+
+ +

Christieと他フレームワークの比較 - 設計思想

+ + + +
+
+ +

Christieと他フレームワークの比較 - 記述性

+ + + +
+
+ +

Christieと他フレームワークの比較 - 提供する機能

+ + + +
+
+ +

まとめ

+ + + +
+
+ +

今後の課題

+