view slide/slide.html @ 21:3776a23274a7

fix slide
author akahori
date Wed, 20 Feb 2019 18:22:57 +0900
parents 828b13d9c918
children
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>Christieによる<br>ブロックチェーンの実装</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による<br>ブロックチェーンの実装</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-20 15:49:43 +0900 with Markdown engine kramdown (1.17.0)
                  using options {}
  -->

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

<ul>
  <li>研究目的</li>
  <li>ブロックチェーンとは</li>
  <li>コンセンサスアルゴリズム</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>ブロック同士はハッシュでつながっている. そのため, 1つのブロックが変更されると, それ以降のブロックの整合性が保たれないため, そのHashを調べることで不整合を検知できる</p>

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


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

<ul>
  <li>コンセンサスアルゴリズムは分散環境上で値を一意に決めるためのアルゴリズムである.
    <ul>
      <li>Paxos, Raftなどが有名. 簡単に言えば多数決を安全に行うためのアルゴリズム.</li>
      <li>分散環境に故障モデルというものがあって, コンセンサスアルゴリズムでレベルが4段階ある.
        <ul>
          <li>故障が起きない.</li>
          <li>任意のマシンが故障し, メッセージを受信したり送れない可能性がある.</li>
          <li>メッセージに遅延が発生する. そのため, マシンが壊れたのかどうか処理に時間がかかっているのかわからない.</li>
          <li>悪意あるマシンがいる可能性がある.</li>
        </ul>
      </li>
      <li>Paxos, Raftはレベル3で, ノードに裏切り者がいなければ安全に動く.</li>
    </ul>
  </li>
</ul>


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

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


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="paxos">Paxos</h1>

<ul>
  <li>Proposerが値を提案する.</li>
  <li>Acceptorが値を決める.</li>
  <li>Learnerが決めた値を集計して, 多数決により値を選択する.</li>
</ul>

<div style="text-align: center;">
    <img src="./images/paxos-choice.svg" alt="blockchain" width="800" />
</div>


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

<ul>
  <li>分散プログラミングを簡単に書けるjavaのフレームワーク.</li>
  <li>研究室で使っていたAliceの問題点を解消した.
    <ul>
      <li>データの取り出しをアノテーションを用いてシンプルに記述することができるようになった. そのため, ソースコードの可視性が上がった.</li>
      <li>テストが簡単になった. AliceではLocalDataGearManagerを一つしか持てないため, LocalDataGearManagerの通信のテストが難しかった. Christieは複数のLocalDataGearManagerを持てるようになったため, 1つのアプリケーション内で分散のテストができるようになった.</li>
    </ul>
  </li>
  <li>Continued based C(CbC)と似た書き方が可能. DataGearという単位でDataの移動ができる.</li>
  <li>まだAliceから引き継いでない機能でTopologyManagerというものがある. これは, Topologyを構成するための機能.</li>
  <li>簡単に言えば, ノード間の配線をしてくれる. 分散環境上で実験を行いたい場合に便利なため, これを実装してからPaxosを実装した.</li>
</ul>


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

<ul>
  <li>TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.</li>
  <li>TopologyManagerはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li>
</ul>

<pre><code>digraph test {
	node0 -&gt; node1 [label="right"]
	node1 -&gt; node2 [label="right"]
	node2 -&gt; node0 [label="right"]
}
</code></pre>

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


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="christie-1">Christieによる実装の利点</h1>

<p>ブロックチェーンの実装に伴ってわかったChristieの利点を述べる.</p>

<ul>
  <li>ブロック, トランザクションを送るのが簡単. ChristieはDataGearという単位でデータを保持するため, データ構造に@Messageを付け, putすることでデータの送信ができる.</li>
  <li>TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置について理想のテスト環境を作ることができる.</li>
  <li>ソースコードの機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなった.</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="pcpaxos">PCクラスタ上でのPaxosの実行</h1>

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


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="paxos1">Paxos実行結果1</h1>

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


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

<ul>
  <li>Christieを用いてコンセンサスアルゴリズムのPaxos, ブロック, トランザクション, proof of workも実装した.</li>
  <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装できる. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れる. 2つ作って速度比較も行える.</li>
</ul>
<!-- === end markdown block === -->
</div>


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