Mercurial > hg > Papers > 2018 > nozomi-master
annotate presen/sample.markdown @ 182:a4c6184d3e22
minor change
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 07 Feb 2018 09:18:50 +0900 |
parents | 38d95e434fbc |
children | b62fc3a499f9 |
rev | line source |
---|---|
176 | 1 title: 分散フレームワークChristieの設計 |
2 author: 照屋のぞみ | |
175 | 3 |
177 | 4 # 研究目的(1/2) |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
5 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
6 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す |
177 | 7 * 仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む |
8 * スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力 | |
176 | 9 |
177 | 10 # 研究目的(2/2) |
11 * 本研究では、Aliceの通信の信頼性を高めるためにNAT越えの機能設計を提案する | |
12 * そしてその実現にはAliceの再設計が必要であることを示す | |
13 * Aliceの問題点を整理し、得られた知見をもとに分散フレームワークChristieの設計を行う | |
176 | 14 |
175 | 15 |
16 # 目次 | |
17 * Aliceの概要 | |
179 | 18 * AliceのNAT越え |
176 | 19 * Aliceの問題点 |
20 * Christieの設計 | |
21 * 他フレームワークとの比較 | |
175 | 22 * まとめ |
176 | 23 * 今後の課題 |
24 | |
25 | |
26 | |
175 | 27 |
28 # Data Segment と Code Segment | |
29 * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割して依存関係を記述することでプログラミングを行う。 | |
30 * CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。 | |
31 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 | |
32 ![opt](./images/dsandcs.svg){:width="50%"} | |
33 | |
34 # CodeSegmentの依存関係 | |
35 * データの依存関係にないCSは並列実行される | |
36 * データの依存関係がある場合は Input DS が揃うと順に実行される | |
37 * DSはCSに専有されるためロックの記述を必要としない | |
38 ![opt](./images/dsandcs2.svg){:width="60%"} | |
39 | |
40 # Data Segment と CodeSegment | |
41 * AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する | |
42 * ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。 | |
43 | |
44 # Data Segment Manager | |
45 * DS の集合体であるデータベースを Alice では **DS Manager(DSM)** と呼ぶ。 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
46 * DSM 内の DS には対応する String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。 |
175 | 47 ![opt](./pictures/key.svg){:width="50%"} |
48 | |
49 # Data Segment Manager | |
50 * Local DSM … 各ノード固有のデータベース | |
51 * Remote DSM … 他のノードのLocal DSMのproxy。接続しているノードの数だけ存在する。 | |
52 * Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる | |
176 | 53 * Remote DSMにはString型のDSM keyを指定してアクセスする |
175 | 54 ![opt](./pictures/newDSM.svg){:width="50%"} |
55 | |
176 | 56 # Data Segment API |
57 * DSの取得 | |
179 | 58 * take/peek |
176 | 59 * DSの追加 |
179 | 60 * put/update |
61 * DSの転送 | |
62 * flip | |
176 | 63 |
64 # Code Segmentの記述例 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
65 * take/peekをするにはcreate/setKeyメソッドを使う |
176 | 66 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定 |
67 * データをReceiverから取り出す際は *asClass()* で型を指定 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
68 * CSを生成し待ち合わせを指定するにはCSをnewする |
176 | 69 ```java |
70 public class TestCodeSegment extends CodeSegment { | |
71 private Receiver input = ids.create(CommandType.TAKE); | |
72 | |
73 public TestCodeSegment() { | |
74 input.setKey("count"); | |
75 } | |
76 | |
77 @Override | |
78 public void run() { | |
79 int count = input.asClass(Integer.class); | |
80 System.out.println("data = " + count); | |
81 | |
82 new TestCodeSegment(); | |
83 | |
84 ods.put("count", count); | |
85 } | |
86 } | |
87 ``` | |
88 | |
175 | 89 # Computation と Meta Computation |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
90 * 分散計算にはアルゴリズムの他に、以下のような処理が必要である。 |
175 | 91 * 分散トポロジーの構成 |
92 * 通信の切断・再接続時の処理 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
93 * データの圧縮を含む表現形式の選択 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
94 * NATなどのネットワークの詳細 |
175 | 95 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
96 * Aliceでは、これらをMeta Computationと呼ぶ。 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
97 * Meta ComputationもCS/DSによって記述される。 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
98 ![opt](./pictures/metaCSDS.svg){:width="50%"} |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
99 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
100 # AliceのMeta Computation - Topology Manager |
175 | 101 * Topology Manager |
102 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
103 * Static Topology Manager...参加ノード数の決まったトポロジーをファイルに記述 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
104 * Dynamic Topology Manager...可変長のノードに対応し、修復も行う |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
105 ![opt](./pictures/connect.svg){:width="50%"} |
175 | 106 |
176 | 107 # AliceのMeta Computation - 圧縮 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
108 * 圧縮したデータの伸長と圧縮したままの転送を同時に行いたい |
176 | 109 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる |
110 ![opt](./pictures/compress.svg){:width="80%"} | |
175 | 111 |
176 | 112 # AliceのMeta Computation - 圧縮 |
113 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい | |
114 `put("compressedRemoteDGM", "key", data)` | |
115 * 伸長も *asClass()* した際に自動でされる | |
116 * コードの変更が抑えて圧縮・非圧縮が切り替えられる | |
175 | 117 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
118 # AliceのNAT越え |
179 | 119 * NATを越えたノード間通信は分散処理の課題である |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
120 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能 |
176 | 121 ![opt](./pictures/overNAT.svg){:width="70%"} |
175 | 122 |
123 # 複数のTopology Managerへの対応 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
124 * この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない |
175 | 125 * 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理 |
126 * Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能 | |
127 ![opt](./pictures/somehostname2.svg){:width="50%"} | |
128 | |
176 | 129 |
130 # Aliceの問題点 - LocalDSMを複数立ち上げられない | |
131 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない | |
132 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない | |
179 | 133 * 現状ではNAT越えのMeta Computationの追加が困難 |
176 | 134 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない |
179 | 135 * 再設計の必要がある |
176 | 136 |
137 # Aliceの問題点 - APIシンタックスの分離 | |
179 | 138 * setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる |
139 * どのkeyを待っているのか不明なCSが生まれてしまう | |
176 | 140 * setKeyではkeyを動的に指定することができる |
141 * どんな処理を行っているかわかりづらい | |
142 * 対応するput箇所も修正しなければならない | |
175 | 143 |
176 | 144 # Aliceの問題点 - APIシンタックスの分離 |
145 * setKeyは全てのcreateが終わった最後に呼ばなければならない | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
146 * このように交互に書くと実行時データを取り出すときにNullPointerExeptionになる |
176 | 147 ```java |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
148 class TestCG extends CodeSegment{ |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
149 private Receiver input1; |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
150 private Receiver input2; |
176 | 151 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
152 public TestCG() { |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
153 input1 = ids.create(CommandType.TAKE); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
154 input1.setKey("hoge"); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
155 input2 = ids.create(CommandType.TAKE); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
156 input2.setKey("huga"); |
176 | 157 } |
158 } | |
159 ``` | |
175 | 160 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
161 # Aliceの問題点 - APIシンタックスの分離 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
162 ![opt](./pictures/nullpo.svg){:width="60%"} |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
163 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
164 |
176 | 165 # Aliceの問題点 - 型が推測できない |
166 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない | |
167 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある | |
168 * 型をDSをputした箇所までコードをたどる必要がある | |
169 | |
170 # Aliceの問題点 - まとめ | |
171 * 以下の問題がAliceの信頼性・拡張性を下げている | |
172 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難 | |
173 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい | |
179 | 174 * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
175 * これらを踏まえフレームワークChristieを設計する |
176 | 176 |
179 | 177 # Christie - 基本設計(1) |
176 | 178 * Javaで実装される |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
179 * 処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
180 * Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理 |
175 | 181 |
179 | 182 # Christie - 基本設計(2) |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
183 * CGM同士はThreadPoolを共有 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
184 * ThreadPool...CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
185 * ThreadPoolが増えるとCPUのコア数に合わない量のスレッドを管理することになり、並列性が下がる |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
186 * CGM同士はCGMのリストを共有 |
176 | 187 * メタ計算で全てのCGMにアクセス可能 |
188 ![opt](./pictures/ChristieClass.svg){:width="60%"} | |
189 | |
179 | 190 # Christie - 基本設計(2) DGMの複数立ち上げ |
176 | 191 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる |
179 | 192 * NAT越えなどの機能拡張に対応可能 |
176 | 193 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする |
179 | 194 * 分散プログラムのローカルでのテストが可能になる |
176 | 195 ![opt](./pictures/DGM.svg){:width="50%"} |
196 | |
179 | 197 # Christie - 基本設計(3) |
198 * CG を記述する際は Alice同様CodeGear.classを継承 | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
199 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述 |
179 | 200 * run内で新たなCGを作るためのAPIにはCGM経由で呼び出す |
176 | 201 |
202 # Christie - アノテーションを用いたインプット記述 | |
203 * keyの指定にはJavaのアノテーションを用いる | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
204 * フィールドやメソッドに対して@から始まる属性を付与できる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
205 * @Override、@SuppressWarningsなど |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
206 * コンパイル時にエラーを出せる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
207 ```java |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
208 @Take(”count”) |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
209 public DataGear<Integer> count = new DataGear<>(); |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
210 ``` |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
211 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
212 # Christie - アノテーションを用いたインプット記述 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
213 * 独自アノテーションを定義できる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
214 * フィールドやメソッドなどターゲットを指定できる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
215 * アノテーションを保持できる範囲をRUNTIME、CLASS、SOURCEから指定できる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
216 * 引数をうけとることもできる |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
217 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
218 ```java |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
219 @Target(ElementType.FIELD) |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
220 @Retention(RetentionPolicy.RUNTIME) |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
221 public @interface Take { |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
222 String value(); |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
223 } |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
224 ``` |
175 | 225 |
176 | 226 # Christie - アノテーションを用いたインプット記述 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
227 * InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
228 * アノテーションからRUNTIMEで待ち合わせの処理を行う |
176 | 229 * Takeの例 |
230 ```java | |
231 @Take(”count”) | |
232 public DataGear<Integer> count = new DataGear<>(); | |
233 ``` | |
234 * RemoteTakeの例 | |
235 ```java | |
236 @RemoteTake(dgmName="remote", key=”count”) | |
237 public DataGear<Integer> count = new DataGear<>(); | |
238 ``` | |
175 | 239 |
176 | 240 # Christie - アノテーションを用いたインプット記述 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
241 * アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
242 * 待ち合わせを開始するには、newしたあとCGMが持つsetupを行う |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
243 `cgm.setup(new TestCodeGear());` |
182 | 244 * フィールドがnewされたあとでないとrefrectionAPIで取れない |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
245 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
246 # Christie - アノテーションを用いたインプット記述 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
247 ![opt](./pictures/setup.svg){:width="70%"} |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
248 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
249 # Christie - アノテーションによるシンタックスの分離阻止 |
176 | 250 * アノテーションは必ずフィールドに付けなければならない |
251 * InputDGの生成とkeyの指定を一箇所に書ける | |
252 * アノテーションの内容はコンパイル時に決定される | |
253 * 動的なkey指定を防ぐ | |
175 | 254 |
176 | 255 # Christie - 型を指定しないデータ取り出し |
256 * InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる | |
257 * DataGearはJavaの総称型を用いて<>内に指定した型を受け取る | |
258 ```java | |
259 @Take(”count”) | |
260 public DataGear<Integer> count = new DataGear<>(); | |
261 ``` | |
175 | 262 |
176 | 263 # Christie - 型を指定しないデータ取り出し |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
264 * reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
265 * 型を判断できる |
176 | 266 * 宣言された型は内部で保存され、ノード間通信でも保たれる |
267 * AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる | |
268 ```java | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
269 public class GetData extends CodeGear{ |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
270 @Take(”name”) |
176 | 271 public DataGear<String> name = new DataGear<>(); |
272 | |
273 @Override | |
274 protected void run(CodeGearManager cgm) { | |
275 System.out.println(”this name is : ” + name.getData()); | |
276 } | |
277 } | |
278 ``` | |
175 | 279 |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
280 # Christie - まとめ |
179 | 281 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった |
176 | 282 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした |
283 * 型の整合性を保証することで信頼性が向上した | |
175 | 284 |
176 | 285 # Christieと他フレームワークの比較 |
179 | 286 * Akka、Hazelcastと比較してChristieの特徴を述べる |
287 * Akka ...Scala/Java向け分散フレームワーク | |
288 * Hazelcast ...Java向け分散フレームワーク | |
175 | 289 |
176 | 290 # Christieと他フレームワークの比較 - Akka |
291 * アクターモデル | |
292 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル | |
293 * アクターは固有のアドレス持つ | |
294 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信 | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
295 * `akka://mySystem/user/supervisorActor/childActor` |
176 | 296 * アクターはメールボックスというキューを持つ |
297 * 受け取ったメッセージをパターンマッチで順次処理 | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
298 * パターンマッチにはScalaのcase classを用いられる |
179 | 299 ![opt](./pictures/Akka.svg){:width="70%"} |
175 | 300 |
176 | 301 # Christieと他フレームワークの比較 - Hazelcast |
302 * キーと値の1対1でデータを管理するインメモリ・データグリッド | |
303 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル | |
304 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
305 * 共有のタプルスペースに書き込むとマルチキャストで全サーバにデータが送られる |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
306 ![opt](./pictures/Hazelcast.svg){:width="50%"} |
175 | 307 |
176 | 308 # Christieと他フレームワークの比較 - 設計思想 |
309 * AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
310 * Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
311 * 通常計算とメタ計算に分けているため複雑さを下げている |
175 | 312 |
176 | 313 # Christieと他フレームワークの比較 - 記述性 |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
314 * アノテーションを使ったインプットの指定はAkkaやHazelcastにはない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
315 * 複数のインプットを待ち合わせして処理を行いたい場合 |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
316 * Akkaは待ち合わせ処理をプログラマが書かなければならない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
317 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
318 * データの圧縮通信を指定したい場合 |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
319 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する |
179 | 320 * ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能 |
175 | 321 |
322 # まとめ | |
176 | 323 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した |
324 * Aliceの問題点を整理し、再設計の必要性を述べた | |
325 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた | |
326 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した | |
179 | 327 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した |
175 | 328 |
176 | 329 # 今後の課題 |
330 * DataGearのメタレイヤーへの移行 | |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
331 * ユーザーがDataGear型ではなく任意の型でインプットを宣言できるようにする |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
332 * getData()をせず直接宣言した変数を使う |
176 | 333 * TopologyManagerの実装 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
334 * Christie上にTopologyManagerを実装し、NAT越えが可能か確認する |
176 | 335 * 実用性の検証 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
336 * Aliceと同等の分散プログラムの記述性能があるか確認する |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
337 * アノテーションの処理がオーバーヘッドになっていないか測定する |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
338 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
339 # 今後の課題 |
176 | 340 * Jungleとの統合 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
341 * DGMはトランザクションを持たない |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
342 * 当研究室で開発しているJungleデータベースはトランザクションや差分管理機能を持つ |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
343 * Jungleと統合できればより信頼性の高いデータ操作ができる |
176 | 344 * GearsOSへの移行 |
181
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
345 * 当研究室で開発しているCG/DGモデルのOS |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
346 * モデル検査機構akasyaの搭載など、より信頼性の高い記述環境 |
38d95e434fbc
add Annotation slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
180
diff
changeset
|
347 * 将来GearsOSの分散部分にChristieを移植できると良い |
179 | 348 |
175 | 349 <style type="text/css"> |
350 <!-- | |
351 *{ | |
352 font:nomal 100% 'PT Sans'; | |
353 } | |
354 | |
355 ul > li{ | |
356 list-style-type:disc; | |
357 } | |
358 | |
359 .slide h1{ | |
360 text-align:left; | |
361 color:#777777; | |
362 font:bold 40px/1.13 'PT Sans', sans-serif; | |
363 margin-bottom: 50px; | |
364 } | |
365 | |
366 div#slide1 h1{ | |
367 text-align:left; | |
368 color:#777777; | |
369 font:bold 60px 'PT Sans', sans-serif; | |
370 margin-bottom: 50px; | |
371 } | |
372 | |
373 pre > code{ | |
374 font-family:'Droid Sans Mono', 'Courier New', monospace; | |
375 } | |
376 | |
377 img[alt="opt"]{ | |
378 display: block; | |
379 margin-left: auto; | |
380 margin-right: auto; | |
381 } | |
382 | |
383 img[alt="right"]{ | |
384 margin-right: 0; | |
385 } | |
386 | |
387 table { | |
388 margin-left: auto; | |
389 margin-right: auto; | |
390 } | |
391 | |
392 th { | |
393 font-size: 120%; | |
394 } | |
395 --> | |
396 </style> |