Mercurial > hg > Papers > 2018 > nozomi-master
comparison presen/sample.markdown @ 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 |
---|---|
1 title: 分散フレームワークChristieの設計 | 1 title: 分散フレームワークChristieの設計 |
2 author: 照屋のぞみ | 2 author: 照屋のぞみ |
3 | 3 |
4 # 研究目的(1/2) | 4 # 研究目的(1/2) |
5 * スケーラブルで信頼性の高い分散プログラムを書くのは容易ではない | |
6 * 並列で動く分散した資源を意識するのは難しい | |
7 * 分散したノードの選択方法が明確ではない | |
8 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する | 5 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する |
9 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す | 6 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す |
10 * 仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む | 7 * 仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む |
11 * スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力 | 8 * スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力 |
12 | 9 |
16 * Aliceの問題点を整理し、得られた知見をもとに分散フレームワークChristieの設計を行う | 13 * Aliceの問題点を整理し、得られた知見をもとに分散フレームワークChristieの設計を行う |
17 | 14 |
18 | 15 |
19 # 目次 | 16 # 目次 |
20 * Aliceの概要 | 17 * Aliceの概要 |
21 * Code Segment / Data Segment | 18 * AliceのNAT越え |
22 * Data Segment Manager | |
23 * API | |
24 * Computation / Meta Computation | |
25 * Topology Manager | |
26 * 圧縮 | |
27 * Topology Managerの拡張設計 | |
28 * 別トポロジー間の接続のための設計 | |
29 * 別ネットワーク間の接続のための設計 | |
30 * Aliceの問題点 | 19 * Aliceの問題点 |
31 * LocalDSMの複数立ち上げができない | |
32 * 記述の煩雑さ | |
33 * Christieの設計 | 20 * Christieの設計 |
34 * 基本設計 | |
35 * 記述性の改善 | |
36 * 他フレームワークとの比較 | 21 * 他フレームワークとの比較 |
37 * Akka, Hazelcast | |
38 * 設計思想の違い | |
39 * 記述性の違い | |
40 * 提供する機能 | |
41 * まとめ | 22 * まとめ |
42 * 今後の課題 | 23 * 今後の課題 |
43 | 24 |
44 | 25 |
45 | 26 |
72 * Remote DSMにはString型のDSM keyを指定してアクセスする | 53 * Remote DSMにはString型のDSM keyを指定してアクセスする |
73 ![opt](./pictures/newDSM.svg){:width="50%"} | 54 ![opt](./pictures/newDSM.svg){:width="50%"} |
74 | 55 |
75 # Data Segment API | 56 # Data Segment API |
76 * DSの取得 | 57 * DSの取得 |
77 * `void take(String managerKey, String key)` | 58 * take/peek |
78 * `void peek(String managerKey, String key)` | |
79 * DSの追加 | 59 * DSの追加 |
80 * `void put(String managerKey, String key, Object val)` | 60 * put/update |
81 * `void update(String managerKey, String key, Object val)` | 61 * DSの転送 |
82 * `void flip(String managerKey, String key, Receiver val)` | 62 * flip |
83 | 63 |
84 # Code Segmentの記述例 | 64 # Code Segmentの記述例 |
85 * take/peekをするにはcreate/setKeyメソッドを使わなければならない | 65 * take/peekをするにはcreate/setKeyメソッドを使わなければならない |
86 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定 | 66 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定 |
87 * データをReceiverから取り出す際は *asClass()* で型を指定 | 67 * データをReceiverから取り出す際は *asClass()* で型を指定 |
125 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation | 105 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation |
126 * Static Topology ManagerとDynamic Topology Managerがある | 106 * Static Topology ManagerとDynamic Topology Managerがある |
127 * Topology Node | 107 * Topology Node |
128 * 各ノード側でTopology Managerとの通信を行うMeta Computation | 108 * 各ノード側でTopology Managerとの通信を行うMeta Computation |
129 * ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う | 109 * ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う |
130 * Topology Manager/NodeもCS/DSを用いて実装されている。 | 110 |
131 | 111 # AliceのMeta Computation - Topology Manager/Topology Node |
132 # AliceのMeta Computation - Static Topology Manager | 112 * Topology Managerを立ち上げる |
133 * プログラマがdot形式のトポロジーファイルを用意し、Topology Managerに読み込ませる | |
134 * トポロジーファイルにはノードの接続関係と接続する際に指定するRemote DSM名を記す | |
135 * Graphvizを用いればトポロジーを描くだけでトポロジーファイルが自動出力されるため構成が容易 | |
136 | |
137 ```dot | |
138 digraph test{ | |
139 node0 −> node1[label=”right”] | |
140 node0 −> node2[label=”left”] | |
141 node1 −> node2[label=”right”] | |
142 node1 −> node0[label=”left”] | |
143 node2 −> node0[label=”right”] | |
144 node2 −> node1[label=”left”] | |
145 } | |
146 ``` | |
147 | |
148 # AliceのMeta Computation - Static Topology Manager | |
149 * ファイルを読み込んだTopology Managerを立ち上げる | |
150 * 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する | 113 * 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する |
151 ![opt](./pictures/tree1.svg){:width="60%"} | 114 ![opt](./pictures/tree1.svg){:width="60%"} |
152 | 115 |
153 # AliceのMeta Computation - Static Topology Manager | 116 # AliceのMeta Computation - Topology Manager/Topology Node |
154 * 参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る | 117 * 参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る |
155 ![opt](./pictures/tree2.svg){:width="60%"} | 118 ![opt](./pictures/tree2.svg){:width="60%"} |
156 | 119 |
157 # AliceのMeta Computation - Static Topology Manager | 120 # AliceのMeta Computation - Topology Manager/Topology Node |
158 * Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる | 121 * Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる |
159 * Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う | 122 * Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う |
160 ![opt](./pictures/tree3.svg){:width="60%"} | 123 ![opt](./pictures/tree3.svg){:width="60%"} |
161 | |
162 # AliceのMeta Computation - Dynamic Topology Manager | |
163 * 参加するノード数があらかじめ決まっているとは限らない | |
164 * Dynamic Topology Managerがノードを参加表明順にトポロジーに組み込む | |
165 * 現在はTree Topologyに対応 | |
166 | 124 |
167 # AliceのMeta Computation - 圧縮 | 125 # AliceのMeta Computation - 圧縮 |
168 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる | 126 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる |
169 * 圧縮したデータの伸長と圧縮したままの転送が同時に可能 | 127 * 圧縮したデータの伸長と圧縮したままの転送が同時に可能 |
170 ![opt](./pictures/compress.svg){:width="80%"} | 128 ![opt](./pictures/compress.svg){:width="80%"} |
173 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい | 131 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい |
174 `put("compressedRemoteDGM", "key", data)` | 132 `put("compressedRemoteDGM", "key", data)` |
175 * 伸長も *asClass()* した際に自動でされる | 133 * 伸長も *asClass()* した際に自動でされる |
176 * コードの変更が抑えて圧縮・非圧縮が切り替えられる | 134 * コードの変更が抑えて圧縮・非圧縮が切り替えられる |
177 | 135 |
178 | 136 # AliceのNATを越え |
179 | |
180 # Aliceに求められるMeta Computation - アプリケーションの接続 | |
181 * 別のトポロジーをもった既存のアプリケーション同士をコードの変更を抑えつつ接続させたい | |
182 * AliceVNC | |
183 * Alice上に実装したツリートポロジーの画面配信システム | |
184 * AliceChat | |
185 * Alice上に実装したスタートポロジーのチャット | |
186 * 連携することで実現したい機能 | |
187 * VNC画面のスナップショットをチャットに載せる | |
188 * チャットの内容をVNC画面にコメントとして流す | |
189 | |
190 # Aliceに求められるMeta Computation - アプリケーションの接続 | |
191 * それぞれのアプリケーションのトポロジーを構成するTopologyManagerを連携させることで可能 | |
192 ![opt](./pictures/vncandchat.svg){:width="70%"} | |
193 | |
194 # Aliceに求められるMeta Computation - NATを越えた接続 | |
195 * NATを越えたノード間通信は分散処理の課題である | 137 * NATを越えたノード間通信は分散処理の課題である |
196 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでトポロジーの拡張が可能 | 138 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能 |
197 | 139 |
198 # Aliceに求められるMeta Computation - NATを越えた接続 | 140 # AliceのNATを越え接続 |
199 * 各プライベートネットワーク内を管理するPrivate Topology Manager | 141 * 各プライベートネットワーク内を管理するPrivate Topology Manager |
200 * グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる | 142 * グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる |
201 * TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続 | 143 * TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続 |
202 ![opt](./pictures/overNAT.svg){:width="70%"} | 144 ![opt](./pictures/overNAT.svg){:width="70%"} |
203 | 145 |
216 | 158 |
217 | 159 |
218 # Aliceの問題点 - LocalDSMを複数立ち上げられない | 160 # Aliceの問題点 - LocalDSMを複数立ち上げられない |
219 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない | 161 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない |
220 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない | 162 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない |
221 * アプリケーション接続やNAT越えのMeta Computationの追加が困難 | 163 * 現状ではNAT越えのMeta Computationの追加が困難 |
222 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない | 164 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない |
165 * 再設計の必要がある | |
223 | 166 |
224 # Aliceの問題点 - APIシンタックスの分離 | 167 # Aliceの問題点 - APIシンタックスの分離 |
225 * setKeyは記述場所が決まっておらず、CSの外からも呼べる | 168 * setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる |
226 * CSの再利用を可能にするが、どのkeyを待っているのか不明なCSが生まれてしまう | 169 * どのkeyを待っているのか不明なCSが生まれてしまう |
227 * setKeyではkeyを動的に指定することができる | 170 * setKeyではkeyを動的に指定することができる |
228 * どんな処理を行っているかわかりづらい | 171 * どんな処理を行っているかわかりづらい |
229 * 対応するput箇所も修正しなければならない | 172 * 対応するput箇所も修正しなければならない |
230 * モデル検査しづらくなる | 173 * モデル検査しづらくなる |
231 | 174 |
259 | 202 |
260 # Aliceの問題点 - 型が推測できない | 203 # Aliceの問題点 - 型が推測できない |
261 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない | 204 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない |
262 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある | 205 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある |
263 * 型をDSをputした箇所までコードをたどる必要がある | 206 * 型をDSをputした箇所までコードをたどる必要がある |
264 * flipでの転送もあるため、それを発見するのは容易ではない | |
265 | 207 |
266 # Aliceの問題点 - まとめ | 208 # Aliceの問題点 - まとめ |
267 * 以下の問題がAliceの信頼性・拡張性を下げている | 209 * 以下の問題がAliceの信頼性・拡張性を下げている |
268 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難 | 210 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難 |
269 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい | 211 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい |
270 * setKyeの記述順序や型を気にしてプログラミングをしなくてはならない | 212 * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない |
271 | 213 |
272 # 分散フレームワークChristieへの必要要件 | 214 # 分散フレームワークChristieへの必要要件 |
273 * Aliceの問題点を踏まえ、フレームワークをChristieを設計する | 215 * Aliceの問題点を踏まえ、フレームワークをChristieを設計する |
274 * staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める | 216 * staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める |
275 * 煩雑なAPIをシンプルにし、記述性を高める | 217 * 煩雑なAPIをシンプルにし、記述性を高める |
276 * 型の整合性をとれるようにし、信頼性を向上させる | 218 * 型の整合性をとれるようにし、信頼性を向上させる |
277 | 219 |
278 # Christie - 基本設計 | 220 # Christie - 基本設計(1) |
279 * Javaで実装される | 221 * Javaで実装される |
222 * CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である | |
280 * 将来的に当研究室で開発しているGearsOSに統合したい | 223 * 将来的に当研究室で開発しているGearsOSに統合したい |
281 * GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる | 224 * GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる |
282 * CG/DGの依存関係や、DG Manager(DGM)の構造、Remote DGMへの接続方法はAliceと同様である | 225 |
283 | 226 # Christie - 基本設計(2) |
284 # Christie - 基本設計 | 227 * Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理 |
285 * DGMはLocalもRemoteも全てCode Gear Manager(CGM)が管理する | |
286 * 1つのCGMは1つのLocalDGMを持つ | 228 * 1つのCGMは1つのLocalDGMを持つ |
287 * CGM同士はThreadPoolとCGMのリストを共有している | 229 * CGM同士はThreadPoolとCGMのリストを共有している |
288 * メタ計算で全てのCGMにアクセス可能 | 230 * メタ計算で全てのCGMにアクセス可能 |
289 ![opt](./pictures/ChristieClass.svg){:width="60%"} | 231 ![opt](./pictures/ChristieClass.svg){:width="60%"} |
290 | 232 |
291 # Christie - 基本設計 | 233 # Christie - 基本設計(2) DGMの複数立ち上げ |
234 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる | |
235 * NAT越えなどの機能拡張に対応可能 | |
236 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする | |
237 * 分散プログラムのローカルでのテストが可能になる | |
238 ![opt](./pictures/DGM.svg){:width="50%"} | |
239 | |
240 # Christie - 基本設計(3) | |
292 * CG を記述する際は Alice同様CodeGear.classを継承 | 241 * CG を記述する際は Alice同様CodeGear.classを継承 |
293 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述 | 242 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述 |
243 * run内で新たなCGを作るためのAPIにはCGM経由で呼び出す | |
294 * このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方 | 244 * このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方 |
295 * CGを作るためのAPIにはCGM経由で呼び出す | |
296 | |
297 # Christie - DGMの複数立ち上げ | |
298 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる | |
299 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする | |
300 * 分散プログラムのローカルでのテストが可能になる | |
301 ![opt](./pictures/DGM.svg){:width="50%"} | |
302 | |
303 # Christie - CGの生成方法 | |
304 1. StartCodeGear.classを継承しCGMを生成する | |
305 2. CGをnewしたあと*setup*を用いる | |
306 * newが終わらないとアノテーションから待ち合わせを行う処理ができないため | |
307 * このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない | |
308 | |
309 ```java | |
310 public class StartTest extends StartCodeGear{//StartCG | |
311 | |
312 public StartTest(CodeGearManager cgm) { | |
313 super(cgm); | |
314 } | |
315 | |
316 public static void main(String args[]){ | |
317 StartTest start = new StartTest(createCGM(10000));//CGMを生成 | |
318 } | |
319 | |
320 @Override | |
321 protected void run(CodeGearManager cgm) { | |
322 cgm.setup(new TestCodeGear());//CGの待ち合わせを開始 | |
323 getLocalDGM().put("count", 1); | |
324 } | |
325 } | |
326 ``` | |
327 | 245 |
328 # Christie - アノテーションを用いたインプット記述 | 246 # Christie - アノテーションを用いたインプット記述 |
329 * keyの指定にはJavaのアノテーションを用いる | 247 * keyの指定にはJavaのアノテーションを用いる |
330 * 先頭を@で始める注釈 | 248 * 先頭を@で始める注釈 |
331 * 独自アノテーションを定義できる | 249 * 独自アノテーションを定義できる |
372 } | 290 } |
373 ``` | 291 ``` |
374 * 取得したDGが待ち合わせに指定した型と違う場合はエラーになる | 292 * 取得したDGが待ち合わせに指定した型と違う場合はエラーになる |
375 | 293 |
376 # Christie - まとめ | 294 # Christie - まとめ |
377 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になった | 295 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった |
378 * テストや機能拡張がしやすくなった | |
379 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした | 296 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした |
380 * 型の整合性を保証することで信頼性が向上した | 297 * 型の整合性を保証することで信頼性が向上した |
381 | 298 |
382 # Christieと他フレームワークの比較 | 299 # Christieと他フレームワークの比較 |
383 * Christieの特徴を述べるために他の分散フレームワークとしてAkka、Hazelcastと比較を行う | 300 * Akka、Hazelcastと比較してChristieの特徴を述べる |
301 * Akka ...Scala/Java向け分散フレームワーク | |
302 * Hazelcast ...Java向け分散フレームワーク | |
384 | 303 |
385 # Christieと他フレームワークの比較 - Akka | 304 # Christieと他フレームワークの比較 - Akka |
386 * アクターモデル | 305 * アクターモデル |
387 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル | 306 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル |
388 * アクターは固有のアドレス持つ | 307 * アクターは固有のアドレス持つ |
389 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信 | 308 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信 |
390 * アクターはメールボックスというキューを持つ | 309 * アクターはメールボックスというキューを持つ |
391 * 受け取ったメッセージをパターンマッチで順次処理 | 310 * 受け取ったメッセージをパターンマッチで順次処理 |
392 * パターンマッチにはScalaのcase classを用いられる | 311 * パターンマッチにはScalaのcase classを用いられる |
393 ![opt](./pictures/Akka.svg){:width="50%"} | 312 ![opt](./pictures/Akka.svg){:width="70%"} |
394 | 313 |
395 # Christieと他フレームワークの比較 - Hazelcast | 314 # Christieと他フレームワークの比較 - Hazelcast |
396 * キーと値の1対1でデータを管理するインメモリ・データグリッド | 315 * キーと値の1対1でデータを管理するインメモリ・データグリッド |
397 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル | 316 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル |
398 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put | 317 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put |
409 * 複数のインプットを待ち合わせして処理を行いたい場合 | 328 * 複数のインプットを待ち合わせして処理を行いたい場合 |
410 * Akkaは待ち合わせ処理をプログラマが書かなければならない | 329 * Akkaは待ち合わせ処理をプログラマが書かなければならない |
411 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない | 330 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない |
412 * データの圧縮通信を指定したい場合 | 331 * データの圧縮通信を指定したい場合 |
413 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する | 332 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する |
414 * ChristieではDGMkeyの名前を変えるだけなのでメソッド呼び出しの記述が必要ない | 333 * ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能 |
415 | 334 |
416 # まとめ | 335 # まとめ |
417 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した | 336 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した |
418 * Aliceの問題点を整理し、再設計の必要性を述べた | 337 * Aliceの問題点を整理し、再設計の必要性を述べた |
419 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた | 338 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた |
420 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した | 339 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した |
421 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを述べた | 340 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した |
422 | 341 |
423 # 今後の課題 | 342 # 今後の課題 |
424 * DataGearのメタレイヤーへの移行 | 343 * DataGearのメタレイヤーへの移行 |
425 * TopologyManagerの実装 | 344 * TopologyManagerの実装 |
426 * 実用性の検証 | 345 * 実用性の検証 |
427 * Jungleとの統合 | 346 * Jungleとの統合 |
428 * GearsOSへの移行 | 347 * GearsOSへの移行 |
429 | 348 |
349 # Christie - CGの生成方法 | |
350 1. StartCodeGear.classを継承しCGMを生成する | |
351 2. CGをnewしたあと*setup*を用いる | |
352 * newが終わらないとアノテーションから待ち合わせを行う処理ができないため | |
353 * このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない | |
354 | |
355 ```java | |
356 public class StartTest extends StartCodeGear{//StartCG | |
357 | |
358 public StartTest(CodeGearManager cgm) { | |
359 super(cgm); | |
360 } | |
361 | |
362 public static void main(String args[]){ | |
363 StartTest start = new StartTest(createCGM(10000));//CGMを生成 | |
364 } | |
365 | |
366 @Override | |
367 protected void run(CodeGearManager cgm) { | |
368 cgm.setup(new TestCodeGear());//CGの待ち合わせを開始 | |
369 getLocalDGM().put("count", 1); | |
370 } | |
371 } | |
372 ``` | |
373 | |
374 | |
430 <style type="text/css"> | 375 <style type="text/css"> |
431 <!-- | 376 <!-- |
432 *{ | 377 *{ |
433 font:nomal 100% 'PT Sans'; | 378 font:nomal 100% 'PT Sans'; |
434 } | 379 } |