annotate slide/slide.md @ 12:2e843f65ac5f

update
author akahori
date Tue, 19 Feb 2019 15:28:07 +0900
parents 9627f1774b45
children 117794d50054
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
9627f1774b45 add slide
akahori
parents:
diff changeset
1 title: Christieによるブロックチェーンの実装
9627f1774b45 add slide
akahori
parents:
diff changeset
2 author: 赤堀 貴一
9627f1774b45 add slide
akahori
parents:
diff changeset
3 profile: 琉球大学 工学部 情報工学科
9627f1774b45 add slide
akahori
parents:
diff changeset
4 lang: Japanese
9627f1774b45 add slide
akahori
parents:
diff changeset
5 code-engine: coderay
9627f1774b45 add slide
akahori
parents:
diff changeset
6
9627f1774b45 add slide
akahori
parents:
diff changeset
7 # 目次
9627f1774b45 add slide
akahori
parents:
diff changeset
8
9627f1774b45 add slide
akahori
parents:
diff changeset
9 - OS単位での分散システム
9627f1774b45 add slide
akahori
parents:
diff changeset
10 - ブロックチェーンとは
9627f1774b45 add slide
akahori
parents:
diff changeset
11 - ブロックチェーンのfork
9627f1774b45 add slide
akahori
parents:
diff changeset
12 - コンセンサスアルゴリズム
12
akahori
parents: 10
diff changeset
13 - Proof of Work と Paxos
10
9627f1774b45 add slide
akahori
parents:
diff changeset
14 - Christieとは
9627f1774b45 add slide
akahori
parents:
diff changeset
15 - TopologyManagerの実装
9627f1774b45 add slide
akahori
parents:
diff changeset
16 - PCクラスタ上でPaxosを動かした話
9627f1774b45 add slide
akahori
parents:
diff changeset
17 - まとめ
9627f1774b45 add slide
akahori
parents:
diff changeset
18
9627f1774b45 add slide
akahori
parents:
diff changeset
19 # OS単位での分散システム
9627f1774b45 add slide
akahori
parents:
diff changeset
20
9627f1774b45 add slide
akahori
parents:
diff changeset
21 - コンピュータでデータが壊れることはあり得る. 誤操作や, データの破損, 最悪の場合システムの重要な部分のデータの破損も起こりうる.
9627f1774b45 add slide
akahori
parents:
diff changeset
22 - ブロックチェーンはデータを分散でき, 破損や不整合の検知が可能である.
9627f1774b45 add slide
akahori
parents:
diff changeset
23 - 当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.
9627f1774b45 add slide
akahori
parents:
diff changeset
24 - Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの破損を検知できる.
9627f1774b45 add slide
akahori
parents:
diff changeset
25 - よって, Christieにブロックチェーンを実装する.
9627f1774b45 add slide
akahori
parents:
diff changeset
26
9627f1774b45 add slide
akahori
parents:
diff changeset
27 # ブロックチェーンとは
9627f1774b45 add slide
akahori
parents:
diff changeset
28
12
akahori
parents: 10
diff changeset
29 ブロックチェーンとは分散型台帳技術と呼ばれる. 複数のトランザクションをまとめたブロックをつなげたものを, 台帳と呼ぶ. その台帳をシステムに参加しているノードが保持する技術である.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
30
9627f1774b45 add slide
akahori
parents:
diff changeset
31 ノード同士はP2Pでつながっており, 対等である. そのため, 管理者がいなくてもデータの管理が行える.
9627f1774b45 add slide
akahori
parents:
diff changeset
32
9627f1774b45 add slide
akahori
parents:
diff changeset
33 # ブロックチェーンとは
9627f1774b45 add slide
akahori
parents:
diff changeset
34
12
akahori
parents: 10
diff changeset
35 <div style="text-align: center;">
akahori
parents: 10
diff changeset
36 <img src="./images/blockchain.svg" alt="blockchain" width="1000" height="600">
akahori
parents: 10
diff changeset
37 </div>
akahori
parents: 10
diff changeset
38
akahori
parents: 10
diff changeset
39 # ブロックチェーンとは
akahori
parents: 10
diff changeset
40
10
9627f1774b45 add slide
akahori
parents:
diff changeset
41 ブロックチェーンにも種類がある. パブリックブロックチェーンとプライベートブロックチェーンである. 以下に, その違いを述べる.
9627f1774b45 add slide
akahori
parents:
diff changeset
42
9627f1774b45 add slide
akahori
parents:
diff changeset
43 | | パブリックブロックチェーン | プライベートブロックチェーン |
9627f1774b45 add slide
akahori
parents:
diff changeset
44 |:-----------:|:------------:|:------------:|
9627f1774b45 add slide
akahori
parents:
diff changeset
45 | ノードの参加権 | 誰でも参加可能 | 管理者(単数 or 複数)によって許可された場合のみ参加可能 |
9627f1774b45 add slide
akahori
parents:
diff changeset
46 | コンセンサス | 遅い | 速い |
9627f1774b45 add slide
akahori
parents:
diff changeset
47
9627f1774b45 add slide
akahori
parents:
diff changeset
48 細かい違いは色々あるが, ほとんどはこの2つの違いから生まれる.
9627f1774b45 add slide
akahori
parents:
diff changeset
49
9627f1774b45 add slide
akahori
parents:
diff changeset
50 # ブロックチェーンのfork
9627f1774b45 add slide
akahori
parents:
diff changeset
51
9627f1774b45 add slide
akahori
parents:
diff changeset
52 ブロックがいたるところで作られると, 異なる高さの違うチェーンが複数できる. この状態をforkという.
9627f1774b45 add slide
akahori
parents:
diff changeset
53
9627f1774b45 add slide
akahori
parents:
diff changeset
54 forkが起こった場合, どちらかを正しいものとしてブロックを積み上げたい. そのため, コンセンサスアルゴリズムを用いて, どちらか1方に統合する.
9627f1774b45 add slide
akahori
parents:
diff changeset
55
9627f1774b45 add slide
akahori
parents:
diff changeset
56 # コンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
57
9627f1774b45 add slide
akahori
parents:
diff changeset
58 - コンセンサスアルゴリズムは分散環境上で値を一意に決めるためのアルゴリズムである.
12
akahori
parents: 10
diff changeset
59 - Paxos, Raftなどが有名. 簡単に言えば多数決を安全に行うためのアルゴリズム.
akahori
parents: 10
diff changeset
60 - 故障モデルというものがあって, コンセンサスアルゴリズムでレベルが4段階ある. Paxos, Raftはレベル3で, ノードに裏切り者がいなければ安全に動く.
akahori
parents: 10
diff changeset
61 - PBFTがレベル4である<s>が読んでないのでわからない</s>
10
9627f1774b45 add slide
akahori
parents:
diff changeset
62 - Proof of Workを使っているパブリックブロックチェーンは「ブロックが多ければ多いほど」, レベル4に近づく.
9627f1774b45 add slide
akahori
parents:
diff changeset
63
9627f1774b45 add slide
akahori
parents:
diff changeset
64 # パブリックブロックチェーンのコンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
65
9627f1774b45 add slide
akahori
parents:
diff changeset
66 - パブリックブロックチェーンのコンセンサスアルゴリズムは, 「ある程度ブロックの差がついたら, 長い方を正とする」というもの.
12
akahori
parents: 10
diff changeset
67 - これだけだと, 裏切り者が適当なブロックをガシガシ積めば攻撃できるのでレベル4にはなれない. これを大幅に補強したのがProof of Work.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
68 - Proof of Workは, 簡単に言えばブロックのHashに条件をつけるアルゴリズム. つまり, 新しいブロックを作るのが難しくなる.
12
akahori
parents: 10
diff changeset
69 - 新しいブロックを作るのが難しいので, みんなで協力して作ったチェーンが自然に勝つ. また, 改ざんも難しい. ただし, トランザクションの確定が遅い.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
70
9627f1774b45 add slide
akahori
parents:
diff changeset
71 # プライベートブロックチェーンのコンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
72
9627f1774b45 add slide
akahori
parents:
diff changeset
73 - プライベートブロックチェーンは管理者が許可するノードしか参加しない. つまり, レベル3のコンセンサスアルゴリズムで十分.
12
akahori
parents: 10
diff changeset
74 - 新しいブロックもパブリックブロックチェーンより早く作れる.
akahori
parents: 10
diff changeset
75 - コンセンサスアルゴリズムの中でPaxosが速いらしいので, 今回はこちらも実装してみます.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
76
12
akahori
parents: 10
diff changeset
77 # Paxos
akahori
parents: 10
diff changeset
78
akahori
parents: 10
diff changeset
79 - Lamport先生が「故障モデルレベル3での合意が不可能なのを証明してやる」と言って証明の途中で逆に編み出してしまったらしいアルゴリズム.
akahori
parents: 10
diff changeset
80 - レベル3のアルゴリズムの基礎となっている.
akahori
parents: 10
diff changeset
81 - proposerが値を提案し, acceptorが決め, Learnerが集計して多数決を取って決まった値を保持.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
82
12
akahori
parents: 10
diff changeset
83 # Paxos説明の前の用語説明
akahori
parents: 10
diff changeset
84
akahori
parents: 10
diff changeset
85 -
akahori
parents: 10
diff changeset
86
akahori
parents: 10
diff changeset
87 # [25行でわかるPaxosアルゴリズム](http://nil.csail.mit.edu/6.824/2015/notes/paxos-code.html)
akahori
parents: 10
diff changeset
88
akahori
parents: 10
diff changeset
89 - Proposerは
10
9627f1774b45 add slide
akahori
parents:
diff changeset
90
9627f1774b45 add slide
akahori
parents:
diff changeset
91 # Christieとは
9627f1774b45 add slide
akahori
parents:
diff changeset
92
9627f1774b45 add slide
akahori
parents:
diff changeset
93 - 研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.
9627f1774b45 add slide
akahori
parents:
diff changeset
94 - Continued based C(CbC)と似た書き方が可能.
9627f1774b45 add slide
akahori
parents:
diff changeset
95 - まだAliceから引き継いでない機能でTopologyManagerというものがあるので, それも実装.
9627f1774b45 add slide
akahori
parents:
diff changeset
96
9627f1774b45 add slide
akahori
parents:
diff changeset
97 # TopologyManagerとは
9627f1774b45 add slide
akahori
parents:
diff changeset
98
9627f1774b45 add slide
akahori
parents:
diff changeset
99 - TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.
9627f1774b45 add slide
akahori
parents:
diff changeset
100 - TopologyManagerは静的Topologyと動的Topologyを作れる.
9627f1774b45 add slide
akahori
parents:
diff changeset
101 - 静的Topologyはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.
9627f1774b45 add slide
akahori
parents:
diff changeset
102 - 動的Topologyは参加を表明したノードを動的に配置する. が, 今はTreeしか実装していません.
9627f1774b45 add slide
akahori
parents:
diff changeset
103
9627f1774b45 add slide
akahori
parents:
diff changeset
104 # PCクラスタ上でPaxosを動かした話
9627f1774b45 add slide
akahori
parents:
diff changeset
105
9627f1774b45 add slide
akahori
parents:
diff changeset
106 - ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.
9627f1774b45 add slide
akahori
parents:
diff changeset
107 - 評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックについてコンセンサスをとっても良い.
9627f1774b45 add slide
akahori
parents:
diff changeset
108 - 今回は単純化のために, 整数でコンセンサスを取る.
9627f1774b45 add slide
akahori
parents:
diff changeset
109
9627f1774b45 add slide
akahori
parents:
diff changeset
110
9627f1774b45 add slide
akahori
parents:
diff changeset
111 # 実験1
9627f1774b45 add slide
akahori
parents:
diff changeset
112
9627f1774b45 add slide
akahori
parents:
diff changeset
113 # 実験2
9627f1774b45 add slide
akahori
parents:
diff changeset
114
9627f1774b45 add slide
akahori
parents:
diff changeset
115 # 実験3
9627f1774b45 add slide
akahori
parents:
diff changeset
116
9627f1774b45 add slide
akahori
parents:
diff changeset
117 # まとめ
9627f1774b45 add slide
akahori
parents:
diff changeset
118
9627f1774b45 add slide
akahori
parents:
diff changeset
119 - コンセンサスアルゴリズムのPaxosを実装しました.
9627f1774b45 add slide
akahori
parents:
diff changeset
120 - ブロック, トランザクション, proof of workも実装しました. ただ, トランザクションはファイルのデータを読めるようにはしていません.
9627f1774b45 add slide
akahori
parents:
diff changeset
121 - これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装されます. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れます.