Mercurial > hg > Papers > 2016 > nozomi-sigos
comparison presen/sample.html @ 30:3f7064e09310
change tree figure
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 29 May 2016 18:10:35 +0900 |
parents | 296df25feb76 |
children | b729ee3a8f72 |
comparison
equal
deleted
inserted
replaced
29:296df25feb76 | 30:3f7064e09310 |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <meta http-equiv="content-type" content="text/html;charset=utf-8"> | 4 <meta http-equiv="content-type" content="text/html;charset=utf-8"> |
5 <title>分散フレームワークAliceのPC画面配信システムへの応用</title> | 5 <title>分散システム向けのTopology Managerの改良</title> |
6 | 6 |
7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]"> | 7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]"> |
8 <meta name="author" content="照屋のぞみ 河野真治" > | 8 <meta name="author" content="照屋のぞみ 河野真治" > |
9 | 9 |
10 <!-- style sheet links --> | 10 <!-- style sheet links --> |
65 <div class='slide cover'> | 65 <div class='slide cover'> |
66 <table width="90%" height="90%" border="0" align="center"> | 66 <table width="90%" height="90%" border="0" align="center"> |
67 <tr> | 67 <tr> |
68 <td> | 68 <td> |
69 <div align="center"> | 69 <div align="center"> |
70 <h1><font color="#808db5">分散フレームワークAliceのPC画面配信システムへの応用</font></h1> | 70 <h1><font color="#808db5">分散システム向けのTopology Managerの改良</font></h1> |
71 </div> | 71 </div> |
72 </td> | 72 </td> |
73 </tr> | 73 </tr> |
74 <tr> | 74 <tr> |
75 <td> | 75 <td> |
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 2016-05-24 19:45:05 +0900 with Markdown engine kramdown (1.5.0) | 90 on 2016-05-29 18:07:15 +0900 with Markdown engine kramdown (1.5.0) |
91 using options {} | 91 using options {} |
92 --> | 92 --> |
93 | 93 <p>Topology Managerをもっとかっこよくアピール |
94 <!-- _S9SLIDE_ --> | 94 前半もっとクリーンナップ</p> |
95 <h1 id="section">研究目的(1/3)</h1> | 95 |
96 | |
97 </div> | |
98 <div class='slide '> | |
99 <!-- _S9SLIDE_ --> | |
100 <h1 id="section">目次</h1> | |
101 | |
102 | |
103 </div> | |
104 <div class='slide '> | |
105 <!-- _S9SLIDE_ --> | |
106 <h1 id="section-1">研究目的(1/3)</h1> | |
96 <ul> | 107 <ul> |
97 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> | 108 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> |
98 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。 </li> | 109 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。 </li> |
99 <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li> | 110 <li>信頼性とスケーラビリティ向上のため、Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li> |
100 </ul> | 111 </ul> |
101 | 112 |
102 | 113 |
103 </div> | 114 </div> |
104 <div class='slide '> | 115 <div class='slide '> |
105 <!-- _S9SLIDE_ --> | 116 <!-- _S9SLIDE_ --> |
106 <h1 id="section-1">研究目的(2/3)</h1> | 117 <h1 id="section-2">研究目的(2/3)</h1> |
107 <ul> | 118 <ul> |
108 <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li> | 119 <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。//コアな仕様の例</li> |
109 <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li> | 120 <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li> |
110 <li>仕様を大きく変更することなくプログラムの挙動が変えられる</li> | 121 <li>仕様を大きく変更することなくプログラムの挙動が変えられる//分散処理とかの拡張なら指定だけで良い</li> |
111 <li>変更前の信頼性を保ったまま拡張可能にする</li> | 122 <li>変更前の信頼性を保ったまま拡張可能にする</li> |
112 </ul> | 123 </ul> |
113 | 124 |
114 | 125 |
115 </div> | 126 </div> |
116 <div class='slide '> | 127 <div class='slide '> |
117 <!-- _S9SLIDE_ --> | 128 <!-- _S9SLIDE_ --> |
118 <h1 id="section-2">研究目的(3/3)</h1> | 129 <h1 id="section-3">研究目的(3/3)</h1> |
119 <ul> | 130 <ul> |
120 <li>本研究では、 分散トポロジー管理の Meta Computation である Topology Manager に NAT 越えを実現するための設計を行う。そしてその設計が Alice アプリケーション同士の接続も可能にすることを示す。</li> | 131 <li>Aliceでは分散トポロジー管理の Meta Computation である Topology Manager</li> |
132 <li>本研究では、 Topology Managerに NAT越えを実現するための設計を行う</li> | |
133 <li>そしてその設計が Alice アプリケーション同士の接続も可能にすることを示す | |
134 ↑逆? | |
135 Topologyの課題をかく</li> | |
121 </ul> | 136 </ul> |
122 | 137 |
123 | 138 |
124 </div> | 139 </div> |
125 <div class='slide '> | 140 <div class='slide '> |
127 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1> | 142 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1> |
128 <ul> | 143 <ul> |
129 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li> | 144 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li> |
130 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> | 145 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> |
131 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 | 146 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 |
132 <img src="./images/dsandcs.svg" alt="opt" width="60%" /></li> | 147 <img src="./images/dsandcs.svg" alt="opt" width="50%" /></li> |
133 </ul> | 148 </ul> |
134 | 149 |
135 | 150 |
136 </div> | 151 </div> |
137 <div class='slide '> | 152 <div class='slide '> |
139 <h1 id="codesegment">CodeSegmentの依存関係</h1> | 154 <h1 id="codesegment">CodeSegmentの依存関係</h1> |
140 <ul> | 155 <ul> |
141 <li>データの依存関係にないCSは並列実行される</li> | 156 <li>データの依存関係にないCSは並列実行される</li> |
142 <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li> | 157 <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li> |
143 <li>DSはCSに専有されるためロックの記述を必要としない | 158 <li>DSはCSに専有されるためロックの記述を必要としない |
144 <img src="./images/dsandcs2.svg" alt="opt" width="60%" /></li> | 159 <img src="./images/dsandcs2.svg" alt="opt" width="50%" /></li> |
145 </ul> | 160 </ul> |
146 | 161 |
147 | 162 |
148 </div> | 163 </div> |
149 <div class='slide '> | 164 <div class='slide '> |
150 <!-- _S9SLIDE_ --> | 165 <!-- _S9SLIDE_ --> |
151 <h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1> | 166 <h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1> |
152 <ul> | 167 <ul> |
153 <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li> | 168 <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li> |
154 <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li> | 169 <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li> |
155 <li>DSはAliceが内部にもつデータベース(DS Manager)により管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li> | |
156 </ul> | 170 </ul> |
157 | 171 |
158 | 172 |
159 </div> | 173 </div> |
160 <div class='slide '> | 174 <div class='slide '> |
161 <!-- _S9SLIDE_ --> | 175 <!-- _S9SLIDE_ --> |
162 <h1 id="data-segment-manager">Data Segment Manager</h1> | 176 <h1 id="data-segment-manager">Data Segment Manager</h1> |
163 <ul> | 177 <ul> |
164 <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li> | 178 <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li> |
165 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li> | 179 <li>DSM 内の DS には対応する一意の String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。 |
166 <li>keyに対して複数のDSを保存する際はFIFO的に処理される<br /> | 180 <img src="./images/KeyDS.svg" alt="opt" width="50%" />//変更</li> |
167 <img src="./images/KeyDS.svg" alt="opt" width="50%" /></li> | |
168 </ul> | 181 </ul> |
169 | 182 |
170 | 183 |
171 </div> | 184 </div> |
172 <div class='slide '> | 185 <div class='slide '> |
173 <!-- _S9SLIDE_ --> | 186 <!-- _S9SLIDE_ --> |
174 <h1 id="data-segment-manager-1">Data Segment Manager</h1> | 187 <h1 id="data-segment-manager-1">Data Segment Manager</h1> |
175 <ul> | 188 <ul> |
176 <li>Local DSM … 各ノード固有のデータベース。</li> | 189 <li>Local DSM … 各ノード固有のデータベース。</li> |
177 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br /> | 190 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。 </li> |
178 <img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li> | 191 <li>Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる |
192 <img src="./images/remote_datasegment.svg" alt="opt" width="50%" />//変更</li> | |
179 </ul> | 193 </ul> |
180 | 194 |
181 | 195 |
182 </div> | 196 </div> |
183 <div class='slide '> | 197 <div class='slide '> |
184 <!-- _S9SLIDE_ --> | 198 <!-- _S9SLIDE_ --> |
185 <h1 id="computation--meta-computation">Computation と Meta Computation</h1> | 199 <h1 id="computation--meta-computation">Computation と Meta Computation</h1> |
186 <ul> | 200 <ul> |
187 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> | 201 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> |
188 <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li> | 202 <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理</li> |
189 <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li> | 203 <li>Meta Computationはそれを実現している処理 |
204 <ul> | |
205 <li>DSの待ち合わせ</li> | |
206 <li>分散トポロジーの構成</li> | |
207 <li>通信の切断・再接続時の処理</li> | |
208 <li>データの表現形式の選択</li> | |
209 </ul> | |
210 </li> | |
190 </ul> | 211 </ul> |
191 | 212 |
192 | 213 |
193 </div> | 214 </div> |
194 <div class='slide '> | 215 <div class='slide '> |
195 <!-- _S9SLIDE_ --> | 216 <!-- _S9SLIDE_ --> |
196 <h1 id="computation--meta-computation-1">Computation と Meta Computation</h1> | 217 <h1 id="computation--meta-computation-1">Computation と Meta Computation</h1> |
197 <ul> | |
198 <li>DS/CSの接続の間にMeta Computationが実行されている</li> | |
199 <li>AliceのMeta ComputationもCS/DSにより実現される</li> | |
200 <li>Meta ComputationはCS の処理を支えるMeta CSとMeta CSに管理されるMeta DSに分けられる | |
201 <img src="./pictures/MetaCSDS.svg" alt="opt" width="70%" /></li> | |
202 </ul> | |
203 | |
204 | |
205 </div> | |
206 <div class='slide '> | |
207 <!-- _S9SLIDE_ --> | |
208 <h1 id="computation--meta-computation-2">Computation と Meta Computation</h1> | |
209 <ul> | 218 <ul> |
210 <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li> | 219 <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li> |
211 <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li> | 220 <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li> |
212 </ul> | 221 <li>シンプルで見通しの良いコードを保つ</li> |
213 | 222 </ul> |
214 | 223 |
215 </div> | 224 |
216 <div class='slide '> | 225 </div> |
217 <!-- _S9SLIDE_ --> | 226 <div class='slide '> |
218 <h1 id="topology-manager">Topology Manager</h1> | 227 <!-- _S9SLIDE_ --> |
219 <ul> | 228 <h1 id="topology-managertopology-node">Topology ManagerとTopology Node</h1> |
220 <li>Alice では、ノード間の接続管理やトポロジーの構成管理を、Topology Manager という Meta Computation が提供している。</li> | 229 <ul> |
221 <li>Topology Manager も CS/DS を用いて実装されている。</li> | 230 <li>Topology Manager |
222 <li>Static Topology ManagerとDynamic Topology Managerがある</li> | 231 <ul> |
232 <li>ノード間の接続管理やトポロジーの構成管理行うMeta Computation</li> | |
233 <li>Static Topology ManagerとDynamic Topology Managerがある </li> | |
234 </ul> | |
235 </li> | |
236 <li>Topology Node | |
237 <ul> | |
238 <li>各ノード側でTopology Managerとの通信を行うMeta Computation</li> | |
239 <li>ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信や接続管理を行う </li> | |
240 </ul> | |
241 </li> | |
242 <li>Topology Manager/NodeもCS/DSを用いて実装されている。 | |
243 <img src="./pictures/topologynode.svg" alt="right" width="40%" />//変更</li> | |
223 </ul> | 244 </ul> |
224 | 245 |
225 | 246 |
226 </div> | 247 </div> |
227 <div class='slide '> | 248 <div class='slide '> |
228 <!-- _S9SLIDE_ --> | 249 <!-- _S9SLIDE_ --> |
229 <h1 id="static-topology-manager">Static Topology Manager</h1> | 250 <h1 id="static-topology-manager">Static Topology Manager</h1> |
230 <ul> | 251 <ul> |
231 <li>プログラマがdot形式のトポロジーファイルを用意し、TopologyManagerに読み込ませる</li> | 252 <li>プログラマがdot形式のトポロジーファイルを用意し、Topology Managerに読み込ませる</li> |
232 <li>トポロジーファイルにはノードの接続関係と接続する際に指定するRDSM名を記す</li> | 253 <li>トポロジーファイルにはノードの接続関係と接続する際に指定するRemote DSM名を記す</li> |
254 <li>Graphvizでトポロジーファイルを可視化して確認できる</li> | |
233 </ul> | 255 </ul> |
234 | 256 |
235 <pre lang="dot"><code>digraph test{ | 257 <pre lang="dot"><code>digraph test{ |
236 node0 −> node1[label=”right”] | 258 node0 −> node1[label=”right”] |
237 node0 −> node2[label=”left”] | 259 node0 −> node2[label=”left”] |
239 node1 −> node0[label=”left”] | 261 node1 −> node0[label=”left”] |
240 node2 −> node0[label=”right”] | 262 node2 −> node0[label=”right”] |
241 node2 −> node1[label=”left”] | 263 node2 −> node1[label=”left”] |
242 } | 264 } |
243 </code></pre> | 265 </code></pre> |
266 <p># Static Topology Manager | |
267 * ファイルを読み込んだTopology Managerを立ち上げる | |
268 * 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> | |
269 <img src="./pictures/tree1.svg" alt="opt" width="70%" /></p> | |
244 | 270 |
245 | 271 |
246 </div> | 272 </div> |
247 <div class='slide '> | 273 <div class='slide '> |
248 <!-- _S9SLIDE_ --> | 274 <!-- _S9SLIDE_ --> |
249 <h1 id="static-topology-manager-1">Static Topology Manager</h1> | 275 <h1 id="static-topology-manager-1">Static Topology Manager</h1> |
250 <ul> | 276 <ul> |
251 <li>参加表明があった順にnode nameを割り当て、接続するべきクライアントのIPアドレス | 277 <li>参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る |
252 やポート番号、接続名を送る | 278 <img src="./pictures/tree2.svg" alt="opt" width="70%" /></li> |
253 <img src="./pictures/topologymanager.svg" alt="opt" width="40%" /></li> | 279 </ul> |
280 | |
281 | |
282 </div> | |
283 <div class='slide '> | |
284 <!-- _S9SLIDE_ --> | |
285 <h1 id="static-topology-manager-2">Static Topology Manager</h1> | |
286 <ul> | |
287 <li>Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでTree型のオーバーレイネットワーク作られる<br /> | |
288 <img src="./pictures/tree3.svg" alt="opt" width="70%" /></li> | |
254 </ul> | 289 </ul> |
255 | 290 |
256 | 291 |
257 </div> | 292 </div> |
258 <div class='slide '> | 293 <div class='slide '> |
266 | 301 |
267 | 302 |
268 </div> | 303 </div> |
269 <div class='slide '> | 304 <div class='slide '> |
270 <!-- _S9SLIDE_ --> | 305 <!-- _S9SLIDE_ --> |
271 <h1 id="dynamic-topology-manager-1">Dynamic Topology Manager</h1> | 306 <h1 id="section-4">障害発生時の対応</h1> |
272 <ul> | |
273 <li>Topology Managerを立ちあげ、各ノードはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br /> | |
274 <img src="./pictures/tree1.svg" alt="opt" width="60%" /></li> | |
275 </ul> | |
276 | |
277 | |
278 </div> | |
279 <div class='slide '> | |
280 <!-- _S9SLIDE_ --> | |
281 <h1 id="dynamic-topology-manager-2">Dynamic Topology Manager</h1> | |
282 <ul> | |
283 <li>Topology Managerは参加表明を受け取った順にStar構造になるよう接続情報を送る<br /> | |
284 <img src="./pictures/tree2.svg" alt="opt" width="60%" /></li> | |
285 </ul> | |
286 | |
287 | |
288 </div> | |
289 <div class='slide '> | |
290 <!-- _S9SLIDE_ --> | |
291 <h1 id="dynamic-topology-manager-3">Dynamic Topology Manager</h1> | |
292 <ul> | |
293 <li>各ノードが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでStar構造が作られる<br /> | |
294 <img src="./pictures/tree3.svg" alt="opt" width="60%" /></li> | |
295 </ul> | |
296 | |
297 | |
298 </div> | |
299 <div class='slide '> | |
300 <!-- _S9SLIDE_ --> | |
301 <h1 id="section-3">障害発生時の対応</h1> | |
302 <ul> | 307 <ul> |
303 <li>KeepAliveというMeta Computationがノードの生存確認を行う</li> | 308 <li>KeepAliveというMeta Computationがノードの生存確認を行う</li> |
304 <li>一定時間内にノードから応答がない場合、そのノードとの接続を切断し、再接続すべきノードの情報をTopologyManagerに要求する</li> | 309 <li>一定時間内にノードから応答がない場合、そのノードとの接続を切断し、再接続すべきノードの情報をTopologyManagerに要求する</li> |
310 </ul> | |
311 | |
312 | |
313 </div> | |
314 <div class='slide '> | |
315 <!-- _S9SLIDE_ --> | |
316 <h1 id="section-5">障害発生時の対応</h1> | |
317 <ul> | |
305 <li>Closed Event ManagerというMeta Computationは切断・再接続時に指定されたCSを実行する</li> | 318 <li>Closed Event ManagerというMeta Computationは切断・再接続時に指定されたCSを実行する</li> |
306 <li>再接続時に特定の処理を行いたい場合はCSを書いてClosed Event Managerに登録する</li> | 319 <li>再接続時に特定の処理を行いたい場合はCSを書いてClosed Event Managerに登録する</li> |
307 <li>これらのMeta ComputationはTopology Manager内でも使用されるため、Meta Meta Computationとも言える</li> | 320 <li>これらのMeta ComputationはTopology Manager内でも使用されるため、Meta Meta Computationとも言える</li> |
308 </ul> | 321 </ul> |
309 | 322 |
310 | 323 |
311 </div> | 324 </div> |
312 <div class='slide '> | 325 <div class='slide '> |
313 <!-- _S9SLIDE_ --> | 326 <!-- _S9SLIDE_ --> |
314 <h1 id="topology-node">Topology Node</h1> | |
315 <ul> | |
316 <li>Topology Managerとの通信を行うノード側のMeta Computation</li> | |
317 <li>各ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信や接続管理を行う | |
318 //図を入れる</li> | |
319 </ul> | |
320 | |
321 | |
322 </div> | |
323 <div class='slide '> | |
324 <!-- _S9SLIDE_ --> | |
325 <h1 id="treevnc">TreeVNC</h1> | 327 <h1 id="treevnc">TreeVNC</h1> |
326 <ul> | 328 <ul> |
327 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム </li> | 329 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム</li> |
328 <li>TightVNCがもとになっている </li> | 330 <li>TightVNCを拡張して作られている |
329 <li>Alice上にTreeVNCを実装したものをAliceVNCと呼ぶ | 331 <img src="./images/treeVNC.svg" alt="right" width="40%" /></li> |
330 <img src="./images/treeVNC.svg" alt="opt" width="40%" /></li> | 332 </ul> |
331 </ul> | 333 |
332 | 334 |
333 | 335 </div> |
334 </div> | 336 <div class='slide '> |
335 <div class='slide '> | 337 <!-- _S9SLIDE_ --> |
336 <!-- _S9SLIDE_ --> | 338 <h1 id="alicevncalicechat">AliceVNCとAliceChatの接続</h1> |
337 <h1 id="alice---treevncnat">Aliceの課題 - TreeVNCのNAT越え</h1> | 339 <ul> |
338 | 340 <li>AliceVNC:Alice上に実装したTreeVNC(Tree Topology)</li> |
339 | 341 <li>AliceChat:Alice上に実装したチャット(Star Topology)</li> |
340 </div> | 342 <li>既存のAliceVNCとAliceChatをコードの変更を抑えつつ連携させたい |
341 <div class='slide '> | 343 <ul> |
342 <!-- _S9SLIDE_ --> | 344 <li>画面のスナップショットをチャットに載せる</li> |
343 <h1 id="alice---alicevncalicechat">Aliceの課題 - AliceVNCとAliceChatの接続</h1> | 345 <li>チャットの内容を画面にコメントとして流す</li> |
344 <ul> | 346 </ul> |
345 <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能 | 347 </li> |
346 <img src="./images/AliceVNC.svg" alt="opt" width="50%" /></li> | 348 </ul> |
347 </ul> | 349 |
348 | 350 |
349 | 351 </div> |
350 </div> | 352 <div class='slide '> |
351 <div class='slide '> | 353 <!-- _S9SLIDE_ --> |
352 <!-- _S9SLIDE_ --> | 354 <h1 id="treevncnat">TreeVNCのNAT越え</h1> |
353 <h1 id="alice">Aliceの課題</h1> | 355 <ul> |
354 <ul> | 356 <li>TreeVNCを学外からも画面共有ができるよう拡張したい</li> |
355 <li>別トポロジー、別ネットワークのアプリケーションに接続したい要求に対応したい</li> | 357 <li>ソースコードが膨大で複雜であったためNAT越えの実装には至らなかった</li> |
358 <li>グローバルIPを持っていることを前提としたノードに直接IPを指定して直下の子になるDirect Connectionを実装 | |
359 <img src="./images/directConnection.svg" alt="right" width="40%" /></li> | |
360 </ul> | |
361 | |
362 | |
363 </div> | |
364 <div class='slide '> | |
365 <!-- _S9SLIDE_ --> | |
366 <h1 id="treevncnat-1">TreeVNCのNAT越えの欠点</h1> | |
367 <ul> | |
368 <li>複数の別ネットワークからの接続があるとルートノードに台数分の負荷がかかる</li> | |
369 <li>どちらもプライベートネットワークだった場合に通信できない(中継サーバのプログラムを用意しなければならない)</li> | |
370 <li>分散アプリケーションにおけるNATを越えた通信は重要だがプログラマが実装するのは容易ではない </li> | |
371 </ul> | |
372 | |
373 | |
374 </div> | |
375 <div class='slide '> | |
376 <!-- _S9SLIDE_ --> | |
377 <h1 id="alice">Aliceの課題まとめ</h1> | |
378 <ul> | |
379 <li>別トポロジー、別ネットワークのアプリケーションに接続したい</li> | |
380 <li>コード変更を抑えつつトポロジーの拡張をサポートする機能がTopology Managerに必要</li> | |
356 </ul> | 381 </ul> |
357 | 382 |
358 | 383 |
359 </div> | 384 </div> |
360 <div class='slide '> | 385 <div class='slide '> |
361 <!-- _S9SLIDE_ --> | 386 <!-- _S9SLIDE_ --> |
362 <h1 id="topology-manager----">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> | 387 <h1 id="topology-manager----">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> |
363 | 388 <ol> |
364 | 389 <li>接続を要求する側のいずれかの Node が接続先 Topology Manager(A)のIPアドレスを自身を管理するTopology Manager(B)のDSMに保存。<br /> |
365 </div> | 390 <em>ここでTopology Managerに保存することでRootNodeが落ちてもトポロジーの再構成時にまた接続要求が出せる</em><br /> |
366 <div class='slide '> | 391 <img src="./pictures/private1.svg" alt="opt" width="70%" />//変更</li> |
367 <!-- _S9SLIDE_ --> | 392 </ol> |
368 <h1 id="topology-manager-----1">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | 393 |
394 | |
395 </div> | |
396 <div class='slide '> | |
397 <!-- _S9SLIDE_ --> | |
398 <h1 id="topology-manager-----1">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> | |
399 <ol> | |
400 <li>Topology Manager(B)はRootNode(B)にTopology Manager(A) への接続をするよう要求 | |
401 <img src="./pictures/private2.svg" alt="opt" width="70%" />//変更</li> | |
402 </ol> | |
403 | |
404 | |
405 </div> | |
406 <div class='slide '> | |
407 <!-- _S9SLIDE_ --> | |
408 <h1 id="topology-manager-----2">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> | |
409 <ol> | |
410 <li>RootNode(B) が Topology Manager(A) と接 続し、自身の接続先ノードの情報を取得 | |
411 <img src="./pictures/private3.svg" alt="opt" width="70%" />//変更</li> | |
412 </ol> | |
413 | |
414 | |
415 </div> | |
416 <div class='slide '> | |
417 <!-- _S9SLIDE_ --> | |
418 <h1 id="topology-manager-----3">Topology Managerの拡張設計 - 別トポロジーへの接続</h1> | |
419 <ol> | |
420 <li>取得した情報をもとに RootNode(A) に接続<br /> | |
421 <img src="./pictures/private4.svg" alt="opt" width="70%" />//変更</li> | |
422 </ol> | |
423 | |
424 | |
425 </div> | |
426 <div class='slide '> | |
427 <!-- _S9SLIDE_ --> | |
428 <h1 id="topology-manager">複数のTopology Managerへの対応</h1> | |
429 <ul> | |
430 <li>Topology Managerは各ノードにnodeNameを割り当て管理</li> | |
431 <li>Topology Nodeは割り当てられたnodeNameをDSとして保持しTopology Managerと通信</li> | |
432 <li>Topology Nodeが各Topology Managerに対応する複数のnodeNameを持つようにする<br /> | |
433 <img src="./pictures/somehostname.svg" alt="opt" width="40%" />//変更</li> | |
434 </ul> | |
435 | |
436 | |
437 </div> | |
438 <div class='slide '> | |
439 <!-- _S9SLIDE_ --> | |
440 <h1 id="local-dsm">Local DSMの切り替えによる対応</h1> | |
441 <ul> | |
442 <li>通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理</li> | |
443 <li>Tpology Manager/Nodeのコードを大きく変えずにTopology Managerの複数対応が可能<br /> | |
444 <img src="./pictures/somehostname2.svg" alt="right" width="40%" /></li> | |
445 </ul> | |
446 | |
447 | |
448 </div> | |
449 <div class='slide '> | |
450 <!-- _S9SLIDE_ --> | |
451 <h1 id="key">Keyの切り替えによる対応</h1> | |
452 <ul> | |
453 <li>DSMを管理するclassがstaticのためDSMの複数生成ができない</li> | |
454 <li>staticを抜くにはAliceのコードを大幅に変更しなければならない</li> | |
455 <li>nodeNameのDSを管理するkeyにManagerごとの番号を付け加えKeyによって切り替えている<br /> | |
456 <img src="./pictures/somehostname3.svg" alt="right" width="40%" />//変更</li> | |
457 </ul> | |
458 | |
459 | |
460 </div> | |
461 <div class='slide '> | |
462 <!-- _S9SLIDE_ --> | |
463 <h1 id="topology-manager-----4">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
464 <ul> | |
465 <li>各プライベートネットワーク内を管理するPrivate Topology Manager</li> | |
466 <li>グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる</li> | |
467 <li>TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続<br /> | |
468 <img src="./pictures/overNAT.svg" alt="opt" width="40%" /></li> | |
469 </ul> | |
470 | |
471 | |
472 </div> | |
473 <div class='slide '> | |
474 <!-- _S9SLIDE_ --> | |
475 <h1 id="topology-manager-----5">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
476 <ul> | |
477 <li>各プライベートネットワークのRootNodeをGlobal Topology Managerが木構造に接続</li> | |
478 <li>Global Topology Manager foresutoに木を構成</li> | |
479 <li>1つのノードへの接続数は最大4 | |
480 <img src="./pictures/3Dtree.svg" alt="right" width="40%" />//変更</li> | |
481 </ul> | |
482 | |
483 | |
484 </div> | |
485 <div class='slide '> | |
486 <!-- _S9SLIDE_ --> | |
487 <h1 id="topology-manager-----6">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
488 <ul> | |
489 <li>Topology Managerの「参加表明のあったノードで木を構成」仕様は変わらない</li> | |
490 <li>NAT越えはTopology ManagerのMeta Meta Computationと言える </li> | |
491 </ul> | |
492 | |
493 | |
494 </div> | |
495 <div class='slide '> | |
496 <!-- _S9SLIDE_ --> | |
497 <h1 id="topology-manager-----7">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
498 <ol> | |
499 <li>接続を要求する側のいずれかのノードがGlobal Topology ManagerのIPアドレスを自身を管理するTopology ManagerのDSMに保存 | |
500 <img src="./pictures/global1.svg" alt="opt" width="40%" /></li> | |
501 </ol> | |
502 | |
503 | |
504 </div> | |
505 <div class='slide '> | |
506 <!-- _S9SLIDE_ --> | |
507 <h1 id="topology-manager-----8">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
508 <ol> | |
509 <li>Topology ManagerはRootNodeにGlobal Topology Managerへの接続をするよう要求 | |
510 <img src="./pictures/global2.svg" alt="opt" width="40%" /></li> | |
511 </ol> | |
512 | |
513 | |
514 </div> | |
515 <div class='slide '> | |
516 <!-- _S9SLIDE_ --> | |
517 <h1 id="topology-manager-----9">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
518 <ol> | |
519 <li>RootNodeがGrobal Topology Managerと接続し、自身のIPアドレスを送る。Global Topology Manager が受け取ったIPアドレスがプライベートアドレスであれば、ノードに対してNATの外側IPアドレス/ポート番号を要求される。RootNode はそれに返答。 | |
520 <img src="./pictures/global3.svg" alt="opt" width="40%" /></li> | |
521 </ol> | |
522 | |
523 | |
524 </div> | |
525 <div class='slide '> | |
526 <!-- _S9SLIDE_ --> | |
527 <h1 id="topology-manager-----10">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
528 <ol> | |
529 <li>UDP hole punching 行われ、Network1のRootNodeとNetwork2のRootNodeが接続される | |
530 <img src="./pictures/global4.svg" alt="opt" width="40%" /></li> | |
531 </ol> | |
532 | |
533 | |
534 </div> | |
535 <div class='slide '> | |
536 <!-- _S9SLIDE_ --> | |
537 <h1 id="topology-manager-----11">Topology Managerの拡張設計 - 別ネットワークへの接続</h1> | |
538 <ol> | |
539 <li>もし接続が確立されなければ、Global Topology Manager がデータ中継用の CSを用意しデータを中継する | |
540 <img src="./pictures/global5.svg" alt="opt" width="40%" /></li> | |
541 </ol> | |
369 | 542 |
370 | 543 |
371 </div> | 544 </div> |
372 <div class='slide '> | 545 <div class='slide '> |
373 <!-- _S9SLIDE_ --> | 546 <!-- _S9SLIDE_ --> |
380 </ul> | 553 </ul> |
381 </li> | 554 </li> |
382 <li>相違点 | 555 <li>相違点 |
383 <ul> | 556 <ul> |
384 <li>Topologyの構成等はユーザーが書く</li> | 557 <li>Topologyの構成等はユーザーが書く</li> |
385 <li>NAT越えをサポートするメソッドがありプログラマはそれを組み合わせてNAT越えを行う | 558 <li>NAT越えをサポートするライブラリがありプログラマはそれを組み合わせてNAT越えを行う</li> |
386 //別アプリケーションとの接続も書きたい</li> | |
387 </ul> | 559 </ul> |
388 </li> | 560 </li> |
389 </ul> | 561 </ul> |
390 | 562 |
391 | 563 |
400 </ul> | 572 </ul> |
401 </li> | 573 </li> |
402 <li>相違点 | 574 <li>相違点 |
403 <ul> | 575 <ul> |
404 <li>Topologyの構成等はユーザーが書く</li> | 576 <li>Topologyの構成等はユーザーが書く</li> |
405 <li>外側IPアドレス/ポート番号を指定できるが、ポートマッピングはユーザーが記述しなければならない | 577 <li>外側IPアドレス/ポート番号を指定できるが、ポートマッピングはユーザーが記述しなければならない</li> |
406 //別アプリケーションとの接続も書きたい</li> | 578 </ul> |
407 </ul> | 579 </li> |
408 </li> | 580 </ul> |
409 </ul> | 581 |
410 | 582 |
411 | 583 </div> |
412 </div> | 584 <div class='slide '> |
413 <div class='slide '> | 585 <!-- _S9SLIDE_ --> |
414 <!-- _S9SLIDE_ --> | 586 <h1 id="section-6">まとめ</h1> |
415 <h1 id="section-4">まとめ</h1> | 587 <ul> |
416 <ul> | 588 <li>別トポロジー・別ネットワークのアプリケーションとの接続を可能にするため、分散トポロジーの構成・管理をするMeta ComputationであるTopology Manager/Nodeの拡張設計を行った。</li> |
417 <li>別トポロジー・別ネットワークのアプリケーションとの接続を可能にするため、分散トポロジーの構成・管理をする Meta Computation である Topology Manager/Node の拡 張設計を行った。</li> | |
418 <li>DSM の切り替えにより Topology Node を複数の Topology Manager に対応させ、Meta Meta Computation として NAT 越えの機能を追加することで、Topology Manager/Node のコードを大きく変えず自由度の高い通信が可能になると期待される。</li> | 589 <li>DSM の切り替えにより Topology Node を複数の Topology Manager に対応させ、Meta Meta Computation として NAT 越えの機能を追加することで、Topology Manager/Node のコードを大きく変えず自由度の高い通信が可能になると期待される。</li> |
419 <li>しかし、それを実現するにはAlice の DSM を管理する static class の static を取り除かなければならず、それは容易ではなかった。</li> | 590 <li>しかし、それを実現するにはAlice の DSM を管理する class の static を取り除かなければならず、それは容易ではなかった。</li> |
420 </ul> | 591 </ul> |
421 | 592 |
422 | 593 |
423 </div> | 594 </div> |
424 <div class='slide '> | 595 <div class='slide '> |
425 <!-- _S9SLIDE_ --> | 596 <!-- _S9SLIDE_ --> |
426 <h1 id="section-5">今後の課題</h1> | 597 <h1 id="section-7">今後の課題</h1> |
427 <ul> | 598 <ul> |
428 <li>DSMのレイヤー分け | 599 <li>DSMのレイヤー分け |
429 <ul> | 600 <ul> |
430 <li>staticのないコードで再設計し、Local DSMをメタレイヤー、トポロジーごとのレイヤーなどに分ける</li> | 601 <li>staticのないコードで再設計し、Local DSMをメタレイヤー、トポロジーごとのレイヤーなどに分ける</li> |
431 </ul> | 602 </ul> |