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 −&gt; node1[label=”right”] 258 node0 −&gt; node1[label=”right”]
237 node0 −&gt; node2[label=”left”] 259 node0 −&gt; node2[label=”left”]
239 node1 −&gt; node0[label=”left”] 261 node1 −&gt; node0[label=”left”]
240 node2 −&gt; node0[label=”right”] 262 node2 −&gt; node0[label=”right”]
241 node2 −&gt; node1[label=”left”] 263 node2 −&gt; 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>