Mercurial > hg > Papers > 2019 > aka-thesis
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> |