Mercurial > hg > Papers > 2018 > nozomi-master
comparison presen/sample.html @ 179:a3ee75a897f3
cut slide
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Feb 2018 13:46:47 +0900 |
parents | 074eb76a9184 |
children | 5a0a11b54ab4 |
comparison
equal
deleted
inserted
replaced
178:074eb76a9184 | 179:a3ee75a897f3 |
---|---|
85 | 85 |
86 <div class='slide '> | 86 <div class='slide '> |
87 <!-- === begin markdown block === | 87 <!-- === begin markdown block === |
88 | 88 |
89 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] | 89 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] |
90 on 2018-02-06 12:15:41 +0900 with Markdown engine kramdown (1.5.0) | 90 on 2018-02-06 13:46:35 +0900 with Markdown engine kramdown (1.5.0) |
91 using options {} | 91 using options {} |
92 --> | 92 --> |
93 | 93 |
94 <!-- _S9SLIDE_ --> | 94 <!-- _S9SLIDE_ --> |
95 <h1 id="section">研究目的(1/2)</h1> | 95 <h1 id="section">研究目的(1/2)</h1> |
96 <ul> | 96 <ul> |
97 <li>スケーラブルで信頼性の高い分散プログラムを書くのは容易ではない | 97 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する</li> |
98 <ul> | 98 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す |
99 <li>並列で動く分散した資源を意識するのは難しい</li> | |
100 <li>分散したノードの選択方法が明確ではない </li> | |
101 </ul> | |
102 </li> | |
103 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> | |
104 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。 | |
105 <ul> | 99 <ul> |
106 <li>仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む</li> | 100 <li>仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む</li> |
107 </ul> | 101 </ul> |
108 </li> | 102 </li> |
109 <li>スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力</li> | 103 <li>スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力</li> |
124 </div> | 118 </div> |
125 <div class='slide '> | 119 <div class='slide '> |
126 <!-- _S9SLIDE_ --> | 120 <!-- _S9SLIDE_ --> |
127 <h1 id="section-2">目次</h1> | 121 <h1 id="section-2">目次</h1> |
128 <ul> | 122 <ul> |
129 <li>Aliceの概要 | 123 <li>Aliceの概要</li> |
130 <ul> | 124 <li>AliceのNAT越え</li> |
131 <li>Code Segment / Data Segment</li> | 125 <li>Aliceの問題点</li> |
132 <li>Data Segment Manager</li> | 126 <li>Christieの設計</li> |
133 <li>API</li> | 127 <li>他フレームワークとの比較</li> |
134 <li>Computation / Meta Computation</li> | |
135 <li>Topology Manager</li> | |
136 <li>圧縮</li> | |
137 </ul> | |
138 </li> | |
139 <li>Topology Managerの拡張設計 | |
140 <ul> | |
141 <li>別トポロジー間の接続のための設計</li> | |
142 <li>別ネットワーク間の接続のための設計</li> | |
143 </ul> | |
144 </li> | |
145 <li>Aliceの問題点 | |
146 <ul> | |
147 <li>LocalDSMの複数立ち上げができない</li> | |
148 <li>記述の煩雑さ</li> | |
149 </ul> | |
150 </li> | |
151 <li>Christieの設計 | |
152 <ul> | |
153 <li>基本設計</li> | |
154 <li>記述性の改善</li> | |
155 </ul> | |
156 </li> | |
157 <li>他フレームワークとの比較 | |
158 <ul> | |
159 <li>Akka, Hazelcast</li> | |
160 <li>設計思想の違い</li> | |
161 <li>記述性の違い</li> | |
162 <li>提供する機能 </li> | |
163 </ul> | |
164 </li> | |
165 <li>まとめ</li> | 128 <li>まとめ</li> |
166 <li>今後の課題</li> | 129 <li>今後の課題</li> |
167 </ul> | 130 </ul> |
168 | 131 |
169 | 132 |
230 <!-- _S9SLIDE_ --> | 193 <!-- _S9SLIDE_ --> |
231 <h1 id="data-segment-api">Data Segment API</h1> | 194 <h1 id="data-segment-api">Data Segment API</h1> |
232 <ul> | 195 <ul> |
233 <li>DSの取得 | 196 <li>DSの取得 |
234 <ul> | 197 <ul> |
235 <li><code>void take(String managerKey, String key)</code> </li> | 198 <li>take/peek </li> |
236 <li><code>void peek(String managerKey, String key)</code> </li> | |
237 </ul> | 199 </ul> |
238 </li> | 200 </li> |
239 <li>DSの追加 | 201 <li>DSの追加 |
240 <ul> | 202 <ul> |
241 <li><code>void put(String managerKey, String key, Object val)</code> </li> | 203 <li>put/update</li> |
242 <li><code>void update(String managerKey, String key, Object val)</code> </li> | 204 </ul> |
243 <li><code>void flip(String managerKey, String key, Receiver val)</code> </li> | 205 </li> |
206 <li>DSの転送 | |
207 <ul> | |
208 <li>flip</li> | |
244 </ul> | 209 </ul> |
245 </li> | 210 </li> |
246 </ul> | 211 </ul> |
247 | 212 |
248 | 213 |
320 <ul> | 285 <ul> |
321 <li>各ノード側でTopology Managerとの通信を行うMeta Computation</li> | 286 <li>各ノード側でTopology Managerとの通信を行うMeta Computation</li> |
322 <li>ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う </li> | 287 <li>ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う </li> |
323 </ul> | 288 </ul> |
324 </li> | 289 </li> |
325 <li>Topology Manager/NodeもCS/DSを用いて実装されている。</li> | 290 </ul> |
326 </ul> | 291 |
327 | 292 |
328 | 293 </div> |
329 </div> | 294 <div class='slide '> |
330 <div class='slide '> | 295 <!-- _S9SLIDE_ --> |
331 <!-- _S9SLIDE_ --> | 296 <h1 id="alicemeta-computation---topology-managertopology-node-1">AliceのMeta Computation - Topology Manager/Topology Node</h1> |
332 <h1 id="alicemeta-computation---static-topology-manager">AliceのMeta Computation - Static Topology Manager</h1> | 297 <ul> |
333 <ul> | 298 <li>Topology Managerを立ち上げる</li> |
334 <li>プログラマがdot形式のトポロジーファイルを用意し、Topology Managerに読み込ませる</li> | |
335 <li>トポロジーファイルにはノードの接続関係と接続する際に指定するRemote DSM名を記す</li> | |
336 <li>Graphvizを用いればトポロジーを描くだけでトポロジーファイルが自動出力されるため構成が容易</li> | |
337 </ul> | |
338 | |
339 <pre lang="dot"><code>digraph test{ | |
340 node0 −> node1[label=”right”] | |
341 node0 −> node2[label=”left”] | |
342 node1 −> node2[label=”right”] | |
343 node1 −> node0[label=”left”] | |
344 node2 −> node0[label=”right”] | |
345 node2 −> node1[label=”left”] | |
346 } | |
347 </code></pre> | |
348 | |
349 | |
350 </div> | |
351 <div class='slide '> | |
352 <!-- _S9SLIDE_ --> | |
353 <h1 id="alicemeta-computation---static-topology-manager-1">AliceのMeta Computation - Static Topology Manager</h1> | |
354 <ul> | |
355 <li>ファイルを読み込んだTopology Managerを立ち上げる</li> | |
356 <li>各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> | 299 <li>各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> |
357 <img src="./pictures/tree1.svg" alt="opt" width="60%" /></li> | 300 <img src="./pictures/tree1.svg" alt="opt" width="60%" /></li> |
358 </ul> | 301 </ul> |
359 | 302 |
360 | 303 |
361 </div> | 304 </div> |
362 <div class='slide '> | 305 <div class='slide '> |
363 <!-- _S9SLIDE_ --> | 306 <!-- _S9SLIDE_ --> |
364 <h1 id="alicemeta-computation---static-topology-manager-2">AliceのMeta Computation - Static Topology Manager</h1> | 307 <h1 id="alicemeta-computation---topology-managertopology-node-2">AliceのMeta Computation - Topology Manager/Topology Node</h1> |
365 <ul> | 308 <ul> |
366 <li>参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る | 309 <li>参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る |
367 <img src="./pictures/tree2.svg" alt="opt" width="60%" /></li> | 310 <img src="./pictures/tree2.svg" alt="opt" width="60%" /></li> |
368 </ul> | 311 </ul> |
369 | 312 |
370 | 313 |
371 </div> | 314 </div> |
372 <div class='slide '> | 315 <div class='slide '> |
373 <!-- _S9SLIDE_ --> | 316 <!-- _S9SLIDE_ --> |
374 <h1 id="alicemeta-computation---static-topology-manager-3">AliceのMeta Computation - Static Topology Manager</h1> | 317 <h1 id="alicemeta-computation---topology-managertopology-node-3">AliceのMeta Computation - Topology Manager/Topology Node</h1> |
375 <ul> | 318 <ul> |
376 <li>Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる </li> | 319 <li>Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる </li> |
377 <li>Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う | 320 <li>Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う |
378 <img src="./pictures/tree3.svg" alt="opt" width="60%" /></li> | 321 <img src="./pictures/tree3.svg" alt="opt" width="60%" /></li> |
379 </ul> | |
380 | |
381 | |
382 </div> | |
383 <div class='slide '> | |
384 <!-- _S9SLIDE_ --> | |
385 <h1 id="alicemeta-computation---dynamic-topology-manager">AliceのMeta Computation - Dynamic Topology Manager</h1> | |
386 <ul> | |
387 <li>参加するノード数があらかじめ決まっているとは限らない</li> | |
388 <li>Dynamic Topology Managerがノードを参加表明順にトポロジーに組み込む</li> | |
389 <li>現在はTree Topologyに対応</li> | |
390 </ul> | 322 </ul> |
391 | 323 |
392 | 324 |
393 </div> | 325 </div> |
394 <div class='slide '> | 326 <div class='slide '> |
414 | 346 |
415 | 347 |
416 </div> | 348 </div> |
417 <div class='slide '> | 349 <div class='slide '> |
418 <!-- _S9SLIDE_ --> | 350 <!-- _S9SLIDE_ --> |
419 <h1 id="alicemeta-computation----2">Aliceに求められるMeta Computation - アプリケーションの接続</h1> | 351 <h1 id="alicenat">AliceのNATを越え</h1> |
420 <ul> | |
421 <li>別のトポロジーをもった既存のアプリケーション同士をコードの変更を抑えつつ接続させたい</li> | |
422 <li>AliceVNC | |
423 <ul> | |
424 <li>Alice上に実装したツリートポロジーの画面配信システム</li> | |
425 </ul> | |
426 </li> | |
427 <li>AliceChat | |
428 <ul> | |
429 <li>Alice上に実装したスタートポロジーのチャット</li> | |
430 </ul> | |
431 </li> | |
432 <li>連携することで実現したい機能 | |
433 <ul> | |
434 <li>VNC画面のスナップショットをチャットに載せる</li> | |
435 <li>チャットの内容をVNC画面にコメントとして流す</li> | |
436 </ul> | |
437 </li> | |
438 </ul> | |
439 | |
440 | |
441 </div> | |
442 <div class='slide '> | |
443 <!-- _S9SLIDE_ --> | |
444 <h1 id="alicemeta-computation----3">Aliceに求められるMeta Computation - アプリケーションの接続</h1> | |
445 <ul> | |
446 <li>それぞれのアプリケーションのトポロジーを構成するTopologyManagerを連携させることで可能 | |
447 <img src="./pictures/vncandchat.svg" alt="opt" width="70%" /></li> | |
448 </ul> | |
449 | |
450 | |
451 </div> | |
452 <div class='slide '> | |
453 <!-- _S9SLIDE_ --> | |
454 <h1 id="alicemeta-computation---nat">Aliceに求められるMeta Computation - NATを越えた接続</h1> | |
455 <ul> | 352 <ul> |
456 <li>NATを越えたノード間通信は分散処理の課題である</li> | 353 <li>NATを越えたノード間通信は分散処理の課題である</li> |
457 <li>Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでトポロジーの拡張が可能</li> | 354 <li>Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能</li> |
458 </ul> | 355 </ul> |
459 | 356 |
460 | 357 |
461 </div> | 358 </div> |
462 <div class='slide '> | 359 <div class='slide '> |
463 <!-- _S9SLIDE_ --> | 360 <!-- _S9SLIDE_ --> |
464 <h1 id="alicemeta-computation---nat-1">Aliceに求められるMeta Computation - NATを越えた接続</h1> | 361 <h1 id="alicenat-1">AliceのNATを越え接続</h1> |
465 <ul> | 362 <ul> |
466 <li>各プライベートネットワーク内を管理するPrivate Topology Manager</li> | 363 <li>各プライベートネットワーク内を管理するPrivate Topology Manager</li> |
467 <li>グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる</li> | 364 <li>グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる</li> |
468 <li>TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続<br /> | 365 <li>TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続<br /> |
469 <img src="./pictures/overNAT.svg" alt="opt" width="70%" /></li> | 366 <img src="./pictures/overNAT.svg" alt="opt" width="70%" /></li> |
499 <!-- _S9SLIDE_ --> | 396 <!-- _S9SLIDE_ --> |
500 <h1 id="alice---localdsm">Aliceの問題点 - LocalDSMを複数立ち上げられない</h1> | 397 <h1 id="alice---localdsm">Aliceの問題点 - LocalDSMを複数立ち上げられない</h1> |
501 <ul> | 398 <ul> |
502 <li>AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない</li> | 399 <li>AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない</li> |
503 <li>このstaticを抜くにはAliceのコード全体を大きく変更しなければならない</li> | 400 <li>このstaticを抜くにはAliceのコード全体を大きく変更しなければならない</li> |
504 <li>アプリケーション接続やNAT越えのMeta Computationの追加が困難</li> | 401 <li>現状ではNAT越えのMeta Computationの追加が困難</li> |
505 <li>複数インスタンスを立ち上げての分散プログラムのテストが書けない</li> | 402 <li>複数インスタンスを立ち上げての分散プログラムのテストが書けない</li> |
403 <li>再設計の必要がある</li> | |
506 </ul> | 404 </ul> |
507 | 405 |
508 | 406 |
509 </div> | 407 </div> |
510 <div class='slide '> | 408 <div class='slide '> |
511 <!-- _S9SLIDE_ --> | 409 <!-- _S9SLIDE_ --> |
512 <h1 id="alice---api">Aliceの問題点 - APIシンタックスの分離</h1> | 410 <h1 id="alice---api">Aliceの問題点 - APIシンタックスの分離</h1> |
513 <ul> | 411 <ul> |
514 <li>setKeyは記述場所が決まっておらず、CSの外からも呼べる | 412 <li>setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる |
515 <ul> | 413 <ul> |
516 <li>CSの再利用を可能にするが、どのkeyを待っているのか不明なCSが生まれてしまう</li> | 414 <li>どのkeyを待っているのか不明なCSが生まれてしまう</li> |
517 </ul> | 415 </ul> |
518 </li> | 416 </li> |
519 <li>setKeyではkeyを動的に指定することができる | 417 <li>setKeyではkeyを動的に指定することができる |
520 <ul> | 418 <ul> |
521 <li>どんな処理を行っているかわかりづらい</li> | 419 <li>どんな処理を行っているかわかりづらい</li> |
567 <!-- _S9SLIDE_ --> | 465 <!-- _S9SLIDE_ --> |
568 <h1 id="alice---">Aliceの問題点 - 型が推測できない</h1> | 466 <h1 id="alice---">Aliceの問題点 - 型が推測できない</h1> |
569 <ul> | 467 <ul> |
570 <li>Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない</li> | 468 <li>Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない</li> |
571 <li>しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある</li> | 469 <li>しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある</li> |
572 <li>型をDSをputした箇所までコードをたどる必要がある | 470 <li>型をDSをputした箇所までコードをたどる必要がある</li> |
573 <ul> | |
574 <li>flipでの転送もあるため、それを発見するのは容易ではない</li> | |
575 </ul> | |
576 </li> | |
577 </ul> | 471 </ul> |
578 | 472 |
579 | 473 |
580 </div> | 474 </div> |
581 <div class='slide '> | 475 <div class='slide '> |
584 <ul> | 478 <ul> |
585 <li>以下の問題がAliceの信頼性・拡張性を下げている | 479 <li>以下の問題がAliceの信頼性・拡張性を下げている |
586 <ul> | 480 <ul> |
587 <li>Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難</li> | 481 <li>Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難</li> |
588 <li>インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい</li> | 482 <li>インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい</li> |
589 <li>setKyeの記述順序や型を気にしてプログラミングをしなくてはならない</li> | 483 <li>setKeyの記述順序や型を気にしてプログラミングをしなくてはならない</li> |
590 </ul> | 484 </ul> |
591 </li> | 485 </li> |
592 </ul> | 486 </ul> |
593 | 487 |
594 | 488 |
608 | 502 |
609 | 503 |
610 </div> | 504 </div> |
611 <div class='slide '> | 505 <div class='slide '> |
612 <!-- _S9SLIDE_ --> | 506 <!-- _S9SLIDE_ --> |
613 <h1 id="christie---">Christie - 基本設計</h1> | 507 <h1 id="christie---1">Christie - 基本設計(1)</h1> |
614 <ul> | 508 <ul> |
615 <li>Javaで実装される</li> | 509 <li>Javaで実装される</li> |
510 <li>CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である</li> | |
616 <li>将来的に当研究室で開発しているGearsOSに統合したい | 511 <li>将来的に当研究室で開発しているGearsOSに統合したい |
617 <ul> | 512 <ul> |
618 <li>GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる</li> | 513 <li>GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる</li> |
619 </ul> | 514 </ul> |
620 </li> | 515 </li> |
621 <li>CG/DGの依存関係や、DG Manager(DGM)の構造、Remote DGMへの接続方法はAliceと同様である</li> | 516 </ul> |
622 </ul> | 517 |
623 | 518 |
624 | 519 </div> |
625 </div> | 520 <div class='slide '> |
626 <div class='slide '> | 521 <!-- _S9SLIDE_ --> |
627 <!-- _S9SLIDE_ --> | 522 <h1 id="christie---2">Christie - 基本設計(2)</h1> |
628 <h1 id="christie----1">Christie - 基本設計</h1> | 523 <ul> |
629 <ul> | 524 <li>Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理</li> |
630 <li>DGMはLocalもRemoteも全てCode Gear Manager(CGM)が管理する</li> | |
631 <li>1つのCGMは1つのLocalDGMを持つ</li> | 525 <li>1つのCGMは1つのLocalDGMを持つ</li> |
632 <li>CGM同士はThreadPoolとCGMのリストを共有している | 526 <li>CGM同士はThreadPoolとCGMのリストを共有している |
633 <ul> | 527 <ul> |
634 <li>メタ計算で全てのCGMにアクセス可能 | 528 <li>メタ計算で全てのCGMにアクセス可能 |
635 <img src="./pictures/ChristieClass.svg" alt="opt" width="60%" /></li> | 529 <img src="./pictures/ChristieClass.svg" alt="opt" width="60%" /></li> |
639 | 533 |
640 | 534 |
641 </div> | 535 </div> |
642 <div class='slide '> | 536 <div class='slide '> |
643 <!-- _S9SLIDE_ --> | 537 <!-- _S9SLIDE_ --> |
644 <h1 id="christie----2">Christie - 基本設計</h1> | 538 <h1 id="christie----2-dgm">Christie - 基本設計(2) DGMの複数立ち上げ</h1> |
539 <ul> | |
540 <li>ChristieではCGMを2つ生成すればLocalDGMも2つ作られる | |
541 <ul> | |
542 <li>NAT越えなどの機能拡張に対応可能</li> | |
543 </ul> | |
544 </li> | |
545 <li>複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする | |
546 <ul> | |
547 <li>分散プログラムのローカルでのテストが可能になる | |
548 <img src="./pictures/DGM.svg" alt="opt" width="50%" /></li> | |
549 </ul> | |
550 </li> | |
551 </ul> | |
552 | |
553 | |
554 </div> | |
555 <div class='slide '> | |
556 <!-- _S9SLIDE_ --> | |
557 <h1 id="christie---3">Christie - 基本設計(3)</h1> | |
645 <ul> | 558 <ul> |
646 <li>CG を記述する際は Alice同様CodeGear.classを継承</li> | 559 <li>CG を記述する際は Alice同様CodeGear.classを継承</li> |
647 <li>CGは <em>void run(CodeGearManager cgm)</em> を持ち、run メソッド内に処理を記述 | 560 <li>CGは <em>void run(CodeGearManager cgm)</em> を持ち、run メソッド内に処理を記述 |
648 <ul> | 561 <ul> |
562 <li>run内で新たなCGを作るためのAPIにはCGM経由で呼び出す</li> | |
649 <li>このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方</li> | 563 <li>このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方</li> |
650 </ul> | 564 </ul> |
651 </li> | 565 </li> |
652 <li>CGを作るためのAPIにはCGM経由で呼び出す</li> | 566 </ul> |
653 </ul> | 567 |
654 | 568 |
655 | 569 </div> |
656 </div> | 570 <div class='slide '> |
657 <div class='slide '> | 571 <!-- _S9SLIDE_ --> |
658 <!-- _S9SLIDE_ --> | 572 <h1 id="christie---">Christie - アノテーションを用いたインプット記述</h1> |
659 <h1 id="christie---dgm">Christie - DGMの複数立ち上げ</h1> | |
660 <ul> | |
661 <li>ChristieではCGMを2つ生成すればLocalDGMも2つ作られる</li> | |
662 <li>複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする</li> | |
663 <li>分散プログラムのローカルでのテストが可能になる | |
664 <img src="./pictures/DGM.svg" alt="opt" width="50%" /></li> | |
665 </ul> | |
666 | |
667 | |
668 </div> | |
669 <div class='slide '> | |
670 <!-- _S9SLIDE_ --> | |
671 <h1 id="christie---cg">Christie - CGの生成方法</h1> | |
672 <ol> | |
673 <li>StartCodeGear.classを継承しCGMを生成する</li> | |
674 <li>CGをnewしたあと<em>setup</em>を用いる | |
675 <ul> | |
676 <li>newが終わらないとアノテーションから待ち合わせを行う処理ができないため</li> | |
677 <li>このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない</li> | |
678 </ul> | |
679 </li> | |
680 </ol> | |
681 | |
682 <pre lang="java"><code>public class StartTest extends StartCodeGear{//StartCG | |
683 | |
684 public StartTest(CodeGearManager cgm) { | |
685 super(cgm); | |
686 } | |
687 | |
688 public static void main(String args[]){ | |
689 StartTest start = new StartTest(createCGM(10000));//CGMを生成 | |
690 } | |
691 | |
692 @Override | |
693 protected void run(CodeGearManager cgm) { | |
694 cgm.setup(new TestCodeGear());//CGの待ち合わせを開始 | |
695 getLocalDGM().put("count", 1); | |
696 } | |
697 } | |
698 </code></pre> | |
699 | |
700 | |
701 </div> | |
702 <div class='slide '> | |
703 <!-- _S9SLIDE_ --> | |
704 <h1 id="christie----3">Christie - アノテーションを用いたインプット記述</h1> | |
705 <ul> | 573 <ul> |
706 <li>keyの指定にはJavaのアノテーションを用いる | 574 <li>keyの指定にはJavaのアノテーションを用いる |
707 <ul> | 575 <ul> |
708 <li>先頭を@で始める注釈</li> | 576 <li>先頭を@で始める注釈</li> |
709 <li>独自アノテーションを定義できる</li> | 577 <li>独自アノテーションを定義できる</li> |
714 | 582 |
715 | 583 |
716 </div> | 584 </div> |
717 <div class='slide '> | 585 <div class='slide '> |
718 <!-- _S9SLIDE_ --> | 586 <!-- _S9SLIDE_ --> |
719 <h1 id="christie----4">Christie - アノテーションを用いたインプット記述</h1> | 587 <h1 id="christie----1">Christie - アノテーションを用いたインプット記述</h1> |
720 <ul lang="java"> | 588 <ul lang="java"> |
721 <li>InputのためのDGを宣言し、その上にアノテーションでkeyを指定</li> | 589 <li>InputのためのDGを宣言し、その上にアノテーションでkeyを指定</li> |
722 <li>Takeの例</li> | 590 <li>Takeの例</li> |
723 </ul> | 591 </ul> |
724 <pre><code>@Take(”count”) | 592 <pre><code>@Take(”count”) |
733 | 601 |
734 | 602 |
735 </div> | 603 </div> |
736 <div class='slide '> | 604 <div class='slide '> |
737 <!-- _S9SLIDE_ --> | 605 <!-- _S9SLIDE_ --> |
738 <h1 id="christie----5">Christie - アノテーションを用いたインプット記述</h1> | 606 <h1 id="christie----2">Christie - アノテーションを用いたインプット記述</h1> |
739 <ul> | 607 <ul> |
740 <li>アノテーションは必ずフィールドに付けなければならない | 608 <li>アノテーションは必ずフィールドに付けなければならない |
741 <ul> | 609 <ul> |
742 <li>InputDGの生成とkeyの指定を一箇所に書ける</li> | 610 <li>InputDGの生成とkeyの指定を一箇所に書ける</li> |
743 </ul> | 611 </ul> |
751 | 619 |
752 | 620 |
753 </div> | 621 </div> |
754 <div class='slide '> | 622 <div class='slide '> |
755 <!-- _S9SLIDE_ --> | 623 <!-- _S9SLIDE_ --> |
756 <h1 id="christie----6">Christie - 型を指定しないデータ取り出し</h1> | 624 <h1 id="christie----3">Christie - 型を指定しないデータ取り出し</h1> |
757 <ul lang="java"> | 625 <ul lang="java"> |
758 <li>InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる</li> | 626 <li>InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる</li> |
759 <li>DataGearはJavaの総称型を用いて<>内に指定した型を受け取る</li> | 627 <li>DataGearはJavaの総称型を用いて<>内に指定した型を受け取る</li> |
760 </ul> | 628 </ul> |
761 <pre><code>@Take(”count”) | 629 <pre><code>@Take(”count”) |
764 | 632 |
765 | 633 |
766 </div> | 634 </div> |
767 <div class='slide '> | 635 <div class='slide '> |
768 <!-- _S9SLIDE_ --> | 636 <!-- _S9SLIDE_ --> |
769 <h1 id="christie----7">Christie - 型を指定しないデータ取り出し</h1> | 637 <h1 id="christie----4">Christie - 型を指定しないデータ取り出し</h1> |
770 <ul lang="java"> | 638 <ul lang="java"> |
771 <li>宣言された型は内部で保存され、ノード間通信でも保たれる</li> | 639 <li>宣言された型は内部で保存され、ノード間通信でも保たれる</li> |
772 <li>AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる</li> | 640 <li>AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる</li> |
773 </ul> | 641 </ul> |
774 <pre><code>public class GetData extends CodeGear{ @Take(”name”) | 642 <pre><code>public class GetData extends CodeGear{ @Take(”name”) |
786 | 654 |
787 | 655 |
788 </div> | 656 </div> |
789 <div class='slide '> | 657 <div class='slide '> |
790 <!-- _S9SLIDE_ --> | 658 <!-- _S9SLIDE_ --> |
791 <h1 id="christie----8">Christie - まとめ</h1> | 659 <h1 id="christie----5">Christie - まとめ</h1> |
792 <ul> | 660 <ul> |
793 <li>CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になった | 661 <li>CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった</li> |
794 <ul> | |
795 <li>テストや機能拡張がしやすくなった</li> | |
796 </ul> | |
797 </li> | |
798 <li>アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした</li> | 662 <li>アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした</li> |
799 <li>型の整合性を保証することで信頼性が向上した</li> | 663 <li>型の整合性を保証することで信頼性が向上した</li> |
800 </ul> | 664 </ul> |
801 | 665 |
802 | 666 |
803 </div> | 667 </div> |
804 <div class='slide '> | 668 <div class='slide '> |
805 <!-- _S9SLIDE_ --> | 669 <!-- _S9SLIDE_ --> |
806 <h1 id="christie-1">Christieと他フレームワークの比較</h1> | 670 <h1 id="christie-1">Christieと他フレームワークの比較</h1> |
807 <ul> | 671 <ul> |
808 <li>Christieの特徴を述べるために他の分散フレームワークとしてAkka、Hazelcastと比較を行う</li> | 672 <li>Akka、Hazelcastと比較してChristieの特徴を述べる |
673 <ul> | |
674 <li>Akka …Scala/Java向け分散フレームワーク</li> | |
675 <li>Hazelcast …Java向け分散フレームワーク</li> | |
676 </ul> | |
677 </li> | |
809 </ul> | 678 </ul> |
810 | 679 |
811 | 680 |
812 </div> | 681 </div> |
813 <div class='slide '> | 682 <div class='slide '> |
826 </li> | 695 </li> |
827 <li>アクターはメールボックスというキューを持つ | 696 <li>アクターはメールボックスというキューを持つ |
828 <ul> | 697 <ul> |
829 <li>受け取ったメッセージをパターンマッチで順次処理</li> | 698 <li>受け取ったメッセージをパターンマッチで順次処理</li> |
830 <li>パターンマッチにはScalaのcase classを用いられる | 699 <li>パターンマッチにはScalaのcase classを用いられる |
831 <img src="./pictures/Akka.svg" alt="opt" width="50%" /></li> | 700 <img src="./pictures/Akka.svg" alt="opt" width="70%" /></li> |
832 </ul> | 701 </ul> |
833 </li> | 702 </li> |
834 </ul> | 703 </ul> |
835 | 704 |
836 | 705 |
851 | 720 |
852 | 721 |
853 </div> | 722 </div> |
854 <div class='slide '> | 723 <div class='slide '> |
855 <!-- _S9SLIDE_ --> | 724 <!-- _S9SLIDE_ --> |
856 <h1 id="christie----9">Christieと他フレームワークの比較 - 設計思想</h1> | 725 <h1 id="christie----6">Christieと他フレームワークの比較 - 設計思想</h1> |
857 <ul> | 726 <ul> |
858 <li>AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している</li> | 727 <li>AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している</li> |
859 <li>Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい</li> | 728 <li>Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい</li> |
860 <li>通常計算とメタ計算に分けているため複雑さを下げている</li> | 729 <li>通常計算とメタ計算に分けているため複雑さを下げている</li> |
861 </ul> | 730 </ul> |
862 | 731 |
863 | 732 |
864 </div> | 733 </div> |
865 <div class='slide '> | 734 <div class='slide '> |
866 <!-- _S9SLIDE_ --> | 735 <!-- _S9SLIDE_ --> |
867 <h1 id="christie----10">Christieと他フレームワークの比較 - 記述性</h1> | 736 <h1 id="christie----7">Christieと他フレームワークの比較 - 記述性</h1> |
868 <ul> | 737 <ul> |
869 <li>アノテーションを使ったインプットの指定はAkkaやHazelcastにはない</li> | 738 <li>アノテーションを使ったインプットの指定はAkkaやHazelcastにはない</li> |
870 <li>複数のインプットを待ち合わせして処理を行いたい場合 | 739 <li>複数のインプットを待ち合わせして処理を行いたい場合 |
871 <ul> | 740 <ul> |
872 <li>Akkaは待ち合わせ処理をプログラマが書かなければならない</li> | 741 <li>Akkaは待ち合わせ処理をプログラマが書かなければならない</li> |
874 </ul> | 743 </ul> |
875 </li> | 744 </li> |
876 <li>データの圧縮通信を指定したい場合 | 745 <li>データの圧縮通信を指定したい場合 |
877 <ul> | 746 <ul> |
878 <li>Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する</li> | 747 <li>Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する</li> |
879 <li>ChristieではDGMkeyの名前を変えるだけなのでメソッド呼び出しの記述が必要ない</li> | 748 <li>ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能</li> |
880 </ul> | 749 </ul> |
881 </li> | 750 </li> |
882 </ul> | 751 </ul> |
883 | 752 |
884 | 753 |
889 <ul> | 758 <ul> |
890 <li>AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した</li> | 759 <li>AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した</li> |
891 <li>Aliceの問題点を整理し、再設計の必要性を述べた</li> | 760 <li>Aliceの問題点を整理し、再設計の必要性を述べた</li> |
892 <li>LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた</li> | 761 <li>LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた</li> |
893 <li>Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した</li> | 762 <li>Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した</li> |
894 <li>Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを述べた</li> | 763 <li>Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した</li> |
895 </ul> | 764 </ul> |
896 | 765 |
897 | 766 |
898 </div> | 767 </div> |
899 <div class='slide '> | 768 <div class='slide '> |
905 <li>実用性の検証</li> | 774 <li>実用性の検証</li> |
906 <li>Jungleとの統合</li> | 775 <li>Jungleとの統合</li> |
907 <li>GearsOSへの移行</li> | 776 <li>GearsOSへの移行</li> |
908 </ul> | 777 </ul> |
909 | 778 |
779 | |
780 </div> | |
781 <div class='slide '> | |
782 <!-- _S9SLIDE_ --> | |
783 <h1 id="christie---cg">Christie - CGの生成方法</h1> | |
784 <ol> | |
785 <li>StartCodeGear.classを継承しCGMを生成する</li> | |
786 <li>CGをnewしたあと<em>setup</em>を用いる | |
787 <ul> | |
788 <li>newが終わらないとアノテーションから待ち合わせを行う処理ができないため</li> | |
789 <li>このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない</li> | |
790 </ul> | |
791 </li> | |
792 </ol> | |
793 | |
794 <pre lang="java"><code>public class StartTest extends StartCodeGear{//StartCG | |
795 | |
796 public StartTest(CodeGearManager cgm) { | |
797 super(cgm); | |
798 } | |
799 | |
800 public static void main(String args[]){ | |
801 StartTest start = new StartTest(createCGM(10000));//CGMを生成 | |
802 } | |
803 | |
804 @Override | |
805 protected void run(CodeGearManager cgm) { | |
806 cgm.setup(new TestCodeGear());//CGの待ち合わせを開始 | |
807 getLocalDGM().put("count", 1); | |
808 } | |
809 } | |
810 </code></pre> | |
811 | |
910 <style type="text/css"> | 812 <style type="text/css"> |
911 <!-- | 813 <!-- |
912 *{ | 814 *{ |
913 font:nomal 100% 'PT Sans'; | 815 font:nomal 100% 'PT Sans'; |
914 } | 816 } |