Mercurial > hg > Papers > 2018 > nozomi-master
annotate presen/sample.markdown @ 180:5a0a11b54ab4
add slide comment
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Feb 2018 18:19:10 +0900 |
parents | a3ee75a897f3 |
children | 38d95e434fbc |
rev | line source |
---|---|
176 | 1 title: 分散フレームワークChristieの設計 |
2 author: 照屋のぞみ | |
175 | 3 |
177 | 4 # 研究目的(1/2) |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
5 * 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
6 * ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す |
177 | 7 * 仕様の記述のしやすさ、可読性、拡張時に仕様変更を抑えられるかも含む |
8 * スケーラビリティとはサービス利用者が増加したとき単純にノードを追加するだけで線形に性能を向上させる能力 | |
176 | 9 |
177 | 10 # 研究目的(2/2) |
11 * 本研究では、Aliceの通信の信頼性を高めるためにNAT越えの機能設計を提案する | |
12 * そしてその実現にはAliceの再設計が必要であることを示す | |
13 * Aliceの問題点を整理し、得られた知見をもとに分散フレームワークChristieの設計を行う | |
176 | 14 |
175 | 15 |
16 # 目次 | |
17 * Aliceの概要 | |
179 | 18 * AliceのNAT越え |
176 | 19 * Aliceの問題点 |
20 * Christieの設計 | |
21 * 他フレームワークとの比較 | |
175 | 22 * まとめ |
176 | 23 * 今後の課題 |
24 | |
25 | |
26 | |
175 | 27 |
28 # Data Segment と Code Segment | |
29 * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割して依存関係を記述することでプログラミングを行う。 | |
30 * CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。 | |
31 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 | |
32 ![opt](./images/dsandcs.svg){:width="50%"} | |
33 | |
34 # CodeSegmentの依存関係 | |
35 * データの依存関係にないCSは並列実行される | |
36 * データの依存関係がある場合は Input DS が揃うと順に実行される | |
37 * DSはCSに専有されるためロックの記述を必要としない | |
38 ![opt](./images/dsandcs2.svg){:width="60%"} | |
39 | |
40 # Data Segment と CodeSegment | |
41 * AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する | |
42 * ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。 | |
43 | |
44 # Data Segment Manager | |
45 * DS の集合体であるデータベースを Alice では **DS Manager(DSM)** と呼ぶ。 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
46 * DSM 内の DS には対応する String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。 |
175 | 47 ![opt](./pictures/key.svg){:width="50%"} |
48 | |
49 # Data Segment Manager | |
50 * Local DSM … 各ノード固有のデータベース | |
51 * Remote DSM … 他のノードのLocal DSMのproxy。接続しているノードの数だけ存在する。 | |
52 * Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる | |
176 | 53 * Remote DSMにはString型のDSM keyを指定してアクセスする |
175 | 54 ![opt](./pictures/newDSM.svg){:width="50%"} |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
55 //図を訂正 |
175 | 56 |
176 | 57 # Data Segment API |
58 * DSの取得 | |
179 | 59 * take/peek |
176 | 60 * DSの追加 |
179 | 61 * put/update |
62 * DSの転送 | |
63 * flip | |
176 | 64 |
65 # Code Segmentの記述例 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
66 * take/peekをするにはcreate/setKeyメソッドを使う |
176 | 67 * *create* でインプットDGのRecieverを作り、*setKey* でReceiverにインプットとなるkeyを指定 |
68 * データをReceiverから取り出す際は *asClass()* で型を指定 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
69 * CSを生成し待ち合わせを指定するにはCSをnewする |
176 | 70 ```java |
71 public class TestCodeSegment extends CodeSegment { | |
72 private Receiver input = ids.create(CommandType.TAKE); | |
73 | |
74 public TestCodeSegment() { | |
75 input.setKey("count"); | |
76 } | |
77 | |
78 @Override | |
79 public void run() { | |
80 int count = input.asClass(Integer.class); | |
81 System.out.println("data = " + count); | |
82 | |
83 new TestCodeSegment(); | |
84 | |
85 ods.put("count", count); | |
86 } | |
87 } | |
88 ``` | |
89 | |
175 | 90 # Computation と Meta Computation |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
91 * 分散計算にはアルゴリズムの他に、以下のような処理が必要である。 |
175 | 92 * 分散トポロジーの構成 |
93 * 通信の切断・再接続時の処理 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
94 * データの圧縮を含む表現形式の選択 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
95 * NATなどのネットワークの詳細 |
175 | 96 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
97 * Aliceでは、これらをMeta Computationと呼ぶ。 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
98 * Meta ComputationもCS/DSによって記述される。 |
175 | 99 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
100 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
101 # AliceのMeta Computation - Topology Manager |
175 | 102 * Topology Manager |
103 * ノード間の接続管理やトポロジーの構成管理行うMeta Computation | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
104 * Static Topology Manager...参加ノード数の決まったトポロジーをファイルに記述 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
105 * Dynamic Topology Manager...可変長のノードに対応し、修復も行う |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
106 ![opt](./pictures/tree1.svg){:width="60%"} |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
107 //図を訂正 |
175 | 108 |
176 | 109 # AliceのMeta Computation - 圧縮 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
110 * 圧縮したデータの伸長と圧縮したままの転送を同時に行いたい |
176 | 111 * DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる |
112 ![opt](./pictures/compress.svg){:width="80%"} | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
113 //図を訂正 |
175 | 114 |
176 | 115 # AliceのMeta Computation - 圧縮 |
116 * 圧縮の指定には宛先DGM keyに"compressed"とつけるだけでよい | |
117 `put("compressedRemoteDGM", "key", data)` | |
118 * 伸長も *asClass()* した際に自動でされる | |
119 * コードの変更が抑えて圧縮・非圧縮が切り替えられる | |
175 | 120 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
121 # AliceのNAT越え |
179 | 122 * NATを越えたノード間通信は分散処理の課題である |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
123 * Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能 |
176 | 124 ![opt](./pictures/overNAT.svg){:width="70%"} |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
125 //図を訂正 |
175 | 126 |
127 # 複数のTopology Managerへの対応 | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
128 * この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない |
175 | 129 * 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理 |
130 * Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能 | |
131 ![opt](./pictures/somehostname2.svg){:width="50%"} | |
132 | |
176 | 133 |
134 # Aliceの問題点 - LocalDSMを複数立ち上げられない | |
135 * AliceではDSMを管理するクラスがstaticで書かれていたためLocal DSMを複数立ち上げることができない | |
136 * このstaticを抜くにはAliceのコード全体を大きく変更しなければならない | |
179 | 137 * 現状ではNAT越えのMeta Computationの追加が困難 |
176 | 138 * 複数インスタンスを立ち上げての分散プログラムのテストが書けない |
179 | 139 * 再設計の必要がある |
176 | 140 |
141 # Aliceの問題点 - APIシンタックスの分離 | |
179 | 142 * setKeyは記述場所が決まっておらず、待ち合わせを行っているCSの外からも呼べる |
143 * どのkeyを待っているのか不明なCSが生まれてしまう | |
176 | 144 * setKeyではkeyを動的に指定することができる |
145 * どんな処理を行っているかわかりづらい | |
146 * 対応するput箇所も修正しなければならない | |
175 | 147 |
176 | 148 # Aliceの問題点 - APIシンタックスの分離 |
149 * setKeyは全てのcreateが終わった最後に呼ばなければならない | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
150 * 以下のような書き方では実行時データを取り出すときにNullPointerExeptionになる |
176 | 151 ```java |
152 class ShowData extends CodeSegment{ | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
153 private Receiver input1; |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
154 private Receiver input2; |
176 | 155 |
156 public ShowData(int cnt) { | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
157 input1 = ids.create(CommandType.TAKE); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
158 input1.setKey("hoge"); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
159 input2 = ids.create(CommandType.TAKE); |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
160 input2.setKey("huga"); |
176 | 161 } |
162 } | |
163 ``` | |
175 | 164 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
165 # Aliceの問題点 - APIシンタックスの分離 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
166 //なぜそうなるのか |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
167 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
168 |
176 | 169 # Aliceの問題点 - 型が推測できない |
170 * Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない | |
171 * しかしReceiverからデータを取り出すにはasClass()で型を指定する必要がある | |
172 * 型をDSをputした箇所までコードをたどる必要がある | |
173 | |
174 # Aliceの問題点 - まとめ | |
175 * 以下の問題がAliceの信頼性・拡張性を下げている | |
176 * Local DSMを複数立ち上げられないため、Topology Managerの拡張やテストが困難 | |
177 * インプットAPIが分離しているためCSでどんな処理が行われているかわかりづらい | |
179 | 178 * setKeyの記述順序や型を気にしてプログラミングをしなくてはならない |
176 | 179 |
179 | 180 # Christie - 基本設計(1) |
176 | 181 * Javaで実装される |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
182 * 処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
183 * Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
184 ![opt](./pictures/ChristieClass.svg){:width="60%"} |
175 | 185 |
179 | 186 # Christie - 基本設計(2) |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
187 * CGM同士はThreadPoolを共有 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
188 * ThreadPool...CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
189 * ThreadPoolが増えると性能はあがらないため共有 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
190 * CGM同士はCGMのリストを共有 |
176 | 191 * メタ計算で全てのCGMにアクセス可能 |
192 ![opt](./pictures/ChristieClass.svg){:width="60%"} | |
193 | |
179 | 194 # Christie - 基本設計(2) DGMの複数立ち上げ |
176 | 195 * ChristieではCGMを2つ生成すればLocalDGMも2つ作られる |
179 | 196 * NAT越えなどの機能拡張に対応可能 |
176 | 197 * 複数のLocalDGM同士のやりとりは、Remoteへの接続と同じようにRemoteDGMを介してアクセスする |
179 | 198 * 分散プログラムのローカルでのテストが可能になる |
176 | 199 ![opt](./pictures/DGM.svg){:width="50%"} |
200 | |
179 | 201 # Christie - 基本設計(3) |
202 * CG を記述する際は Alice同様CodeGear.classを継承 | |
203 * CGは *void run(CodeGearManager cgm)* を持ち、run メソッド内に処理を記述 | |
204 * run内で新たなCGを作るためのAPIにはCGM経由で呼び出す | |
205 * このようにCGMを持ち運ぶ書き方はGearsOSに合わせてた書き方 | |
176 | 206 |
207 # Christie - アノテーションを用いたインプット記述 | |
208 * keyの指定にはJavaのアノテーションを用いる | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
209 * フィールドやメソッドに対して属性を付与できる |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
210 * Override、@SuppressWarningsなど |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
211 * コンパイル時にエラーを出せる |
176 | 212 * 独自アノテーションを定義できる |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
213 * RUNTIMEとかの指定 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
214 //例を入れる |
175 | 215 |
176 | 216 # Christie - アノテーションを用いたインプット記述 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
217 * InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
218 * RUNTIME |
176 | 219 * Takeの例 |
220 ```java | |
221 @Take(”count”) | |
222 public DataGear<Integer> count = new DataGear<>(); | |
223 ``` | |
224 * RemoteTakeの例 | |
225 ```java | |
226 @RemoteTake(dgmName="remote", key=”count”) | |
227 public DataGear<Integer> count = new DataGear<>(); | |
228 ``` | |
175 | 229 |
176 | 230 # Christie - アノテーションを用いたインプット記述 |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
231 * アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
232 //javassistの話入れる?→Classを1つもnewしてない状況じゃなきゃ使えない? |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
233 * 内部でどうなっているのか |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
234 * newしたあとsetupを行う |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
235 * RUNTIMEにしたためフィールドがnewされたあとでないとrefrectionAPIで取れない |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
236 |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
237 # Christie - アノテーションによるシンタックスの分離阻止 |
176 | 238 * アノテーションは必ずフィールドに付けなければならない |
239 * InputDGの生成とkeyの指定を一箇所に書ける | |
240 * アノテーションの内容はコンパイル時に決定される | |
241 * 動的なkey指定を防ぐ | |
175 | 242 |
176 | 243 # Christie - 型を指定しないデータ取り出し |
244 * InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる | |
245 * DataGearはJavaの総称型を用いて<>内に指定した型を受け取る | |
246 ```java | |
247 @Take(”count”) | |
248 public DataGear<Integer> count = new DataGear<>(); | |
249 ``` | |
175 | 250 |
176 | 251 # Christie - 型を指定しないデータ取り出し |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
252 * reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる |
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
253 * 型を判断できる |
176 | 254 * 宣言された型は内部で保存され、ノード間通信でも保たれる |
255 * AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる | |
256 ```java | |
257 public class GetData extends CodeGear{ @Take(”name”) | |
258 public DataGear<String> name = new DataGear<>(); | |
259 | |
260 @Override | |
261 protected void run(CodeGearManager cgm) { | |
262 System.out.println(”this name is : ” + name.getData()); | |
263 } | |
264 } | |
265 ``` | |
266 * 取得したDGが待ち合わせに指定した型と違う場合はエラーになる | |
180
5a0a11b54ab4
add slide comment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
179
diff
changeset
|
267 //実行時?コンパイル時? |
175 | 268 |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
269 # Christie - まとめ |
179 | 270 * CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった |
176 | 271 * アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした |
272 * 型の整合性を保証することで信頼性が向上した | |
175 | 273 |
176 | 274 # Christieと他フレームワークの比較 |
179 | 275 * Akka、Hazelcastと比較してChristieの特徴を述べる |
276 * Akka ...Scala/Java向け分散フレームワーク | |
277 * Hazelcast ...Java向け分散フレームワーク | |
175 | 278 |
176 | 279 # Christieと他フレームワークの比較 - Akka |
280 * アクターモデル | |
281 * アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデル | |
282 * アクターは固有のアドレス持つ | |
283 * ローカルアクターにもリモートアクターにもアドレス指定でメッセージを送受信 | |
284 * アクターはメールボックスというキューを持つ | |
285 * 受け取ったメッセージをパターンマッチで順次処理 | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
286 * パターンマッチにはScalaのcase classを用いられる |
179 | 287 ![opt](./pictures/Akka.svg){:width="70%"} |
175 | 288 |
176 | 289 # Christieと他フレームワークの比較 - Hazelcast |
290 * キーと値の1対1でデータを管理するインメモリ・データグリッド | |
291 * 複数のノードに分散させたデータを、仮想的な1つのメモリ空間に見せるモデル | |
292 * プログラマがサーバを意識せずに共有のタプルスペースに対してデータをget/put | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
293 * 共有のタプルスペースに書き込むとマルチキャストで全サーバにデータが送られる |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
294 ![opt](./pictures/Hazelcast.svg){:width="50%"} |
175 | 295 |
176 | 296 # Christieと他フレームワークの比較 - 設計思想 |
297 * AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している | |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
298 * Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
299 * 通常計算とメタ計算に分けているため複雑さを下げている |
175 | 300 |
176 | 301 # Christieと他フレームワークの比較 - 記述性 |
178
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
302 * アノテーションを使ったインプットの指定はAkkaやHazelcastにはない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
303 * 複数のインプットを待ち合わせして処理を行いたい場合 |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
304 * Akkaは待ち合わせ処理をプログラマが書かなければならない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
305 * Christieでは複数のインプットを記述でき待ち合わせ処理が必要ない |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
306 * データの圧縮通信を指定したい場合 |
074eb76a9184
add Akka/Hazelcast slide
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
177
diff
changeset
|
307 * Akka、Hazelcastでは圧縮メソッドが用意されているため、それを用いて記述する |
179 | 308 * ChristieではDGMkeyの名前を変えるだけでメソッド呼び出しの記述が要らないため少ない変更で拡張が可能 |
175 | 309 |
310 # まとめ | |
176 | 311 * AliceのプロトコルやMeta Computationを説明し、TopologyManagerを用いたNAT越えの手法を示した |
312 * Aliceの問題点を整理し、再設計の必要性を述べた | |
313 * LocalDGMの複数立ち上げを可能にし、テストや機能拡張がしやすい環境を整えた | |
314 * Christieではアノテーションを用いたAPIで信頼性の高い記述を実現した | |
179 | 315 * Christieを他のフレームワークと比較し、分散性を意識して記述できる特徴があることを示した |
175 | 316 |
176 | 317 # 今後の課題 |
318 * DataGearのメタレイヤーへの移行 | |
319 * TopologyManagerの実装 | |
320 * 実用性の検証 | |
321 * Jungleとの統合 | |
322 * GearsOSへの移行 | |
175 | 323 |
179 | 324 |
175 | 325 <style type="text/css"> |
326 <!-- | |
327 *{ | |
328 font:nomal 100% 'PT Sans'; | |
329 } | |
330 | |
331 ul > li{ | |
332 list-style-type:disc; | |
333 } | |
334 | |
335 .slide h1{ | |
336 text-align:left; | |
337 color:#777777; | |
338 font:bold 40px/1.13 'PT Sans', sans-serif; | |
339 margin-bottom: 50px; | |
340 } | |
341 | |
342 div#slide1 h1{ | |
343 text-align:left; | |
344 color:#777777; | |
345 font:bold 60px 'PT Sans', sans-serif; | |
346 margin-bottom: 50px; | |
347 } | |
348 | |
349 pre > code{ | |
350 font-family:'Droid Sans Mono', 'Courier New', monospace; | |
351 } | |
352 | |
353 img[alt="opt"]{ | |
354 display: block; | |
355 margin-left: auto; | |
356 margin-right: auto; | |
357 } | |
358 | |
359 img[alt="right"]{ | |
360 margin-right: 0; | |
361 } | |
362 | |
363 table { | |
364 margin-left: auto; | |
365 margin-right: auto; | |
366 } | |
367 | |
368 th { | |
369 font-size: 120%; | |
370 } | |
371 --> | |
372 </style> |