Mercurial > hg > Papers > 2016 > nozomi-sigos
view presen/sample.html @ 29:296df25feb76
add slide
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 29 May 2016 14:55:47 +0900 |
parents | |
children | 3f7064e09310 |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>分散フレームワークAliceのPC画面配信システムへの応用</title> <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]"> <meta name="author" content="照屋のぞみ 河野真治" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> <link rel="stylesheet" href="s6/themes/print.css" media="print"> <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> <!-- JS --> <script src="s6/js/jquery-1.11.3.min.js"></script> <script src="s6/js/jquery.slideshow.js"></script> <script src="s6/js/jquery.slideshow.counter.js"></script> <script src="s6/js/jquery.slideshow.controls.js"></script> <script src="s6/js/jquery.slideshow.footer.js"></script> <script src="s6/js/jquery.slideshow.autoplay.js"></script> <!-- prettify --> <link rel="stylesheet" href="scripts/prettify.css"> <script src="scripts/prettify.js"></script> <script> $(document).ready( function() { Slideshow.init(); $('code').each(function(_, el) { if (!el.classList.contains('noprettyprint')) { el.classList.add('prettyprint'); el.style.display = 'block'; } }); prettyPrint(); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="s6/js/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <div align="right"> <img src="s6/images/logo.svg" width="200px"> </div> </div> </div> <div class="presentation"> <div class='slide cover'> <table width="90%" height="90%" border="0" align="center"> <tr> <td> <div align="center"> <h1><font color="#808db5">分散フレームワークAliceのPC画面配信システムへの応用</font></h1> </div> </td> </tr> <tr> <td> <div align="left"> 照屋のぞみ 河野真治 琉球大学 工学部 情報工学科 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> </tr> </table> </div> <div class='slide '> <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] on 2016-05-24 19:45:05 +0900 with Markdown engine kramdown (1.5.0) using options {} --> <!-- _S9SLIDE_ --> <h1 id="section">研究目的(1/3)</h1> <ul> <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。 </li> <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-1">研究目的(2/3)</h1> <ul> <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li> <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li> <li>仕様を大きく変更することなくプログラムの挙動が変えられる</li> <li>変更前の信頼性を保ったまま拡張可能にする</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-2">研究目的(3/3)</h1> <ul> <li>本研究では、 分散トポロジー管理の Meta Computation である Topology Manager に NAT 越えを実現するための設計を行う。そしてその設計が Alice アプリケーション同士の接続も可能にすることを示す。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1> <ul> <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li> <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 <img src="./images/dsandcs.svg" alt="opt" width="60%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="codesegment">CodeSegmentの依存関係</h1> <ul> <li>データの依存関係にないCSは並列実行される</li> <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li> <li>DSはCSに専有されるためロックの記述を必要としない <img src="./images/dsandcs2.svg" alt="opt" width="60%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1> <ul> <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li> <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li> <li>DSはAliceが内部にもつデータベース(DS Manager)により管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="data-segment-manager">Data Segment Manager</h1> <ul> <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li> <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li> <li>keyに対して複数のDSを保存する際はFIFO的に処理される<br /> <img src="./images/KeyDS.svg" alt="opt" width="50%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="data-segment-manager-1">Data Segment Manager</h1> <ul> <li>Local DSM … 各ノード固有のデータベース。</li> <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br /> <img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="computation--meta-computation">Computation と Meta Computation</h1> <ul> <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li> <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="computation--meta-computation-1">Computation と Meta Computation</h1> <ul> <li>DS/CSの接続の間にMeta Computationが実行されている</li> <li>AliceのMeta ComputationもCS/DSにより実現される</li> <li>Meta ComputationはCS の処理を支えるMeta CSとMeta CSに管理されるMeta DSに分けられる <img src="./pictures/MetaCSDS.svg" alt="opt" width="70%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="computation--meta-computation-2">Computation と Meta Computation</h1> <ul> <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li> <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="topology-manager">Topology Manager</h1> <ul> <li>Alice では、ノード間の接続管理やトポロジーの構成管理を、Topology Manager という Meta Computation が提供している。</li> <li>Topology Manager も CS/DS を用いて実装されている。</li> <li>Static Topology ManagerとDynamic Topology Managerがある</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="static-topology-manager">Static Topology Manager</h1> <ul> <li>プログラマがdot形式のトポロジーファイルを用意し、TopologyManagerに読み込ませる</li> <li>トポロジーファイルにはノードの接続関係と接続する際に指定するRDSM名を記す</li> </ul> <pre lang="dot"><code>digraph test{ node0 −> node1[label=”right”] node0 −> node2[label=”left”] node1 −> node2[label=”right”] node1 −> node0[label=”left”] node2 −> node0[label=”right”] node2 −> node1[label=”left”] } </code></pre> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="static-topology-manager-1">Static Topology Manager</h1> <ul> <li>参加表明があった順にnode nameを割り当て、接続するべきクライアントのIPアドレス やポート番号、接続名を送る <img src="./pictures/topologymanager.svg" alt="opt" width="40%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="dynamic-topology-manager">Dynamic Topology Manager</h1> <ul> <li>参加するノード数があらかじめ決まっているとは限らない</li> <li>Dynamic Topology Managerがノードを参加表明順にトポロジーに組み込む</li> <li>現在はTree TopologyとStar Topologyに対応</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="dynamic-topology-manager-1">Dynamic Topology Manager</h1> <ul> <li>Topology Managerを立ちあげ、各ノードはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> <img src="./pictures/tree1.svg" alt="opt" width="60%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="dynamic-topology-manager-2">Dynamic Topology Manager</h1> <ul> <li>Topology Managerは参加表明を受け取った順にStar構造になるよう接続情報を送る<br /> <img src="./pictures/tree2.svg" alt="opt" width="60%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="dynamic-topology-manager-3">Dynamic Topology Manager</h1> <ul> <li>各ノードが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでStar構造が作られる<br /> <img src="./pictures/tree3.svg" alt="opt" width="60%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-3">障害発生時の対応</h1> <ul> <li>KeepAliveというMeta Computationがノードの生存確認を行う</li> <li>一定時間内にノードから応答がない場合、そのノードとの接続を切断し、再接続すべきノードの情報をTopologyManagerに要求する</li> <li>Closed Event ManagerというMeta Computationは切断・再接続時に指定されたCSを実行する</li> <li>再接続時に特定の処理を行いたい場合はCSを書いてClosed Event Managerに登録する</li> <li>これらのMeta ComputationはTopology Manager内でも使用されるため、Meta Meta Computationとも言える</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="topology-node">Topology Node</h1> <ul> <li>Topology Managerとの通信を行うノード側のMeta Computation</li> <li>各ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信や接続管理を行う //図を入れる</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="treevnc">TreeVNC</h1> <ul> <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム </li> <li>TightVNCがもとになっている </li> <li>Alice上にTreeVNCを実装したものをAliceVNCと呼ぶ <img src="./images/treeVNC.svg" alt="opt" width="40%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="alice---treevncnat">Aliceの課題 - TreeVNCのNAT越え</h1> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="alice---alicevncalicechat">Aliceの課題 - AliceVNCとAliceChatの接続</h1> <ul> <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能 <img src="./images/AliceVNC.svg" alt="opt" width="50%" /></li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="alice">Aliceの課題</h1> <ul> <li>別トポロジー、別ネットワークのアプリケーションに接続したい要求に対応したい</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="topology-manager----">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="topology-manager-----1">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1> <ul> <li>共通点 <ul> <li>タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割</li> <li>共有メモリにアクセスするためのメモリロックの仕組みを必要としない</li> </ul> </li> <li>相違点 <ul> <li>Topologyの構成等はユーザーが書く</li> <li>NAT越えをサポートするメソッドがありプログラマはそれを組み合わせてNAT越えを行う //別アプリケーションとの接続も書きたい</li> </ul> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="alice2---akka">Aliceと他言語等との比較(2) - Akka</h1> <ul> <li>共通点 <ul> <li>通信部分等を子アクターで分離し階層化</li> </ul> </li> <li>相違点 <ul> <li>Topologyの構成等はユーザーが書く</li> <li>外側IPアドレス/ポート番号を指定できるが、ポートマッピングはユーザーが記述しなければならない //別アプリケーションとの接続も書きたい</li> </ul> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-4">まとめ</h1> <ul> <li>別トポロジー・別ネットワークのアプリケーションとの接続を可能にするため、分散トポロジーの構成・管理をする Meta Computation である Topology Manager/Node の拡 張設計を行った。</li> <li>DSM の切り替えにより Topology Node を複数の Topology Manager に対応させ、Meta Meta Computation として NAT 越えの機能を追加することで、Topology Manager/Node のコードを大きく変えず自由度の高い通信が可能になると期待される。</li> <li>しかし、それを実現するにはAlice の DSM を管理する static class の static を取り除かなければならず、それは容易ではなかった。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h1 id="section-5">今後の課題</h1> <ul> <li>DSMのレイヤー分け <ul> <li>staticのないコードで再設計し、Local DSMをメタレイヤー、トポロジーごとのレイヤーなどに分ける</li> </ul> </li> <li>APIの再設計 <ul> <li>put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい</li> </ul> </li> <li>DSの型情報のマネジメント <ul> <li>型情報がないのでpeek/takeする際にわかりにくい</li> </ul> </li> </ul> <style type="text/css"> <!-- *{ font:nomal 100% 'PT Sans'; } ul > li{ list-style-type:disc; } .slide h1{ text-align:left; color:#777777; font:bold 40px/1.13 'PT Sans', sans-serif; margin-bottom: 50px; } div#slide1 h1{ text-align:left; color:#777777; font:bold 60px 'PT Sans', sans-serif; margin-bottom: 50px; } pre > code{ font-family:'Droid Sans Mono', 'Courier New', monospace; } img[alt="opt"]{ display: block; margin-left: auto; margin-right: auto; } img[alt="right"]{ margin-right: 0; } table { margin-left: auto; margin-right: auto; } th { font-size: 120%; } --> </style> <!-- === end markdown block === --> </div> </div><!-- presentation --> </body> </html>