comparison presen/sigOS/sample.html @ 18:20c9082b212d

change2
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2015 18:03:58 +0900
parents 1ac38e2b7572
children a348947a5c61
comparison
equal deleted inserted replaced
17:a26eacfb4922 18:20c9082b212d
28 <!-- todo: create slide id from header? like a slug in blogs? --> 28 <!-- todo: create slide id from header? like a slug in blogs? -->
29 29
30 <div class="slide" id="2"><div> 30 <div class="slide" id="2"><div>
31 <section> 31 <section>
32 <header> 32 <header>
33 <h1 id="section">研究背景(1/2)</h1> 33 <h1 id="section">研究目的</h1>
34 </header> 34 </header>
35 <!-- === begin markdown block === 35 <!-- === begin markdown block ===
36 36
37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] 37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
38 on 2015-05-25 00:09:22 +0900 with Markdown engine kramdown (1.5.0) 38 on 2015-05-25 18:01:27 +0900 with Markdown engine kramdown (1.5.0)
39 using options {} 39 using options {}
40 --> 40 -->
41 41
42 <!-- _S9SLIDE_ --> 42 <!-- _S9SLIDE_ -->
43 43
44 <ul> 44 <ul>
45 <li>信頼性とスケーラビリティに優れた分散プログラムをプログラマが一から記述することは容易ではない。</li> 45 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li>
46 <li>本研究室ではデータを <em>Data Segment</em> 、タスクを <em>Code Segment</em> という単位で分割して記述する<strong>並列分散フレームワークAlice</strong>の開発を行っている。</li> 46 <li>Aliceのメタ計算として、通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。</li>
47 <li>Aliceは分散環境の構築のためのAPIが提供されており、スケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。 </li>
48 </ul> 47 </ul>
49 48
50 49
51 50
52 </section> 51 </section>
53 </div></div> 52 </div></div>
54 53
55 <div class="slide" id="3"><div> 54 <div class="slide" id="3"><div>
56 <section> 55 <section>
57 <header> 56 <header>
58 <h1 id="section-1">研究背景(1/2)</h1> 57 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1>
59 </header> 58 </header>
60 <!-- _S9SLIDE_ --> 59 <!-- _S9SLIDE_ -->
61 60
62 <ul> 61 <ul>
63 <li>水族館の例題等において、Aliceが分散プログラムを記述する能力を有することは確認された。</li> 62 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割してプログラミングを行う。</li>
64 <li>実用的な分散プログラムを作成するためには、圧縮形式のデータで通信する機能等が必要だとわかった。</li> 63 <li>AliceはJavaで実装されており、CS をユーザーが記述する際には CodeSegment.class を継承することで CS で使用する API を利用する事ができる。</li>
64 <li>DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li>
65 </ul> 65 </ul>
66 66
67 67
68 68
69 </section> 69 </section>
70 </div></div> 70 </div></div>
71 71
72 <div class="slide" id="4"><div> 72 <div class="slide" id="4"><div>
73 <section> 73 <section>
74 <header> 74 <header>
75 <h1 id="section-2">研究目的</h1> 75 <h1 id="data-segment--code-segment-1">Data Segment と Code Segment</h1>
76 </header> 76 </header>
77 <!-- _S9SLIDE_ --> 77 <!-- _S9SLIDE_ -->
78 78
79 <ul> 79 <ul>
80 <li>Aliceに圧縮機能等を追加することにより、Data Segmentの多態性を実現しノード間通信における自由度の向上を図る。 </li> 80 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li>
81 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。
82 <img src="./images/dsandcs.svg" alt="opt" /></li>
81 </ul> 83 </ul>
82 84
83 85
84 86
85 </section> 87 </section>
86 </div></div> 88 </div></div>
87 89
88 <div class="slide" id="5"><div> 90 <div class="slide" id="5"><div>
89 <section> 91 <section>
90 <header> 92 <header>
91 <h1 id="alice1---data-segment">Aliceの概要(1) - Data Segment</h1> 93 <h1 id="codesegment">CodeSegmentの依存関係</h1>
92 </header> 94 </header>
93 <!-- _S9SLIDE_ --> 95 <!-- _S9SLIDE_ -->
94 96
95 <ul> 97 <ul>
96 <li>複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になり、スケラビリティーを低下させる。</li> 98 <li>データの依存関係にないCSは並列実行される</li>
97 <li>Alice はデータを細かく分割して記述する。その分割されたデータを <strong>Data Segment(DS)</strong> と呼ぶ。</li> 99 <li>データの依存関係がある場合は Input DS が揃うと順に実行される
100 <img src="./images/dsandcs2.svg" alt="opt" /></li>
98 </ul> 101 </ul>
99 102
100 103
101 104
102 </section> 105 </section>
103 </div></div> 106 </div></div>
104 107
105 <div class="slide" id="6"><div> 108 <div class="slide" id="6"><div>
106 <section> 109 <section>
107 <header> 110 <header>
108 <h1 id="alice2---data-segment-manager">Aliceの概要(2) - Data Segment Manager</h1> 111 <h1 id="data-segment">Data Segment</h1>
109 </header> 112 </header>
110 <!-- _S9SLIDE_ --> 113 <!-- _S9SLIDE_ -->
111 114
112 <ul> 115 <ul>
113 <li>DS は queue に保存される。queue には対 になる key し、 key を指定して DS の保存、取得を行う。</li> 116 <li>整数や文字列などの基本的なデータの集まり</li>
114 <li>queue の集合体であるデータベースデータベースを Alice では DS Manager(DSM) と呼ぶ。<br /> 117 <li>Aliceの場合はJavaオブジェクトに対応</li>
115 <img src="./pictures/dsm.svg" alt="opt" /></li>
116 </ul> 118 </ul>
117 119
118 120
119 121
120 </section> 122 </section>
121 </div></div> 123 </div></div>
122 124
123 <div class="slide" id="7"><div> 125 <div class="slide" id="7"><div>
124 <section> 126 <section>
125 <header> 127 <header>
126 <h1 id="alice2---data-segment-manager-1">Aliceの概要(2) - Data Segment Manager</h1> 128 <h1 id="data-segment-manager">Data Segment Manager</h1>
127 </header> 129 </header>
128 <!-- _S9SLIDE_ --> 130 <!-- _S9SLIDE_ -->
129 131
132 <ul>
133 <li>DS の集合体であるデータベースを Alice では DS Manager(DSM) と呼ぶ。 </li>
134 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li>
135 <li>DS の追加<br />
136 put(String managerKey, String key, Object val) </li>
137 <li>DS の取得<br />
138 take(String managerKey, String key) </li>
139 </ul>
140
141 <!--![opt](./images/dsm.svg)-->
142
143
144
145 </section>
146 </div></div>
147
148 <div class="slide" id="8"><div>
149 <section>
150 <header>
151 <h1 id="data-segment-manager-1">Data Segment Manager</h1>
152 </header>
153 <!-- _S9SLIDE_ -->
154
155 <img src="./images/remote_datasegment.svg" alt="opt" width="450px" rightmargin="0"/></li>
130 <ul> 156 <ul>
131 <li>Local DSM … 各ノード固有のデータベース。</li> 157 <li>Local DSM … 各ノード固有のデータベース。</li>
132 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在。<br /> 158 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br />
133 <img src="./images/remote_datasegment.svg" alt="opt" width="450px" /></li> 159 </ul>
134 </ul> 160
135 161
136 162
137 163 </section>
138 </section> 164 </div></div>
139 </div></div> 165
140 166 <div class="slide" id="9"><div>
141 <div class="slide" id="8"><div> 167 <section>
142 <section> 168 <header>
143 <header> 169 <h1 id="data-segment-">Data Segment の表現</h1>
144 <h1 id="alice3---data-segment-api">Aliceの概要(3) - Data Segment API</h1> 170 </header>
145 </header> 171 <!-- _S9SLIDE_ -->
146 <!-- _S9SLIDE_ --> 172
147 173 <ul>
148 <p>DSMに対して以下のコマンドを送り操作できる </p> 174 <li>DSは複数の表現を同時に持っており、現在は3種類の表現がある。
175 <ol>
176 <li>一般的な Java のクラスオブジェクト</li>
177 <li>MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。</li>
178 <li>2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 </li>
179 </ol>
180 </li>
181 </ul>
182
183
184
185 </section>
186 </div></div>
187
188 <div class="slide" id="10"><div>
189 <section>
190 <header>
191 <h1 id="messagepack">MessagePackとは</h1>
192 </header>
193 <!-- _S9SLIDE_ -->
194
195 <ul>
196 <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li>
197 <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li>
198 <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li>
199 </ul>
200
201
202
203 </section>
204 </div></div>
205
206 <div class="slide" id="11"><div>
207 <section>
208 <header>
209 <h1 id="cs--input-ds-">CS と Input DS の対応付け</h1>
210 </header>
211 <!-- _S9SLIDE_ -->
212
213 <ul>
214 <li>setKey()にtakeコマンドをセットすることで Input DS を指定する</li>
215 <li>実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする </li>
216 </ul>
217
218
219
220 </section>
221 </div></div>
222
223 <div class="slide" id="12"><div>
224 <section>
225 <header>
226 <h1 id="cs--">CS の 例</h1>
227 </header>
228 <!-- _S9SLIDE_ -->
229
230 <p lang="java">RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す</p>
231 <pre><code>public class RemoteIncrement extends CodeSegment {
232
233 public Receiver num = ids.create(CommandType.TAKE);
234
235 @Override
236 public void run() {
237 int num = this.num.asClass(Integer.class);
238 if (num == 10) System.exit(0);
239
240 RemoteIncrement cs = new RemoteIncrement();
241 cs.num.setKey("remote", "num");
242
243 ods.put("local", "num", num);
244 }
245
246 }
247 </code></pre>
248
249
250
251 </section>
252 </div></div>
253
254 <div class="slide" id="13"><div>
255 <section>
256 <header>
257 <h1 id="treevnc">TreeVNC</h1>
258 </header>
259 <!-- _S9SLIDE_ -->
260
261 <ul>
262 <li>Aliceを用いて実装する実用的な分散プログラムの例題</li>
263 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム</li>
264 <li>TightVNCがもとになっている<br />
265 <img src="./images/treeVNC.svg" alt="opt" /></li>
266 </ul>
267
268
269
270 </section>
271 </div></div>
272
273 <div class="slide" id="14"><div>
274 <section>
275 <header>
276 <h1 id="computation">Computation</h1>
277 </header>
278 <!-- _S9SLIDE_ -->
279
280 <ul>
281 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
282 <li>Alice の Computationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li>
283 <li>TreeVNC の Computationは、VNCサーバからデータを受け取って表示する処理。</li>
284 </ul>
285
286
287
288 </section>
289 </div></div>
290
291 <div class="slide" id="15"><div>
292 <section>
293 <header>
294 <h1 id="meta-computation">Meta Computation</h1>
295 </header>
296 <!-- _S9SLIDE_ -->
297
298 <ul>
299 <li>通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。</li>
300 <li>TreeVNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。</li>
301 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li>
302 </ul>
303
304
305
306 </section>
307 </div></div>
308
309 <div class="slide" id="16"><div>
310 <section>
311 <header>
312 <h1 id="treevncalicemeta-computation">TreeVNCで用いるAliceのMeta Computation</h1>
313 </header>
314 <!-- _S9SLIDE_ -->
315
316 <ul>
317 <li>TreeTopologyの構成</li>
318 <li>ノード間通信の切断時・再接続時の処理</li>
319 <li>データの圧縮</li>
320 <li>子ノードへのデータの複製</li>
321 </ul>
322
323
324
325 </section>
326 </div></div>
327
328 <div class="slide" id="17"><div>
329 <section>
330 <header>
331 <h1 id="dsmapi">データの転送 - DSMとAPIの追加</h1>
332 </header>
333 <!-- _S9SLIDE_ -->
334
335 <ul>
336 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加。</li>
337 <li>指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる<br />
338 put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br />
339 take(String <strong>“compressed”</strong> + managerKey, String key) </li>
340 </ul>
341
342
343
344 </section>
345 </div></div>
346
347 <div class="slide" id="18"><div>
348 <section>
349 <header>
350 <h1 id="section-1">データの転送 - データ表現の自動生成</h1>
351 </header>
352 <!-- _S9SLIDE_ -->
353
354 <ul>
355 <li>DS が圧縮表現を持っていれはそれをそのまま子ノードにputする</li>
356 <li>持っていなければその時点でCompressed DSM内部で圧縮表現を生成してputする</li>
357 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを伸長をした後、転送のために再圧縮することはない。</li>
358 </ul>
359
360
361
362 </section>
363 </div></div>
364
365 <div class="slide" id="19"><div>
366 <section>
367 <header>
368 <h1 id="section-2">データの受け取り - 任意の形式での取得</h1>
369 </header>
370 <!-- _S9SLIDE_ -->
371
372 <ul>
373 <li>圧縮表現で画面データ受け取り、Compressed DSM 内に格納。</li>
374 <li>TightVNCが画面表示のためにデータを必要としたときに、 asClass() を用いて任意の形式でデータを取り出す。</li>
375 <li>asClass() は DS のcastメソッドであり、内部で伸長と MessagePack での変換を行う。</li>
376 </ul>
377
378
379
380 </section>
381 </div></div>
382
383 <div class="slide" id="20"><div>
384 <section>
385 <header>
386 <h1 id="alice">データの受け取り - Aliceの通信パケット変更</h1>
387 </header>
388 <!-- _S9SLIDE_ -->
389
390 <ul>
391 <li>通信ヘッダにデータの状態を表すフラグを追加したことで、受け取ったデータを適切な形式でDSM内に格納できる。</li>
392 <li>圧縮前と圧縮後のデータサイズを入れたことにより、受け取ったデータの適切な伸長が可能。</li>
393 </ul>
149 394
150 <table style="border-collapse: collapse;border:1px solid #000000;"> 395 <table style="border-collapse: collapse;border:1px solid #000000;">
151 <tr>
152 <td style="border:1px solid #000000;"> put</td>
153 <td style="border:1px solid #000000;">データを追加する</td>
154 </tr>
155 <tr>
156 <td style="border:1px solid #000000;"> update </td>
157 <td style="border:1px solid #000000;">データを更新する</td>
158 </tr>
159 <tr>
160 <td style="border:1px solid #000000;"> peek</td>
161 <td style="border:1px solid #000000;">データを取得する</td>
162 </tr>
163 <tr>
164 <td style="border:1px solid #000000;"> take</td>
165 <td style="border:1px solid #000000;">データを取得する。取得したデータはDSMから削除される。</td>
166 </tr>
167 </table>
168
169
170
171 </section>
172 </div></div>
173
174 <div class="slide" id="9"><div>
175 <section>
176 <header>
177 <h1 id="alice4---data-segment-">Aliceの概要(4) - Data Segment の表現</h1>
178 </header>
179 <!-- _S9SLIDE_ -->
180
181 <ul>
182 <li>一般的な Java のクラスオブジェクト
183 <ul>
184 <li>LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。</li>
185 </ul>
186 </li>
187 <li>MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト
188 <ul>
189 <li>RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。</li>
190 </ul>
191 </li>
192 </ul>
193
194
195
196 </section>
197 </div></div>
198
199 <div class="slide" id="10"><div>
200 <section>
201 <header>
202 <h1 id="alice5---code-segment">Aliceの概要(5) - Code Segment</h1>
203 </header>
204 <!-- _S9SLIDE_ -->
205
206 <ul>
207 <li>Alice上で実行されるタスクの単位を <strong>Code Segment(CS)</strong> と呼ぶ。</li>
208 <li>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</li>
209 <li>CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。</li>
210 </ul>
211
212
213
214 </section>
215 </div></div>
216
217 <div class="slide" id="11"><div>
218 <section>
219 <header>
220 <h1 id="alice5---code-segment-1">Aliceの概要(5) - Code Segment</h1>
221 </header>
222 <!-- _S9SLIDE_ -->
223
224 <ul>
225 <li>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。</li>
226 <li>keyで指定されたDSが揃うと実行されるという性質を持つ。
227 <img src="./images/dsandcs.svg" alt="opt" /></li>
228 </ul>
229
230
231
232 </section>
233 </div></div>
234
235 <div class="slide" id="12"><div>
236 <section>
237 <header>
238 <h1 id="alice6---codesegment">Aliceの概要(6) - CodeSegmentの依存関係</h1>
239 </header>
240 <!-- _S9SLIDE_ -->
241
242 <ul>
243 <li>データの依存関係にないCSは並列実行される</li>
244 <li>データの依存関係がある場合は依存を解決した順に実行される</li>
245 <li>並列度あげるために、処理を細かく記述し、依存するDSを少なくする
246 <img src="./images/dsandcs2.svg" alt="opt" /></li>
247 </ul>
248
249
250
251 </section>
252 </div></div>
253
254 <div class="slide" id="13"><div>
255 <section>
256 <header>
257 <h1 id="alicemeta-computation12">AliceのMeta Computation(1/2)</h1>
258 </header>
259 <!-- _S9SLIDE_ -->
260
261 <ul>
262 <li>並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。</li>
263 <li>Aliceではプログラマが記述する部分を <em>Computation</em>、Aliceが提供するComputationを支える部分を <em>Meta Computation</em> として分けて捉えている。</li>
264 <li>分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。</li>
265 </ul>
266
267
268
269 </section>
270 </div></div>
271
272 <div class="slide" id="14"><div>
273 <section>
274 <header>
275 <h1 id="alicemeta-computation22">AliceのMeta Computation(2/2)</h1>
276 </header>
277 <!-- _S9SLIDE_ -->
278
279 <ul>
280 <li>AliceのComputation
281 <ul>
282 <li>keyによりData Segmentを待ち合わせてCode Segmentを実行する</li>
283 </ul>
284 </li>
285 <li>AliceのMeta Computation
286 <ul>
287 <li>Javaで記述したAliceの実装システム</li>
288 </ul>
289 </li>
290 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li>
291 <li>Meta Computation も CS と DS により表現される。</li>
292 </ul>
293
294
295
296 </section>
297 </div></div>
298
299 <div class="slide" id="15"><div>
300 <section>
301 <header>
302 <h1 id="alicevnc">AliceVNC</h1>
303 </header>
304 <!-- _S9SLIDE_ -->
305
306 <ul>
307 <li>研究室では授業向け画面共有システムTreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う
308 <img src="./images/treeVNC.svg" alt="opt" /></li>
309 </ul>
310
311
312
313 </section>
314 </div></div>
315
316 <div class="slide" id="16"><div>
317 <section>
318 <header>
319 <h1 id="alice-">Alice の新機能</h1>
320 </header>
321 <!-- _S9SLIDE_ -->
322
323 <ul>
324 <li>Alice が実用的なアプリケーションを記述する能力をもつことを確認するため、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。</li>
325 <li>AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br />
326 <ul>
327 <li>転送機能 … Input DS を Output DS として転送する</li>
328 <li>圧縮機能 … DS Manager の指定によってDSの表現を切り替える</li>
329 </ul>
330 </li>
331 </ul>
332
333
334
335 </section>
336 </div></div>
337
338 <div class="slide" id="17"><div>
339 <section>
340 <header>
341 <h1 id="section-3">転送機能</h1>
342 </header>
343 <!-- _S9SLIDE_ -->
344
345 <ul>
346 <li>通常、Input DSに変更を加えOutput DSとして出力する場合DSのコピーが行われる。</li>
347 <li>AliceVNCのようにInput DS をそのまま子ノードに Output DS として出力する場合、コピーを行なうのは無駄。</li>
348 <li>Input DSをコピーせずそのままOutput DSに渡すMeta Computationとして転送機能を実装した。</li>
349 </ul>
350
351
352
353 </section>
354 </div></div>
355
356 <div class="slide" id="18"><div>
357 <section>
358 <header>
359 <h1 lang="java" id="section-4">転送機能</h1>
360 </header>
361 <!-- _S9SLIDE_ -->
362
363 <pre><code> public void flip(Receiver receiver) {
364 DataSegment.getLocal().put(receiver.key, receiver.getReceiveData(), null);
365 }
366 </code></pre>
367
368
369
370 </section>
371 </div></div>
372
373 <div class="slide" id="19"><div>
374 <section>
375 <header>
376 <h1 id="section-5">圧縮機能</h1>
377 </header>
378 <!-- _S9SLIDE_ -->
379
380 <ul>
381 <li>AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。</li>
382 <li>ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。</li>
383 <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。</li>
384 </ul>
385
386
387
388 </section>
389 </div></div>
390
391 <div class="slide" id="20"><div>
392 <section>
393 <header>
394 <h1 id="data-segment">圧縮機能 - Data Segmentの表現の変更</h1>
395 </header>
396 <!-- _S9SLIDE_ -->
397
398 <p>1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。
399 1. 一般的な Java のクラスオブジェクト
400 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト
401 3. 2 を圧縮したバイナリオブジェクト</p>
402
403
404
405 </section>
406 </div></div>
407
408 <div class="slide" id="21"><div>
409 <section>
410 <header>
411 <h1 lang="java" id="data-segment-1">圧縮機能 - Data Segmentの表現の変更</h1>
412 </header>
413 <!-- _S9SLIDE_ -->
414
415 <pre><code> public class ReceiveData {
416 private Object val = null;
417 private byte[] messagePack = null;
418 private byte[] zMessagePack = null;
419 }
420 </code></pre>
421
422
423
424 </section>
425 </div></div>
426
427 <div class="slide" id="22"><div>
428 <section>
429 <header>
430 <h1 id="dsm">圧縮機能 - DSMの追加</h1>
431 </header>
432 <!-- _S9SLIDE_ -->
433
434 <ul>
435 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。</li>
436 <li>Compressed DSM にputする場合
437 <ul>
438 <li>DS が圧縮表現を持っていればそれをputする</li>
439 <li>持っていなければその時点で圧縮表現を作ってputする</li>
440 </ul>
441 </li>
442 </ul>
443
444
445
446 </section>
447 </div></div>
448
449 <div class="slide" id="23"><div>
450 <section>
451 <header>
452 <h1 id="ds">圧縮機能 - 任意の表現でDSを取得</h1>
453 </header>
454 <!-- _S9SLIDE_ -->
455
456 <ul lang="java">
457 <li>ReceiveData内にあるDSのcastメソッドであるasClass()を用いる</li>
458 </ul>
459 <pre><code> public &lt;T&gt; T asClass(Class&lt;T&gt; clazz) {
460 if (val != null) { return (T) val; }
461
462 if (zMessagePack != null &amp;&amp; messagePack == null) {
463 messagePack = unzip(zMessagePack, dataSize);
464 }
465
466 return packer.read(messagePack, clazz);
467 }
468 </code></pre>
469
470
471
472 </section>
473 </div></div>
474
475 <div class="slide" id="24"><div>
476 <section>
477 <header>
478 <h1 id="api">圧縮機能 - API設計</h1>
479 </header>
480 <!-- _S9SLIDE_ -->
481
482 <p>通常のデータを扱う場合<br />
483 * put(String managerKey, String key, Object val)<br />
484 * take(String managerKey, String key)</p>
485
486 <p>圧縮表現のデータを扱う場合<br />
487 * put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br />
488 * take(String <strong>“compressed”</strong> + managerKey, String key)</p>
489
490
491
492 </section>
493 </div></div>
494
495 <div class="slide" id="25"><div>
496 <section>
497 <header>
498 <h1 id="section-6">圧縮機能 - 通信プロトコルの変更</h1>
499 </header>
500 <!-- _S9SLIDE_ -->
501
502 <ul>
503 <li>Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。</li>
504 <li>圧縮した byteArray の追加により、Remote から put された byteArray が圧縮されているのか判断する必要がある。</li>
505 </ul>
506
507
508
509 </section>
510 </div></div>
511
512 <div class="slide" id="26"><div>
513 <section>
514 <header>
515 <h1 id="section-7">圧縮機能 - 通信プロトコルの変更</h1>
516 </header>
517 <!-- _S9SLIDE_ -->
518
519 <ul>
520 <li>Alice の通信におけるヘッダにあたる CommandMessage.classに <strong>シリアライズ状態表すフラグ</strong>と、<strong>圧縮状態を表すフラク</strong> を追加</li>
521 <li>これにより put された DSM はフラグに応じた適切な形式で格納できる。</li>
522 </ul>
523
524
525
526 </section>
527 </div></div>
528
529 <div class="slide" id="27"><div>
530 <section>
531 <header>
532 <h1 id="section-8">圧縮機能 - 通信プロトコルの変更</h1>
533 </header>
534 <!-- _S9SLIDE_ -->
535
536
537 <pre lang="java"><code> public class CommandMessage {
538 public int type;
539 public int seq;
540 public String key;
541 public boolean quickFlag = false;
542 public boolean serialized = false;
543 public boolean compressed = false;
544 public int dataSize = 0;
545 }
546 </code></pre>
547 <p></p>
548
549
550
551 </section>
552 </div></div>
553
554 <div class="slide" id="28"><div>
555 <section>
556 <header>
557 <h1 id="section-9">圧縮機能 - 通信プロトコルの変更</h1>
558 </header>
559 <!-- _S9SLIDE_ -->
560
561 <table style="border-collapse: collapse;border:1px solid #000000;">
562 <tr>
563 <td style="border:1px solid #000000;"> type</td>
564 <td style="border:1px solid #000000;">CommandType PEEK, PUT などを表す</td>
565 </tr>
566 <tr>
567 <td style="border:1px solid #000000;"> seq </td>
568 <td style="border:1px solid #000000;">DS の待ち合わせを行っている CS を表す unique number</td>
569 </tr>
570 <tr>
571 <td style="border:1px solid #000000;"> key </td>
572 <td style="border:1px solid #000000;">どの Key に対して操作を行うか指定する</td>
573 </tr>
574 <tr>
575 <td style="border:1px solid #000000;"> quickFlag </td>
576 <td style="border:1px solid #000000;">SEDA を挟まず Command を処理を行うかを示す</td>
577 </tr>
578 <tr>
579 <td style="border:1px solid #000000;"> serialized </td> 396 <td style="border:1px solid #000000;"> serialized </td>
580 <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td> 397 <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td>
581 </tr> 398
582 <tr> 399 <tr>
583 <td style="border:1px solid #000000;"> compressed </td> 400 <td style="border:1px solid #000000;"> compressed </td>
584 <td style="border:1px solid #000000;">データ本体の圧縮状態を示す</td> 401 <td style="border:1px solid #000000;">データ本体の圧縮状態を示す</td>
585 </tr> 402 </tr>
586 <tr> 403 <tr>
404 <td style="border:1px solid #000000;"> objectDataSize </td>
405 <td style="border:1px solid #000000;">圧縮前のオブジェクトのデータサイズを表す</td>
406 </tr>
407 <tr>
587 <td style="border:1px solid #000000;"> dataSize </td> 408 <td style="border:1px solid #000000;"> dataSize </td>
588 <td style="border:1px solid #000000;">圧縮前のデータサイズを表す</td> 409 <td style="border:1px solid #000000;">送信するDSのデータサイズを表す</td>
589 </tr> 410 </tr>
590 </table> 411 </table>
591 412
592 413
593 414
594 </section> 415 </section>
595 </div></div> 416 </div></div>
596 417
597 <div class="slide" id="29"><div> 418 <div class="slide" id="21"><div>
598 <section> 419 <section>
599 <header> 420 <header>
600 <h1 id="section-10">圧縮機能の評価</h1> 421 <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1>
601 </header> 422 </header>
602 <!-- _S9SLIDE_ --> 423 <!-- _S9SLIDE_ -->
603 424
604 <p>RingRelayTest<br /> 425 <ul>
605 <img src="./images/topologyring.svg" alt="opt" /></p> 426 <li>
606 427 <p>ネットワークに依存しない通信が可能</p>
607 428 </li>
608 429 <li>
609 </section> 430 <p>Topologyは自分で管理</p>
610 </div></div> 431 </li>
611 432 </ul>
612 <div class="slide" id="30"><div> 433
613 <section> 434
614 <header> 435
615 <h1 id="section-11">まとめ</h1> 436 </section>
616 </header> 437 </div></div>
617 <!-- _S9SLIDE_ --> 438
618 439 <div class="slide" id="22"><div>
619 <ul> 440 <section>
620 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。</li> 441 <header>
442 <h1 id="alice1---linda">Aliceと他言語等との比較(1) - Linda</h1>
443 </header>
444 <!-- _S9SLIDE_ -->
445
446 <ul>
447 <li>keyでタプルというデータの集合を管理している</li>
448 <li>
449 <p>in/outでAliceのput/takeに対応する操作を行う</p>
450 </li>
451 <li>タスクはinで単一のタプルを待つ</li>
452 <li>MetaComputationがない</li>
453 </ul>
454
455
456
457 </section>
458 </div></div>
459
460 <div class="slide" id="23"><div>
461 <section>
462 <header>
463 <h1 id="alice1---corba">Aliceと他言語等との比較(1) - Corba</h1>
464 </header>
465 <!-- _S9SLIDE_ -->
466
467 <ul>
468 <li>
469 <p>オブジェクト間のRPC</p>
470 </li>
471 <li>DSがない。keyという概念がない。</li>
472 <li>データの待ち合わせがない</li>
473 </ul>
474
475
476
477 </section>
478 </div></div>
479
480 <div class="slide" id="24"><div>
481 <section>
482 <header>
483 <h1 id="alice1---http">Aliceと他言語等との比較(1) - HTTP</h1>
484 </header>
485 <!-- _S9SLIDE_ -->
486
487 <ul>
488 <li>get/putで通信を行う</li>
489 <li>
490 <p>URLがデータベースのkeyとなる</p>
491 </li>
492 <li>MIME形式で送信。複数の表現を持つMeta Computationがない。 </li>
493 <li>セッション管理はクライアント自身がやる </li>
494 <li>並列処理できない </li>
495 <li>get/putをRPC的に扱わない</li>
496 </ul>
497
498
499
500 </section>
501 </div></div>
502
503 <div class="slide" id="25"><div>
504 <section>
505 <header>
506 <h1 id="treevncalicetreevnc">TreeVNCとAliceを用いたTreeVNCの比較</h1>
507 </header>
508 <!-- _S9SLIDE_ -->
509
510 <ul>
511 <li>
512 <p>TreeVNC<br />
513 通信プロトコルを定義や圧縮を自前で行う<br />
514 通信スレッドを複数作成<br />
515 様々な部分で通信APIを呼び出す </p>
516 </li>
517 <li>
518 <p>Aliceを用いたTreeVNC<br />
519 Aliceと接続する最小限の変更<br />
520 木の構成部分や圧縮形式での通信はMeta Computation </p>
521 </li>
522 </ul>
523
524
525
526 </section>
527 </div></div>
528
529 <div class="slide" id="26"><div>
530 <section>
531 <header>
532 <h1 id="treevncalicetreevnc-1">TreeVNCとAliceを用いたTreeVNCの比較</h1>
533 </header>
534 <!-- _S9SLIDE_ -->
535
536 <ul>
537 <li>TightVNCからのコードの増加量</li>
538 <li>Aliceを用いれば通常の TreeVNC の 20% の行数で記述できる。</li>
539 </ul>
540
541 <table style="border-collapse: collapse;border:1px solid #000000;">
542 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
543 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
544 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
545 <tr>
546 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
547 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">5049</td>
548 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14191</td>
549 </tr>
550 <tr>
551 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> Aliceを用いたTreeVNC </td>
552 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">989</td>
553 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">2355</td>
554 </tr>
555 </table>
556
557
558
559 </section>
560 </div></div>
561
562 <div class="slide" id="27"><div>
563 <section>
564 <header>
565 <h1 id="section-3">まとめ</h1>
566 </header>
567 <!-- _S9SLIDE_ -->
568
569 <ul>
570 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表現を変える機能を実装した。</li>
621 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li> 571 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li>
622 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li> 572 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li>
623 <li>今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。</li> 573 <li>今後の課題としては、圧縮機能を TreeVNC で用 いることで有効性を測る必要がある。</li>
624 </ul> 574 </ul>
625 <!-- === end markdown block === --> 575 <!-- === end markdown block === -->
626 576
627 </section> 577 </section>
628 </div></div> 578 </div></div>