view slide/slide.html @ 12:2e843f65ac5f

update
author akahori
date Tue, 19 Feb 2019 15:28:07 +0900
parents 9627f1774b45
children 117794d50054
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>Christieによるブロックチェーンの実装</title>

<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]">
<meta name="author"    content="赤堀 貴一" >

<!-- style sheet links -->
<link rel="stylesheet" href="s6/themes/projection.css"   media="screen,projection">
<link rel="stylesheet" href="s6/themes/screen.css"       media="screen">
<link rel="stylesheet" href="s6/themes/print.css"        media="print">
<link rel="stylesheet" href="s6/themes/blank.css"        media="screen,projection">

<!-- JS -->
<script src="s6/js/jquery-1.11.3.min.js"></script>
<script src="s6/js/jquery.slideshow.js"></script>
<script src="s6/js/jquery.slideshow.counter.js"></script>
<script src="s6/js/jquery.slideshow.controls.js"></script>
<script src="s6/js/jquery.slideshow.footer.js"></script>
<script src="s6/js/jquery.slideshow.autoplay.js"></script>

<!-- prettify -->
<link rel="stylesheet" href="scripts/prettify.css">
<script src="scripts/prettify.js"></script>

<script>
  $(document).ready( function() {
    Slideshow.init();

    $('code').each(function(_, el) {
      if (!el.classList.contains('noprettyprint')) {
        el.classList.add('prettyprint');
      }
    });
    prettyPrint();
  } );

  
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="s6/js/jquery.microsoft.js"></script>
<![endif]-->



</head>
<body>

<div class="layout">
  <div id="header"></div>
  <div id="footer">
    <div align="right">
      <img src="s6/images/logo.svg" width="200px">
    </div>
  </div>
</div>

<div class="presentation">

  <div class='slide cover'>
    <table width="90%" height="90%" border="0" align="center">
      <tr>
        <td>
          <div align="center">
            <h1><font color="#808db5">Christieによるブロックチェーンの実装</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            赤堀 貴一
            琉球大学 工学部 情報工学科
            <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
          </div>
        </td>
      </tr>
    </table>
  </div>

<div class='slide '>
<!-- === begin markdown block ===

      generated by markdown/1.2.0 on Ruby 2.3.7 (2018-03-28) [universal.x86_64-darwin17]
                on 2019-02-19 10:39:13 +0900 with Markdown engine kramdown (1.17.0)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="section">目次</h1>

<ul>
  <li>OS単位での分散システム</li>
  <li>ブロックチェーンとは</li>
  <li>ブロックチェーンのfork</li>
  <li>コンセンサスアルゴリズム
    <ul>
      <li>Proof of Work と Paxos</li>
    </ul>
  </li>
  <li>Christieとは</li>
  <li>TopologyManagerの実装</li>
  <li>PCクラスタ上でPaxosを動かした話</li>
  <li>まとめ</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="os">OS単位での分散システム</h1>

<ul>
  <li>コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる.</li>
  <li>ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である.</li>
  <li>当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.</li>
  <li>Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの破損を検知できる.</li>
  <li>よって, Christieにブロックチェーンを実装する.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">ブロックチェーンとは</h1>

<p>ブロックチェーンとは分散型台帳技術と呼ばれる. 複数のトランザクションをまとめたブロックをつなげたものを, 台帳と呼ぶ. その台帳をシステムに参加しているノードが保持する技術である.</p>

<p>ノード同士はP2Pでつながっており, 対等である. そのため, 管理者がいなくてもデータの管理が行える.</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-2">ブロックチェーンとは</h1>

<div style="text-align: center;">
    <img src="./images/blockchain.svg" alt="blockchain" width="1000" height="600" />
</div>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-3">ブロックチェーンとは</h1>

<p>ブロックチェーンにも種類がある. パブリックブロックチェーンとプライベートブロックチェーンである. 以下に, その違いを述べる.</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center"> </th>
      <th style="text-align: center">パブリックブロックチェーン</th>
      <th style="text-align: center">プライベートブロックチェーン</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">ノードの参加権</td>
      <td style="text-align: center">誰でも参加可能</td>
      <td style="text-align: center">管理者(単数 or 複数)によって許可された場合のみ参加可能</td>
    </tr>
    <tr>
      <td style="text-align: center">コンセンサス</td>
      <td style="text-align: center">遅い</td>
      <td style="text-align: center">速い</td>
    </tr>
  </tbody>
</table>

<p>細かい違いは色々あるが, ほとんどはこの2つの違いから生まれる.</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="fork">ブロックチェーンのfork</h1>

<p>ブロックがいたるところで作られると, 異なる高さの違うチェーンが複数できる. この状態をforkという.</p>

<p>forkが起こった場合, どちらかを正しいものとしてブロックを積み上げたい. そのため, コンセンサスアルゴリズムを用いて, どちらか1方に統合する.</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-4">コンセンサスアルゴリズム</h1>

<ul>
  <li>コンセンサスアルゴリズムは分散環境上で値を一意に決めるためのアルゴリズムである.
    <ul>
      <li>Paxos, Raftなどが有名. 簡単に言えば多数決を安全に行うためのアルゴリズム.</li>
      <li>故障モデルというものがあって, コンセンサスアルゴリズムでレベルが4段階ある. Paxos, Raftはレベル3で, ノードに裏切り者がいなければ安全に動く.</li>
      <li>PBFTがレベル4である<s>が読んでないのでわからない</s></li>
    </ul>
  </li>
  <li>Proof of Workを使っているパブリックブロックチェーンは「ブロックが多ければ多いほど」, レベル4に近づく.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-5">パブリックブロックチェーンのコンセンサスアルゴリズム</h1>

<ul>
  <li>パブリックブロックチェーンのコンセンサスアルゴリズムは, 「ある程度ブロックの差がついたら, 長い方を正とする」というもの.</li>
  <li>これだけだと, 裏切り者が適当なブロックをガシガシ積めば攻撃できるのでレベル4にはなれない. これを大幅に補強したのがProof of Work.</li>
  <li>Proof of Workは, 簡単に言えばブロックのHashに条件をつけるアルゴリズム. つまり, 新しいブロックを作るのが難しくなる.</li>
  <li>新しいブロックを作るのが難しいので, みんなで協力して作ったチェーンが自然に勝つ. また, 改ざんも難しくなる. ただし, トランザクションの確定が遅い.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-6">プライベートブロックチェーンのコンセンサスアルゴリズム</h1>

<ul>
  <li>プライベートブロックチェーンは管理者が許可するノードしか参加しない. つまり, レベル3のコンセンサスアルゴリズムで十分.</li>
  <li>新しいブロックもパブリックブロックチェーンより早く作れる.</li>
  <li>コンセンサスアルゴリズムの中でPaxosが速いらしいので, 今回はこちらも実装してみます.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="christie">Christieとは</h1>

<ul>
  <li>研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.</li>
  <li>Continued based C(CbC)と似た書き方が可能.</li>
  <li>まだAliceから引き継いでない機能でTopologyManagerというものがあるので, それも実装.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topologymanager">TopologyManagerとは</h1>

<ul>
  <li>TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.</li>
  <li>TopologyManagerは静的Topologyと動的Topologyを作れる.</li>
  <li>静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li>
  <li>動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していません.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="pcpaxos">PCクラスタ上でPaxosを動かした話</h1>

<ul>
  <li>ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.</li>
  <li>評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い.</li>
  <li>今回は単純化のために, 整数でコンセンサスを取る.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-7">実験1</h1>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-8">実験2</h1>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-9">実験3</h1>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-10">まとめ</h1>

<ul>
  <li>コンセンサスアルゴリズムのPaxosを実装しました.</li>
  <li>ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません.</li>
  <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます.</li>
</ul>
<!-- === end markdown block === -->
</div>


</div><!-- presentation -->
</body>
</html>