comparison slide/slide.html @ 13:117794d50054

update
author akahori
date Tue, 19 Feb 2019 21:49:55 +0900
parents 2e843f65ac5f
children 22e7e5667b99
comparison
equal deleted inserted replaced
12:2e843f65ac5f 13:117794d50054
84 84
85 <div class='slide '> 85 <div class='slide '>
86 <!-- === begin markdown block === 86 <!-- === begin markdown block ===
87 87
88 generated by markdown/1.2.0 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17] 88 generated by markdown/1.2.0 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]
89 on 2019-02-19 10:39:13 +0900 with Markdown engine kramdown (1.17.0) 89 on 2019-02-19 17:49:17 +0900 with Markdown engine kramdown (1.17.0)
90 using options {} 90 using options {}
91 --> 91 -->
92 92
93 <!-- _S9SLIDE_ --> 93 <!-- _S9SLIDE_ -->
94 <h1 id="section">目次</h1> 94 <h1 id="section">目次</h1>
95 95
96 <ul> 96 <ul>
97 <li>OS単位での分散システム</li> 97 <li>研究目的</li>
98 <li>ブロックチェーンとは</li> 98 <li>ブロックチェーンとは</li>
99 <li>ブロックチェーンのfork</li> 99 <li>ブロックチェーンのfork</li>
100 <li>コンセンサスアルゴリズム 100 <li>コンセンサスアルゴリズム
101 <ul> 101 <ul>
102 <li>Proof of Work と Paxos</li> 102 <li>Proof of Work と Paxos</li>
110 110
111 111
112 </div> 112 </div>
113 <div class='slide '> 113 <div class='slide '>
114 <!-- _S9SLIDE_ --> 114 <!-- _S9SLIDE_ -->
115 <h1 id="os">OS単位での分散システム</h1> 115 <h1 id="os">研究目的 OS単位での分散システム</h1>
116 116
117 <ul> 117 <ul>
118 <li>コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる.</li> 118 <li>コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる.</li>
119 <li>ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である.</li> 119 <li>ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である.</li>
120 <li>当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.</li> 120 <li>当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.</li>
209 209
210 <ul> 210 <ul>
211 <li>パブリックブロックチェーンのコンセンサスアルゴリズムは, 「ある程度ブロックの差がついたら, 長い方を正とする」というもの.</li> 211 <li>パブリックブロックチェーンのコンセンサスアルゴリズムは, 「ある程度ブロックの差がついたら, 長い方を正とする」というもの.</li>
212 <li>これだけだと, 裏切り者が適当なブロックをガシガシ積めば攻撃できるのでレベル4にはなれない. これを大幅に補強したのがProof of Work.</li> 212 <li>これだけだと, 裏切り者が適当なブロックをガシガシ積めば攻撃できるのでレベル4にはなれない. これを大幅に補強したのがProof of Work.</li>
213 <li>Proof of Workは, 簡単に言えばブロックのHashに条件をつけるアルゴリズム. つまり, 新しいブロックを作るのが難しくなる.</li> 213 <li>Proof of Workは, 簡単に言えばブロックのHashに条件をつけるアルゴリズム. つまり, 新しいブロックを作るのが難しくなる.</li>
214 <li>新しいブロックを作るのが難しいので, みんなで協力して作ったチェーンが自然に勝つ. また, 改ざんも難しくなる. ただし, トランザクションの確定が遅い.</li> 214 <li>新しいブロックを作るのが難しいので, みんなで協力して作ったチェーンが自然に勝つ. また, 改ざんも難しい. ただし, トランザクションの確定が遅い.</li>
215 </ul> 215 </ul>
216 216
217 217
218 </div> 218 </div>
219 <div class='slide '> 219 <div class='slide '>
228 228
229 229
230 </div> 230 </div>
231 <div class='slide '> 231 <div class='slide '>
232 <!-- _S9SLIDE_ --> 232 <!-- _S9SLIDE_ -->
233 <h1 id="paxos">Paxos</h1>
234
235 <ul>
236 <li>Lamport先生が「故障モデルレベル3での合意が不可能なのを証明してやる」と言って証明の途中で逆に編み出してしまったらしいアルゴリズム.</li>
237 <li>レベル3のアルゴリズムの基礎となっている.</li>
238 <li>proposerが値を提案し, acceptorが決め, Learnerが集計し, 多数決を取って決まった値を保持.</li>
239 </ul>
240
241
242 </div>
243 <div class='slide '>
244 <!-- _S9SLIDE_ -->
245 <h1 id="paxos-1">Paxos</h1>
246
247 <p>Paxosアルゴリズムに入る前の用語説明</p>
248 <dl>
249 <dt>提案</dt>
250 <dd>提案は, 異なる提案ごとにユニークな提案番号と値からなる. 提案番号とは, 異なる提案を見分けるための識別子であり, 単調増加する. 値は一意に決まってほしいデータである.</dd>
251 <dt>値(提案)がacceptされる</dt>
252 <dd>acceptorによって値(提案)が決まること.</dd>
253 <dt>値(提案)が選択(chosen)される</dt>
254 <dd>過半数以上のacceptorによって, 値(提案)がacceptされた場合, それを値(提案)が選択されたと言う.</dd>
255 </dl>
256
257
258 </div>
259 <div class='slide '>
260 <!-- _S9SLIDE_ -->
261 <h1 id="paxos-2">Paxos</h1>
262
263 <p>Paxosは2つのフェーズで動作する. 1つ目のフェーズ, prepare-promiseは次のような手順で動作する.</p>
264
265 <ul>
266 <li>proposerは提案番号nを設定した提案を過半数以上のacceptorに送る. これをprepareリクエストという.</li>
267 <li>acceptorはprepareリクエストが来たら次の動作をする.
268 <ul>
269 <li>もし, 以前に送られたprepareリクエストの提案番号より, 今送られてきたprepareリクエストの提案番号のほうが大きければ, それ以下の提案番号の提案を拒否するという約束を返す. この状態をPromiseしたという.</li>
270 <li>もし, 値がすでにacceptされていれば, accpetされた提案を返す.</li>
271 </ul>
272 </li>
273 </ul>
274
275
276 </div>
277 <div class='slide '>
278 <!-- _S9SLIDE_ -->
279 <h1 id="paxos-3">Paxos</h1>
280
281 <div style="text-align: center;">
282 <img src="./images/prepare-promise.svg" alt="blockchain" width="1000" height="500" />
283 </div>
284
285
286 </div>
287 <div class='slide '>
288 <!-- _S9SLIDE_ -->
289 <h1 id="paxos-4">Paxos</h1>
290
291 <p>2つ目のフェーズ, accept-acceptedは次のような手順で動作する.</p>
292
293 <ul>
294 <li>proposerは過半数のacceptorから返信が来たならば, 次の提案をacceptorに送る. これをacceptリクエストという.
295 <ul>
296 <li>もし, 約束のみが返ってきているならば, 任意の値vをprepareリクエストで送った提案に設定する.</li>
297 <li>もし, acceptされた提案が返ってきたら, その中で最大の提案番号を持つ提案の値v’をprepareリクエストで送った提案の値として設定する.</li>
298 </ul>
299 </li>
300 <li>acceptorはacceptリクエストが来た場合, Promiseした提案よりもacceptリクエストで提案された提案番号が低ければ, その提案を拒否する. それ以外の場合はacceptする.</li>
301 </ul>
302
303
304 </div>
305 <div class='slide '>
306 <!-- _S9SLIDE_ -->
307 <h1 id="paxos-5">Paxos</h1>
308
309 <div style="text-align: center;">
310 <img src="./images/accept-accepted.svg" alt="blockchain" width="1000" height="500" />
311 </div>
312
313
314 </div>
315 <div class='slide '>
316 <!-- _S9SLIDE_ -->
317 <h1 id="paxos-6">Paxos</h1>
318 <p>とりあえず, このアルゴリズムで値が一意に決まる.</p>
319
320
321 </div>
322 <div class='slide '>
323 <!-- _S9SLIDE_ -->
233 <h1 id="christie">Christieとは</h1> 324 <h1 id="christie">Christieとは</h1>
234 325
235 <ul> 326 <ul>
236 <li>研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.</li> 327 <li>研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.</li>
237 <li>Continued based C(CbC)と似た書き方が可能.</li> 328 <li>Continued based C(CbC)と似た書き方が可能.</li>
238 <li>まだAliceから引き継いでない機能でTopologyManagerというものがあるので, それも実装.</li> 329 <li>まだAliceから引き継いでない機能でTopologyManagerというものがある. これは, Topologyを構成するための機能.</li>
330 <li>簡単に言えば, ノード間の配線をしてくれる. 分散環境上で実験を行いたい場合に便利なため, これを実装してからPaxosを実装した.</li>
239 </ul> 331 </ul>
240 332
241 333
242 </div> 334 </div>
243 <div class='slide '> 335 <div class='slide '>
246 338
247 <ul> 339 <ul>
248 <li>TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.</li> 340 <li>TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.</li>
249 <li>TopologyManagerは静的Topologyと動的Topologyを作れる.</li> 341 <li>TopologyManagerは静的Topologyと動的Topologyを作れる.</li>
250 <li>静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li> 342 <li>静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li>
251 <li>動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していません.</li> 343 <li>動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していない.</li>
252 </ul> 344 </ul>
253 345
254 346
255 </div> 347 </div>
256 <div class='slide '> 348 <div class='slide '>
259 351
260 <ul> 352 <ul>
261 <li>ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.</li> 353 <li>ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.</li>
262 <li>評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い.</li> 354 <li>評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い.</li>
263 <li>今回は単純化のために, 整数でコンセンサスを取る.</li> 355 <li>今回は単純化のために, 整数でコンセンサスを取る.</li>
264 </ul> 356 <li>また, ノードはproposerが2つ, acceptorが3つ, learnerが1つという構成で実験する.</li>
265 357 </ul>
266 358
267 </div> 359
268 <div class='slide '> 360 </div>
269 <!-- _S9SLIDE_ --> 361 <div class='slide '>
270 <h1 id="section-7">実験1</h1> 362 <!-- _S9SLIDE_ -->
271 363 <h1 id="paxos1">Paxos実験1</h1>
272 364
273 </div> 365 <div style="text-align: center;">
274 <div class='slide '> 366 <img src="./images/paxos1.svg" alt="blockchain" width="1000" height="800" />
275 <!-- _S9SLIDE_ --> 367 </div>
276 <h1 id="section-8">実験2</h1> 368
277 369
278 370 </div>
279 </div> 371 <div class='slide '>
280 <div class='slide '> 372 <!-- _S9SLIDE_ -->
281 <!-- _S9SLIDE_ --> 373 <h1 id="paxos2">Paxos実験2</h1>
282 <h1 id="section-9">実験3</h1> 374
283 375 <div style="text-align: center;">
284 376 <img src="./images/paxos2.svg" alt="blockchain" width="1000" height="1000" />
285 </div> 377 </div>
286 <div class='slide '> 378
287 <!-- _S9SLIDE_ --> 379
288 <h1 id="section-10">まとめ</h1> 380 </div>
381 <div class='slide '>
382 <!-- _S9SLIDE_ -->
383 <h1 id="paxos3">Paxos実験3</h1>
384
385 <div style="text-align: center;">
386 <img src="./images/paxos3.svg" alt="blockchain" width="1000" height="1000" />
387 </div>
388
389
390 </div>
391 <div class='slide '>
392 <!-- _S9SLIDE_ -->
393 <h1 id="section-7">まとめ</h1>
289 394
290 <ul> 395 <ul>
291 <li>コンセンサスアルゴリズムのPaxosを実装しました.</li> 396 <li>コンセンサスアルゴリズムのPaxosを実装しました.</li>
292 <li>ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません.</li> 397 <li>ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません.</li>
293 <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます.</li> 398 <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます.</li>