comparison slide/prosym.html @ 24:a263efdfdab5 default tip

Revise last on 5/29
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Wed, 29 May 2019 23:22:31 +0900
parents 8a3b1147329e
children
comparison
equal deleted inserted replaced
23:8a3b1147329e 24:a263efdfdab5
324 <div class='slide'> 324 <div class='slide'>
325 <!-- _S9SLIDE_ --> 325 <!-- _S9SLIDE_ -->
326 <h2 id="ブロックチェーン">ブロックチェーン</h2> 326 <h2 id="ブロックチェーン">ブロックチェーン</h2>
327 <ul> 327 <ul>
328 <li>ネットワーク構築方式の一つである。データ情報をまとめたものをブロックと呼び、ブロックが連鎖的につながるっている形となる。</li> 328 <li>ネットワーク構築方式の一つである。データ情報をまとめたものをブロックと呼び、ブロックが連鎖的につながるっている形となる。</li>
329 <li>ノード一つにつき一つのブロックを持ち合わせるが、その間でデータの差異が生じた際に他のノードの総意によって選択し、差異の解消を行う。</li> 329 <li>ノードがそれぞれブロックを持つ、その間でデータの差異が生じた際に他のノードの総意によって選択し、差異の解消を行う。</li>
330 <li>ブロックチェーンはP2P(Peer to Peer)の形にてネットワーク間が動作している。つまり、ブロックチェーンにはサーバー、クライアントの区別がなく全てのノードが対等な関係にある。</li> 330 <li>ブロックチェーンはP2P(Peer to Peer)の形にてネットワーク間が動作している。つまり、ブロックチェーンにはサーバー、クライアントの区別がなく全てのノードが対等な関係にある。</li>
331 </ul> 331 </ul>
332 332
333 333
334 334
336 336
337 <div class='slide'> 337 <div class='slide'>
338 <!-- _S9SLIDE_ --> 338 <!-- _S9SLIDE_ -->
339 <h2 id="ブロックチェーンのトランザクション">ブロックチェーンのトランザクション</h2> 339 <h2 id="ブロックチェーンのトランザクション">ブロックチェーンのトランザクション</h2>
340 <ul> 340 <ul>
341 <li>ブロックチェーンにおけるブロックは複数のトランザクションをまとめたものである。ブロックは基本的に以下の要素によって構成される。 341 <li>ブロックは基本的に以下の要素によって構成される。
342 <ul> 342 <ul>
343 <li>BlockHeader 343 <li>BlockHeader
344 <ul> 344 <ul>
345 <li>previous block 345 <li>previous block
346 <ul> 346 <ul>
429 <!-- _S9SLIDE_ --> 429 <!-- _S9SLIDE_ -->
430 <h2 id="コンセンサスアルゴリズム">コンセンサスアルゴリズム</h2> 430 <h2 id="コンセンサスアルゴリズム">コンセンサスアルゴリズム</h2>
431 <ul> 431 <ul>
432 <li>fork 432 <li>fork
433 <ul> 433 <ul>
434 <li>ブロック生成後にブロードキャストを行うと、ブロック高の同じもしくは高いブロックチェーンにたどり着く状態があり、異なるブロックを持った二つのブロックチェーンのうちどちらかを破棄する必要がある。</li> 434 <li>ブロック生成を行う過程で、異なるブロックを持った二つのブロックチェーンが生成されてしまうことがある。そのうちどちらかを破棄する必要が生じ、この状態をforkと呼ぶ。</li>
435 </ul> 435 </ul>
436 </li> 436 </li>
437 <li>fork状態を解消するために用いられるのがコンセンサスアルゴリズムである。</li> 437 <li>fork状態を解消するために用いられるのがコンセンサスアルゴリズムである。</li>
438 <li>ブロックチェーンはパブリックブロックチェーンとコンソーシアムブロックチェーンの場合によってコンセンサスアルゴリズムが変わる。 438 <li>ブロックチェーンはパブリックブロックチェーンとコンソーシアムブロックチェーンの場合によってコンセンサスアルゴリズムが変わる。
439 <ul> 439 <ul>
450 </li> 450 </li>
451 </ul> 451 </ul>
452 </li> 452 </li>
453 </ul> 453 </ul>
454 454
455 455 <!--
456 456 ## Proof of Work
457 </div> 457 - Proof of Workは次のような問題が生じている場合にもコンセンサスを取ることができる。
458 458 - プロセス毎の処理速度が違う。つまりメッセージの返信が遅い場合がある。
459 <div class='slide'> 459 - 通信にどれだけの時間がかかるか分からず、その途中でメッセージが途切れる場合がある
460 <!-- _S9SLIDE_ --> 460 - プロセスは停止する可能性がある。また復旧する場合もある。
461 <h2 id="proof-of-work">Proof of Work</h2> 461 - 悪意ある情報を他のノードが送信する可能性がある。
462 <ul> 462 - Proof of Workに必要なパラメーターは次のとおりである。
463 <li>Proof of Workは次のような問題が生じている場合にもコンセンサスを取ることができる。 463 - nonce
464 <ul> 464 - ブロックのパラメータに含まれる。
465 <li>プロセス毎の処理速度が違う。つまりメッセージの返信が遅い場合がある。</li> 465 - dificulty
466 <li>通信にどれだけの時間がかかるか分からず、その途中でメッセージが途切れる場合がある</li> 466 - Proof of Workの難しさ、正確には一つのブロックを生成する時間の調整。
467 <li>プロセスは停止する可能性がある。また復旧する場合もある。</li> 467
468 <li>悪意ある情報を他のノードが送信する可能性がある。</li> 468 ## Proof of Workのブロック生成手順
469 </ul> 469 - 1, ブロックとnonceを加えたものをハッシュ化する。この際、nonceによって、ブロックのハッシュは全く異なるものとなる。
470 </li> 470 - 2, ハッシュ化したブロックの先頭から数えた0ビットの数がdifficultyより多ければ、そのブロックにnonceを埋め込み、ブロックを作る。
471 <li>Proof of Workに必要なパラメーターは次のとおりである。 471 - 3, 2の条件に当てはまらなければnonceに1を足して1からやり直す。
472 <ul>
473 <li>nonce
474 <ul>
475 <li>ブロックのパラメータに含まれる。</li>
476 </ul>
477 </li>
478 <li>dificulty
479 <ul>
480 <li>Proof of Workの難しさ、正確には一つのブロックを生成する時間の調整。</li>
481 </ul>
482 </li>
483 </ul>
484 </li>
485 </ul>
486
487
488
489 </div>
490
491 <div class='slide'>
492 <!-- _S9SLIDE_ -->
493 <h2 id="proof-of-workのブロック生成手順">Proof of Workのブロック生成手順</h2>
494 <ul>
495 <li>1, ブロックとnonceを加えたものをハッシュ化する。この際、nonceによって、ブロックのハッシュは全く異なるものとなる。</li>
496 <li>2, ハッシュ化したブロックの先頭から数えた0ビットの数がdifficultyより多ければ、そのブロックにnonceを埋め込み、ブロックを作る。</li>
497 <li>3, 2の条件に当てはまらなければnonceに1を足して1からやり直す。</li>
498 </ul>
499 472
500 <div style="text-align: center;"> 473 <div style="text-align: center;">
501  <img src="../paper/images/proof-of-work.svg" alt="MetaGear" width="600" /> 474  <img src="../paper/images/proof-of-work.svg" alt="MetaGear" width="600">
502 </div> 475 </div>
503 476
504 477 ## Proof of workの欠点
505 478 - CPUのリソースを使用する
506 </div> 479 - Transactionが確定するのに時間がかかる。
507 480
508 <div class='slide'> 481 -->
509 <!-- _S9SLIDE_ -->
510 <h2 id="proof-of-workの欠点">Proof of workの欠点</h2>
511 <ul>
512 <li>CPUのリソースを使用する</li>
513 <li>Transactionが確定するのに時間がかかる。</li>
514 </ul>
515 482
516 483
517 484
518 </div> 485 </div>
519 486
520 <div class='slide'> 487 <div class='slide'>
521 <!-- _S9SLIDE_ --> 488 <!-- _S9SLIDE_ -->
522 <h2 id="paxos">Paxos</h2> 489 <h2 id="paxos">Paxos</h2>
523 <ul> 490 <ul>
524 <li>Paxosはノードの多数決によってコンセンサスをとるアルゴリズムである。</li> 491 <li>Paxosはノードの多数決によってコンセンサスをとる分散合意アルゴリズムである。</li>
492 <li>Paxosは3つの役割ノードがある。
493 <ul>
494 <li>proposer
495 <ul>
496 <li>値を提案するノード。</li>
497 </ul>
498 </li>
499 <li>accepter
500 <ul>
501 <li>値を決めるノード。</li>
502 </ul>
503 </li>
504 <li>lerner
505 <ul>
506 <li>accepterから値を集計し、過半数以上のaccepterが持っている値を決める。</li>
507 </ul>
508 </li>
509 </ul>
510 </li>
511 </ul>
512
513
514
515 </div>
516
517 <div class='slide'>
518 <!-- _S9SLIDE_ -->
519 <h2 id="paxosの利点特徴">Paxosの利点、特徴</h2>
520 <ul>
525 <li>Paxosは以下のような問題があっても値を一意に決めることができる。 521 <li>Paxosは以下のような問題があっても値を一意に決めることができる。
526 <ul> 522 <ul>
527 <li>1,プロセス毎に処理の速度が違う。つまりメッセージの返信が遅い可能性がある。</li> 523 <li>1,プロセス毎に処理の速度が違う。つまりメッセージの返信が遅い可能性がある。</li>
528 <li>2,通信にどれだけの時間がかかるかわからず、その途中でメッセージが失われる可能性がある。</li> 524 <li>2,通信にどれだけの時間がかかるかわからず、その途中でメッセージが失われる可能性がある。</li>
529 <li>3,プロセスは停止する可能性もある。</li> 525 <li>3,プロセスは停止する可能性もある。</li>
530 </ul> 526 </ul>
531 </li> 527 </li>
532 </ul> 528 <li>従来のコンセンサスアルゴリズム(Proof of Workなど)と比較し、
533
534
535
536 </div>
537
538 <div class='slide'>
539 <!-- _S9SLIDE_ -->
540 <h2 id="paxosの役割ノード">Paxosの役割ノード</h2>
541 <ul>
542 <li>Paxosは3つの役割ノードがある。
543 <ul>
544 <li>proposer
545 <ul>
546 <li>値を提案するノード。</li>
547 </ul>
548 </li>
549 <li>accepter
550 <ul>
551 <li>値を決めるノード。</li>
552 </ul>
553 </li>
554 <li>lerner
555 <ul>
556 <li>accepterから値を集計し、過半数以上のaccepterが持っている値を決める。</li>
557 </ul>
558 </li>
559 </ul>
560 </li>
561 </ul>
562
563
564
565 </div>
566
567 <div class='slide'>
568 <!-- _S9SLIDE_ -->
569 <h2 id="paxosの役割定義">Paxosの役割定義</h2>
570 <ul>
571 <li>提案
572 <ul>
573 <li>異なる提案ごとにユニークな提案番号と値からなる。提案番号とは、異なる提案を見分けるための識別子であり、単調増加である。</li>
574 </ul>
575 </li>
576 <li>値(提案)がacceptされる
577 <ul>
578 <li>accepterによって値(提案)が決まること。</li>
579 </ul>
580 </li>
581 <li>値(提案)が選択(chosen)される
582 <ul>
583 <li>過半数以上のacceptorによって、値がacceptされた場合、それを値(提案)が選択されたと言う。</li>
584 </ul>
585 </li>
586 </ul>
587
588
589
590 </div>
591
592 <div class='slide'>
593 <!-- _S9SLIDE_ -->
594 <h2 id="paxosのアルゴリズム">paxosのアルゴリズム</h2>
595 <ul>
596 <li>paxosのアルゴリズムは2フューズあり、一つ目のフェーズprepare-promiseと二つ目のフェーズaccept-acceptedの二つに区分される。</li>
597 </ul>
598
599
600
601 </div>
602
603 <div class='slide'>
604 <!-- _S9SLIDE_ -->
605 <h2 id="paxosのアルゴリズム-prepare-promise">paxosのアルゴリズム prepare-promise</h2>
606 <ul>
607 <li>(言葉での説明記入?)</li>
608 </ul>
609 <div style="text-align: center;">
610  <img src="../paper/images/prepare-promise.svg" alt="MetaGear" width="600" />
611 </div>
612
613
614
615 </div>
616
617 <div class='slide'>
618 <!-- _S9SLIDE_ -->
619 <h2 id="paxosのアルゴリズム-accept-accepted">paxosのアルゴリズム accept-accepted</h2>
620 <ul>
621 <li>(1)proposerは過半数のacceptorから返事が来たのなら、次の提案をaccepterに送る。これをacceptリクエストという。
622 <ul>
623 <li>(a)もし、約束のみ帰って来ているのならば、任意の値vをprepareリクエストで送った提案に設定する。</li>
624 <li>(b)もし、acceptされた提案が帰って来たら、その中で最大の提案番号v’をprepareリクエストで送った提案の値として設定する。</li>
625 </ul>
626 </li>
627 <li>(2)acceptorはacceptリクエストが来た場合、Promiseした提案よりもacceptリクエストで提案された番号が低ければ、その提案を拒否する。それ以外の場合、acceptする。</li>
628 </ul>
629 <div style="text-align: center;">
630  <img src="../paper/images/accept-accepted.svg" alt="MetaGear" width="600" />
631 </div>
632
633
634
635 </div>
636
637 <div class='slide'>
638 <!-- _S9SLIDE_ -->
639 <h2 id="paxosとproof-of-workの比較">PaxosとProof of Workの比較</h2>
640 <ul>
641 <li>Proof of Workと比較しメッセージ通信量と耐障害性のトレードオフになっている。</li>
642 <li>Paxosでコンセンサスを取る際、Proof of Workと比較して次のようなメリットがある。
643 <ul> 529 <ul>
644 <li>CPUにリソースを消費しない。</li> 530 <li>CPUにリソースを消費しない。</li>
645 <li>Transactionの確定に時間がかからない。</li> 531 <li>Transactionの確定に時間がかからない。</li>
646 </ul> 532 </ul>
647 </li> 533 </li>
648 <li>Paxos自体がリーダー選出に向いているアルゴリズムである。そのため、リーダーを決定し、そのノードのブロックチェーンの一貫性のみをかんがえることができる。</li> 534 <li>アルゴリズムの形式上、リーダーのノードの一貫性のみを考えることで構成しやすい。</li>
535 </ul>
536
537
538
539 </div>
540
541 <div class='slide'>
542 <!-- _S9SLIDE_ -->
543 <h2 id="paxosの役割定義">Paxosの役割定義</h2>
544 <ul>
545 <li>提案
546 <ul>
547 <li>異なる提案ごとにユニークな提案番号と値からなる。提案番号とは、異なる提案を見分けるための識別子であり、単調増加である。</li>
548 </ul>
549 </li>
550 <li>値(提案)がacceptされる
551 <ul>
552 <li>accepterによって値(提案)が決まること。</li>
553 </ul>
554 </li>
555 <li>値(提案)が選択(chosen)される
556 <ul>
557 <li>過半数以上のacceptorによって、値がacceptされた場合、それを値(提案)が選択されたと言う。</li>
558 </ul>
559 </li>
560 </ul>
561
562
563
564 </div>
565
566 <div class='slide'>
567 <!-- _S9SLIDE_ -->
568 <h2 id="paxosのアルゴリズム">paxosのアルゴリズム</h2>
569 <ul>
570 <li>paxosのアルゴリズムは2フューズあり、一つ目のフェーズprepare-promiseと二つ目のフェーズaccept-acceptedの二つに区分される。</li>
571 <li>単純化としてproposerの数を2、accepterの数を3、lernerの数を1とする。</li>
572 </ul>
573 <div style="text-align: center;">
574  <img src="../paper/images/paxos2.svg" alt="MetaGear" width="900" />
575 </div>
576
577
578
579 </div>
580
581 <div class='slide'>
582 <!-- _S9SLIDE_ -->
583 <h2 id="paxosのアルゴリズム-prepare-promise">paxosのアルゴリズム prepare-promise</h2>
584 <ul>
585 <li>paxosのアルゴリズムはprepare-promiseとaccepter-acceptedの2フェーズに分けられる。</li>
586 <li>(1)proposerは提案番号nを設定した提案を過半数以上のaccepterに送る。これをprepareリクエストと呼ぶ。</li>
587 <li>(2)それぞれのaccepterは各proposerからprepareリクエストが来たら
588 <ul>
589 <li>(a)もし、以前に送られたprepareリクエストの提案番号より、今送られて来たprepareリクエストの方が大きければ、それ以下の提案番号の提案を拒否するという約束を返す。この状態をpromiseしたという。</li>
590 <li>(b)もし値がすでにacceptされていたら、すでにacceptされているという報告を返す。</li>
591 </ul>
592 </li>
593 </ul>
594
595
596
597 </div>
598
599 <div class='slide'>
600 <!-- _S9SLIDE_ -->
601 <h2 id="paxosのアルゴリズム-accepter-accepted">paxosのアルゴリズム accepter-accepted</h2>
602 <ul>
603 <li>(1))proposerは過半数のacceptorから返事が来たのなら、次の提案をaccepterに送る。これをacceptリクエストという。
604 <ul>
605 <li>(a)もし、accepterがpromiseされた状態のままであるならaccepterは提案を(acceptリクエストと同様)を選択し、lernerへacceptされた提案を報告する。</li>
606 <li>(b)もし、acceptされた提案が帰って来たなら、その中で最大の提案番号を持つ提案をprepareリクエストで送った提案とする。</li>
607 </ul>
608 </li>
609 <li>(2)acceptorはacceptリクエストが来た場合、Promiseした提案よりもacceptリクエストで提案された番号が低ければ、その提案を拒否する。それ以外の場合、acceptする。</li>
649 </ul> 610 </ul>
650 611
651 612
652 613
653 </div> 614 </div>
656 <!-- _S9SLIDE_ --> 617 <!-- _S9SLIDE_ -->
657 <h2 id="christieにおけるブロックチェーンの実装の利点">Christieにおけるブロックチェーンの実装の利点</h2> 618 <h2 id="christieにおけるブロックチェーンの実装の利点">Christieにおけるブロックチェーンの実装の利点</h2>
658 <ul> 619 <ul>
659 <li>データの取り出しが簡単。ChristieはDataGearという単位でデータを保持する。そのためブロックやトランザクションはDataGearに包めばいいため、どう送るか考えなくて済む。</li> 620 <li>データの取り出しが簡単。ChristieはDataGearという単位でデータを保持する。そのためブロックやトランザクションはDataGearに包めばいいため、どう送るか考えなくて済む。</li>
660 <li>TopologyManagerでのテストが便利。dotファイルがあれば、TopologyManagerが任意の形でTopologyを作れる。そのため、ノードの配置については理想の環境を作れるため、理想のテスト環境を作ることができる。</li> 621 <li>TopologyManagerでのテストが便利。dotファイルがあれば、TopologyManagerが任意の形でTopologyを作れる。そのため、ノードの配置については理想の環境を作れるため、理想のテスト環境を作ることができる。</li>
661 <li>機能ごとにファイルが実装できるため、見通しが良い。ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する。そのため自然に機能ごとにファイルを作るため、見通しがよくなる。</li> 622 <li>機能ごとにファイルが実装できるため、見通しが良い。Christieは関数が終わるとsetupによって別の関数に移動するため分かりやすい実装が行える。</li>
662 </ul> 623 </ul>
663 624
664 625
665 626
666 </div> 627 </div>
667 628
668 <div class='slide'> 629 <div class='slide'>
669 <!-- _S9SLIDE_ --> 630 <!-- _S9SLIDE_ -->
670 <h2 id="christieにおけるブロックチェーンの実装の欠点">Christieにおけるブロックチェーンの実装の欠点</h2> 631 <h2 id="christieにおけるブロックチェーンの実装の欠点">Christieにおけるブロックチェーンの実装の欠点</h2>
671 <ul> 632 <ul>
672 <li>デバックが難しい。cgm.setupでCodeGearが実行されるが、keyの待ち合わせで止まり、どこのCGで止まっているのか分からないことが多かった。例えばputするkeyのスペルミスでコードの待ち合わせが起こり、CGが実行されず、エラーなども表示されずにwaitすることがある。その時に、どこで止まっているか特定するのが難しい。</li> 633 <li>デバックが難しい。cgm.setupでCodeGearが実行されるが、keyの待ち合わせで止まり、どこのCGで止まっているのか判断できなくなりやすい。例として、putするkeyのスペルミスでコードの待ち合わせが起こり、CGが実行されず、エラーなども表示されずにwaitすることがあり、誤っている部分が見つけづらい。</li>
673 <li>Takefrom,PeekFromの使い方が難しい。TakeFrom,PeekFromは引数でDGMnameを指定する。しかし、DGMの名前を静的に与えるよりも、動的に与えたい場合が多かった。</li>
674 <li>Takeの待ち合わせでCGが実行されない。2つのCGで同じ変数をTakeしようとすると、setupされた時点で変数がロックされる。この時、片方のCGはDGがもう全て揃っているのに、全ての変数が揃っていないもう片方のCGに同名の変数がロックされ、実行されない場合がある。</li>
675 </ul> 634 </ul>
676 635
677 <!-- 636 <!--
637 - Takeの待ち合わせでCGが実行されない。2つのCGで同じ変数をTakeしようとすると、setupされた時点で変数がロックされる。この時、片方のCGはDGがもう全て揃っているのに、全ての変数が揃っていないもう片方のCGに同名の変数がロックされ、実行されない場合がある。
678 (ロックはおかしい) 638 (ロックはおかしい)
639 - Takefrom,PeekFromの使い方が難しい。TakeFrom,PeekFromは引数でDGMnameを指定する。しかし、DGMの名前を静的に与えるよりも、動的に与えたい場合が多かった。
679 --> 640 -->
680 641
681 642
682 643
683 </div> 644 </div>
741 702
742 </div> 703 </div>
743 704
744 <div class='slide'> 705 <div class='slide'>
745 <!-- _S9SLIDE_ --> 706 <!-- _S9SLIDE_ -->
746 <h2 id="実際にpaxosを動かした際の解説">実際にPaxosを動かした際の解説</h2>
747 <ul>
748 <li>単純化としてproposerの数えを2、accepterの数を3、lernerの数を1とする。</li>
749 </ul>
750 <div style="text-align: center;">
751  <img src="../paper/images/paxos1.svg" alt="MetaGear" width="900" />
752 </div>
753
754
755
756 </div>
757
758 <div class='slide'>
759 <!-- _S9SLIDE_ -->
760 <h2 id="まとめ">まとめ</h2> 707 <h2 id="まとめ">まとめ</h2>
761 <ul> 708 <ul>
762 <li>Paxosの動作は確認できた。トランザクションの速度がノード数にどのように影響されるか調査する必要がある。</li> 709 <li>Paxosの動作は確認できた。トランザクションの速度がノード数にどのように影響されるか調査する必要がある。</li>
763 <li>ChristieのTopology Managerは実験するノードの設定を行う集中制度ノードであり、ブロックチェーンとの相性は良くないが、分散ファイルシステムなどの用途の場合、このような手法の方がノードの管理が可能な利点がある。</li> 710 <li>ChristieのTopology Managerは実験するノードの設定を行う集中制度ノードであり、ブロックチェーンとの相性は良くないが、分散ファイルシステムなどの用途の場合、このような手法の方がノードの管理が可能な利点がある。</li>
764 <li>現在、ChristieではBlock,Transaction,Hashの生成、署名、Proof of Workのためのクラスは作られている。しかし、Transactionに置いてまだファイルのデータを入れる機能がない。</li> 711 <li>現在、ChristieではBlock,Transaction,Hashの生成、署名、Proof of Workのためのクラスは作られている。しかし、Transactionに置いてまだファイルのデータを入れる機能がない。</li>