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 −&gt; node1[label=”right”]
341 node0 −&gt; node2[label=”left”]
342 node1 −&gt; node2[label=”right”]
343 node1 −&gt; node0[label=”left”]
344 node2 −&gt; node0[label=”right”]
345 node2 −&gt; 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の総称型を用いて&lt;&gt;内に指定した型を受け取る</li> 627 <li>DataGearはJavaの総称型を用いて&lt;&gt;内に指定した型を受け取る</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 }