Mercurial > hg > Papers > 2019 > aka-thesis
changeset 16:22e7e5667b99
update slide
author | akahori |
---|---|
date | Wed, 20 Feb 2019 10:44:15 +0900 |
parents | 2e706e8bb6bd |
children | 6b4136eb9779 |
files | slide/slide.html slide/slide.md |
diffstat | 2 files changed, 86 insertions(+), 194 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/slide.html Wed Feb 20 02:43:24 2019 +0900 +++ b/slide/slide.html Wed Feb 20 10:44:15 2019 +0900 @@ -74,7 +74,7 @@ <td> <div align="left"> 赤堀 貴一 - 琉球大学 工学部 情報工学科 + 並列信頼研 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> @@ -86,7 +86,7 @@ <!-- === 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 17:49:17 +0900 with Markdown engine kramdown (1.17.0) + on 2019-02-20 10:39:16 +0900 with Markdown engine kramdown (1.17.0) using options {} --> @@ -96,7 +96,6 @@ <ul> <li>研究目的</li> <li>ブロックチェーンとは</li> - <li>ブロックチェーンのfork</li> <li>コンセンサスアルゴリズム <ul> <li>Proof of Work と Paxos</li> @@ -115,10 +114,10 @@ <h1 id="os">研究目的 OS単位での分散システム</h1> <ul> - <li>コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる.</li> - <li>ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である.</li> + <li>コンピュータのデータに不整合が起こるはあり得る. 不整合は誤操作や, 複数人によるデータの同時書き込みによって起こる.</li> + <li>ブロックチェーンはデータを分散でき, 不整合の検知が可能である.</li> <li>当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.</li> - <li>Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの破損を検知できる.</li> + <li>Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの不整合を検知できる.</li> <li>よって, Christieにブロックチェーンを実装する.</li> </ul> @@ -139,7 +138,7 @@ <h1 id="section-2">ブロックチェーンとは</h1> <div style="text-align: center;"> - <img src="./images/blockchain.svg" alt="blockchain" width="1000" height="600" /> + <img src="./images/blockchain.svg" alt="blockchain" width="800" /> </div> @@ -162,7 +161,7 @@ <tr> <td style="text-align: center">ノードの参加権</td> <td style="text-align: center">誰でも参加可能</td> - <td style="text-align: center">管理者(単数 or 複数)によって許可された場合のみ参加可能</td> + <td style="text-align: center">許可された場合のみ参加可能</td> </tr> <tr> <td style="text-align: center">コンセンサス</td> @@ -178,16 +177,6 @@ </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> @@ -195,7 +184,6 @@ <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> @@ -205,25 +193,12 @@ </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> +<h1 id="section-5">プライベートブロックチェーンのコンセンサスアルゴリズム</h1> <ul> <li>プライベートブロックチェーンは管理者が許可するノードしか参加しない. つまり, レベル3のコンセンサスアルゴリズムで十分.</li> <li>新しいブロックもパブリックブロックチェーンより早く作れる.</li> - <li>コンセンサスアルゴリズムの中でPaxosが速いらしいので, 今回はこちらも実装してみます.</li> + <li>Paxosを実装しました.</li> </ul> @@ -233,89 +208,12 @@ <h1 id="paxos">Paxos</h1> <ul> - <li>Lamport先生が「故障モデルレベル3での合意が不可能なのを証明してやる」と言って証明の途中で逆に編み出してしまったらしいアルゴリズム.</li> - <li>レベル3のアルゴリズムの基礎となっている.</li> - <li>proposerが値を提案し, acceptorが決め, Learnerが集計し, 多数決を取って決まった値を保持.</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-1">Paxos</h1> - -<p>Paxosアルゴリズムに入る前の用語説明</p> -<dl> - <dt>提案</dt> - <dd>提案は, 異なる提案ごとにユニークな提案番号と値からなる. 提案番号とは, 異なる提案を見分けるための識別子であり, 単調増加する. 値は一意に決まってほしいデータである.</dd> - <dt>値(提案)がacceptされる</dt> - <dd>acceptorによって値(提案)が決まること.</dd> - <dt>値(提案)が選択(chosen)される</dt> - <dd>過半数以上のacceptorによって, 値(提案)がacceptされた場合, それを値(提案)が選択されたと言う.</dd> -</dl> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-2">Paxos</h1> - -<p>Paxosは2つのフェーズで動作する. 1つ目のフェーズ, prepare-promiseは次のような手順で動作する.</p> - -<ul> - <li>proposerは提案番号nを設定した提案を過半数以上のacceptorに送る. これをprepareリクエストという.</li> - <li>acceptorはprepareリクエストが来たら次の動作をする. - <ul> - <li>もし, 以前に送られたprepareリクエストの提案番号より, 今送られてきたprepareリクエストの提案番号のほうが大きければ, それ以下の提案番号の提案を拒否するという約束を返す. この状態をPromiseしたという.</li> - <li>もし, 値がすでにacceptされていれば, accpetされた提案を返す.</li> - </ul> - </li> + <li>Proposerが値を提案する.</li> + <li>Acceptorが値を決める.</li> + <li>Learnerが決めた値を集計して, 多数決により値を選択する.</li> </ul> - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-3">Paxos</h1> - -<div style="text-align: center;"> - <img src="./images/prepare-promise.svg" alt="blockchain" width="1000" height="500" /> -</div> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-4">Paxos</h1> - -<p>2つ目のフェーズ, accept-acceptedは次のような手順で動作する.</p> - -<ul> - <li>proposerは過半数のacceptorから返信が来たならば, 次の提案をacceptorに送る. これをacceptリクエストという. - <ul> - <li>もし, 約束のみが返ってきているならば, 任意の値vをprepareリクエストで送った提案に設定する.</li> - <li>もし, acceptされた提案が返ってきたら, その中で最大の提案番号を持つ提案の値v’をprepareリクエストで送った提案の値として設定する.</li> - </ul> - </li> - <li>acceptorはacceptリクエストが来た場合, Promiseした提案よりもacceptリクエストで提案された提案番号が低ければ, その提案を拒否する. それ以外の場合はacceptする.</li> -</ul> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-5">Paxos</h1> - -<div style="text-align: center;"> - <img src="./images/accept-accepted.svg" alt="blockchain" width="1000" height="500" /> -</div> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos-6">Paxos</h1> -<p>とりあえず, このアルゴリズムで値が一意に決まる.</p> +<p>これによって, 値が一意に決まる.</p> </div> @@ -325,7 +223,7 @@ <ul> <li>研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.</li> - <li>Continued based C(CbC)と似た書き方が可能.</li> + <li>Continued based C(CbC)と似た書き方が可能. DataGearという単位でDataの移動ができる.</li> <li>まだAliceから引き継いでない機能でTopologyManagerというものがある. これは, Topologyを構成するための機能.</li> <li>簡単に言えば, ノード間の配線をしてくれる. 分散環境上で実験を行いたい場合に便利なため, これを実装してからPaxosを実装した.</li> </ul> @@ -338,22 +236,32 @@ <ul> <li>TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.</li> - <li>TopologyManagerは静的Topologyと動的Topologyを作れる.</li> - <li>静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li> - <li>動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していない.</li> + <li>TopologyManagerはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.</li> </ul> +<pre><code>digraph test { + node0 -> node1 [label="right"] + node1 -> node2 [label="right"] + node2 -> node0 [label="right"] +} +</code></pre> + +<div style="text-align: center;"> + <img src="./images/ring.svg" alt="blockchain" width="800" /> +</div> + </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="pcpaxos">PCクラスタ上でPaxosを動かした話</h1> +<h1 id="christie-1">Christieによる実装の利点</h1> + +<p>ブロックチェーンの実装に伴ってわかったChristieの利点を述べる.</p> <ul> - <li>ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.</li> - <li>評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い.</li> - <li>今回は単純化のために, 整数でコンセンサスを取る.</li> - <li>また, ノードはproposerが2つ, acceptorが3つ, learnerが1つという構成で実験する.</li> + <li>ブロック, トランザクションを送るのが簡単. ChristieはDataGearという単位でデータを保持するため, データ構造に@Messageを付け, putすることでデータの送信ができる.</li> + <li>TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置について理想のテスト環境を作ることができる.</li> + <li>ソースコードの機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなった.</li> </ul> @@ -363,39 +271,32 @@ <h1 id="paxos1">Paxos実験1</h1> <div style="text-align: center;"> - <img src="./images/paxos1.svg" alt="blockchain" width="1000" height="800" /> -</div> - - -</div> -<div class='slide '> -<!-- _S9SLIDE_ --> -<h1 id="paxos2">Paxos実験2</h1> - -<div style="text-align: center;"> - <img src="./images/paxos2.svg" alt="blockchain" width="1000" height="1000" /> + <img src="./images/paxos1.svg" alt="blockchain" width="800" /> </div> </div> <div class='slide '> <!-- _S9SLIDE_ --> -<h1 id="paxos3">Paxos実験3</h1> +<h1 id="pcpaxos">PCクラスタ上でPaxosを動かした話</h1> -<div style="text-align: center;"> - <img src="./images/paxos3.svg" alt="blockchain" width="1000" height="1000" /> -</div> +<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="section-7">まとめ</h1> +<h1 id="section-6">まとめ</h1> <ul> - <li>コンセンサスアルゴリズムのPaxosを実装しました.</li> - <li>ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません.</li> - <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます.</li> + <li>Christieを用いてコンセンサスアルゴリズムのPaxos, ブロック, トランザクション, proof of workも実装しました.</li> + <li>これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装できます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れる. 2つ作って速度比較も行える.</li> </ul> <!-- === end markdown block === --> </div>
--- a/slide/slide.md Wed Feb 20 02:43:24 2019 +0900 +++ b/slide/slide.md Wed Feb 20 10:44:15 2019 +0900 @@ -1,6 +1,6 @@ title: Christieによるブロックチェーンの実装 author: 赤堀 貴一 -profile: 琉球大学 工学部 情報工学科 +profile: 並列信頼研 lang: Japanese code-engine: coderay @@ -8,9 +8,7 @@ - 研究目的 - ブロックチェーンとは -- ブロックチェーンのfork - コンセンサスアルゴリズム - - Proof of Work と Paxos - Christieとは - TopologyManagerの実装 - PCクラスタ上でPaxosを動かした話 @@ -18,10 +16,10 @@ # 研究目的 OS単位での分散システム -- コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる. -- ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である. +- コンピュータのデータに不整合は起こりえます. 不整合は誤操作や, 複数人によるデータの同時書き込みによって起こる. +- ブロックチェーンはデータを分散でき, 不整合の検知が可能である. - 当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある. -- Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの破損を検知できる. +- Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムを構成することが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの不整合を検知できる. - よって, Christieにブロックチェーンを実装する. # ブロックチェーンとは @@ -33,7 +31,7 @@ # ブロックチェーンとは <div style="text-align: center;"> - <img src="./images/blockchain.svg" alt="blockchain" width="1000" height="600"> + <img src="./images/blockchain.svg" alt="blockchain" width="800"> </div> # ブロックチェーンとは @@ -42,89 +40,82 @@ | | パブリックブロックチェーン | プライベートブロックチェーン | |:-----------:|:------------:|:------------:| -| ノードの参加権 | 誰でも参加可能 | 管理者(単数 or 複数)によって許可された場合のみ参加可能 | +| ノードの参加権 | 誰でも参加可能 | 許可された場合のみ参加可能 | | コンセンサス | 遅い | 速い | 細かい違いは色々あるが, ほとんどはこの2つの違いから生まれる. -# ブロックチェーンのfork - -ブロックがいたるところで作られると, 異なる高さの違うチェーンが複数できる. この状態をforkという. - -forkが起こった場合, どちらかを正しいものとしてブロックを積み上げたい. そのため, コンセンサスアルゴリズムを用いて, どちらか1方に統合する. - # コンセンサスアルゴリズム - コンセンサスアルゴリズムは分散環境上で値を一意に決めるためのアルゴリズムである. - Paxos, Raftなどが有名. 簡単に言えば多数決を安全に行うためのアルゴリズム. - 故障モデルというものがあって, コンセンサスアルゴリズムでレベルが4段階ある. Paxos, Raftはレベル3で, ノードに裏切り者がいなければ安全に動く. - - PBFTがレベル4である<s>が読んでないのでわからない</s> - Proof of Workを使っているパブリックブロックチェーンは「ブロックが多ければ多いほど」, レベル4に近づく. -# パブリックブロックチェーンのコンセンサスアルゴリズム - -- パブリックブロックチェーンのコンセンサスアルゴリズムは, 「ある程度ブロックの差がついたら, 長い方を正とする」というもの. -- これだけだと, 裏切り者が適当なブロックをガシガシ積めば攻撃できるのでレベル4にはなれない. これを大幅に補強したのがProof of Work. -- Proof of Workは, 簡単に言えばブロックのHashに条件をつけるアルゴリズム. つまり, 新しいブロックを作るのが難しくなる. -- 新しいブロックを作るのが難しいので, みんなで協力して作ったチェーンが自然に勝つ. また, 改ざんも難しい. ただし, トランザクションの確定が遅い. - # プライベートブロックチェーンのコンセンサスアルゴリズム - プライベートブロックチェーンは管理者が許可するノードしか参加しない. つまり, レベル3のコンセンサスアルゴリズムで十分. - 新しいブロックもパブリックブロックチェーンより早く作れる. -- コンセンサスアルゴリズムの中でPaxosを実装します. +- Paxosを実装しました. # Paxos -- Lamport先生が「故障モデルレベル3での合意が不可能なのを証明してやる」と言って証明の途中で逆に編み出してしまったらしいアルゴリズム. -- レベル3のアルゴリズムの基礎となっている. -- proposerが値を提案し, acceptorが決め, Learnerが集計し, 多数決を取って決まった値を保持. +- Proposerが値を提案する. +- Acceptorが値を決める. +- Learnerが決めた値を集計して, 多数決により値を選択する. +これによって, 値が一意に決まる. -# Paxos -とりあえず, このアルゴリズムで値が一意に決まる. # Christieとは - 研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク. -- Continued based C(CbC)と似た書き方が可能. +- Continued based C(CbC)と似た書き方が可能. DataGearという単位でDataの移動ができる. - まだAliceから引き継いでない機能でTopologyManagerというものがある. これは, Topologyを構成するための機能. - 簡単に言えば, ノード間の配線をしてくれる. 分散環境上で実験を行いたい場合に便利なため, これを実装してからPaxosを実装した. # TopologyManagerとは - TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る. -- TopologyManagerは静的Topologyと動的Topologyを作れる. -- 静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する. -- 動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していない. +- TopologyManagerはdotファイルというものを読み込んで, そのとおりにTopologyを生成する. + +``` +digraph test { + node0 -> node1 [label="right"] + node1 -> node2 [label="right"] + node2 -> node0 [label="right"] +} +``` -# PCクラスタ上でPaxosを動かした話 +<div style="text-align: center;"> + <img src="./images/ring.svg" alt="blockchain" width="800"> +</div> + + -- ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした. -- 評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い. -- 今回は単純化のために, 整数でコンセンサスを取る. -- また, ノードはproposerが2つ, acceptorが3つ, learnerが1つという構成で実験する. +# Christieによる実装の利点 + +ブロックチェーンの実装に伴ってわかったChristieの利点を述べる. + +- ブロック, トランザクションを送るのが簡単. ChristieはDataGearという単位でデータを保持するため, データ構造に@Messageを付け, putすることでデータの送信ができる. +- TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置について理想のテスト環境を作ることができる. +- ソースコードの機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなった. # Paxos実験1 <div style="text-align: center;"> - <img src="./images/paxos1.svg" alt="blockchain" width="1000" height="800"> + <img src="./images/paxos1.svg" alt="blockchain" width="800"> </div> -# Paxos実験2 - -<div style="text-align: center;"> - <img src="./images/paxos2.svg" alt="blockchain" width="1000" height="1000"> -</div> +# PCクラスタ上でPaxosを動かした話 -# Paxos実験3 - -<div style="text-align: center;"> - <img src="./images/paxos3.svg" alt="blockchain" width="1000" height="1000"> -</div> +- ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした. +- 評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックごとにコンセンサスをとっても良い. +- 今回は単純化のために, 整数でコンセンサスを取る. +- また, ノードはproposerが2つ, acceptorが3つ, learnerが1つという構成で実験した. +- その結果, 値が一意に決まることがわかった. # まとめ -- コンセンサスアルゴリズムのPaxosを実装しました. -- ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません. -- これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます. +- Christieを用いてコンセンサスアルゴリズムのPaxos, ブロック, トランザクション, proof of workも実装しました. +- これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装できます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れる. 2つ作って速度比較も行える. \ No newline at end of file