annotate slide/slide.md @ 19:1bbebae0635c

update slide
author akahori
date Wed, 20 Feb 2019 13:01:36 +0900
parents 22e7e5667b99
children 828b13d9c918
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: 赤堀 貴一
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
3 profile: 並列信頼研
10
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
13
akahori
parents: 12
diff changeset
9 - 研究目的
10
9627f1774b45 add slide
akahori
parents:
diff changeset
10 - ブロックチェーンとは
9627f1774b45 add slide
akahori
parents:
diff changeset
11 - コンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
12 - Christieとは
9627f1774b45 add slide
akahori
parents:
diff changeset
13 - TopologyManagerの実装
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
14 - PCクラスタ上でPaxosの実行
10
9627f1774b45 add slide
akahori
parents:
diff changeset
15 - まとめ
9627f1774b45 add slide
akahori
parents:
diff changeset
16
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
17 # OS単位での分散システム
10
9627f1774b45 add slide
akahori
parents:
diff changeset
18
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
19 - コンピュータのデータに不整合は起こり得る. 不整合は誤操作や, 複数人によるデータの同時書き込みによって起こる.
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
20 - ブロックチェーンはデータを分散でき, 不整合の検知が可能である.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
21 - 当研究室ではGearsOS, そしてGearsOSに組み込む予定がある分散フレームワークChristieがある.
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
22 - Christieにブロックチェーンを実装し, GearsOSに組み込むことで, GearsOS間の分散システムを構成することが可能になる. また, 分散システムを作らずとも, hash chainとしてデータの不整合を検知できる.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
23 - よって, Christieにブロックチェーンを実装する.
9627f1774b45 add slide
akahori
parents:
diff changeset
24
9627f1774b45 add slide
akahori
parents:
diff changeset
25 # ブロックチェーンとは
9627f1774b45 add slide
akahori
parents:
diff changeset
26
12
akahori
parents: 10
diff changeset
27 ブロックチェーンとは分散型台帳技術と呼ばれる. 複数のトランザクションをまとめたブロックをつなげたものを, 台帳と呼ぶ. その台帳をシステムに参加しているノードが保持する技術である.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
28
12
akahori
parents: 10
diff changeset
29 <div style="text-align: center;">
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
30 <img src="./images/blockchain.svg" alt="blockchain" width="800">
12
akahori
parents: 10
diff changeset
31 </div>
akahori
parents: 10
diff changeset
32
akahori
parents: 10
diff changeset
33
10
9627f1774b45 add slide
akahori
parents:
diff changeset
34
9627f1774b45 add slide
akahori
parents:
diff changeset
35 # コンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
36
9627f1774b45 add slide
akahori
parents:
diff changeset
37 - コンセンサスアルゴリズムは分散環境上で値を一意に決めるためのアルゴリズムである.
12
akahori
parents: 10
diff changeset
38 - Paxos, Raftなどが有名. 簡単に言えば多数決を安全に行うためのアルゴリズム.
akahori
parents: 10
diff changeset
39 - 故障モデルというものがあって, コンセンサスアルゴリズムでレベルが4段階ある. Paxos, Raftはレベル3で, ノードに裏切り者がいなければ安全に動く.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
40
9627f1774b45 add slide
akahori
parents:
diff changeset
41 # プライベートブロックチェーンのコンセンサスアルゴリズム
9627f1774b45 add slide
akahori
parents:
diff changeset
42
9627f1774b45 add slide
akahori
parents:
diff changeset
43 - プライベートブロックチェーンは管理者が許可するノードしか参加しない. つまり, レベル3のコンセンサスアルゴリズムで十分.
12
akahori
parents: 10
diff changeset
44 - 新しいブロックもパブリックブロックチェーンより早く作れる.
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
45 - よってPaxosを実装しました.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
46
12
akahori
parents: 10
diff changeset
47 # Paxos
akahori
parents: 10
diff changeset
48
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
49 - Proposerが値を提案する.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
50 - Acceptorが値を決める.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
51 - Learnerが決めた値を集計して, 多数決により値を選択する.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
52
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
53 これによって, 値が一意に決まる.
12
akahori
parents: 10
diff changeset
54
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
55 <div style="text-align: center;">
1bbebae0635c update slide
akahori
parents: 16
diff changeset
56 <img src="./images/paxos-choice.svg" alt="blockchain" width="800">
1bbebae0635c update slide
akahori
parents: 16
diff changeset
57 </div>
1bbebae0635c update slide
akahori
parents: 16
diff changeset
58
10
9627f1774b45 add slide
akahori
parents:
diff changeset
59
9627f1774b45 add slide
akahori
parents:
diff changeset
60 # Christieとは
9627f1774b45 add slide
akahori
parents:
diff changeset
61
9627f1774b45 add slide
akahori
parents:
diff changeset
62 - 研究室で使っていたAliceの問題点を解消した, 分散プログラミングを簡単に書けるjavaのフレームワーク.
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
63 - データの取り出しをアノテーションを用いてシンプルに記述することができるようになった. そのため, ソースコードの可視性が上がった.
1bbebae0635c update slide
akahori
parents: 16
diff changeset
64 - テストが簡単になった. AliceではLocalDataGearManagerを一つしか持てないため, LocalDataGearManagerの通信のテストが難しかった. Christieは複数のLocalDataGearManagerを持てるようになったため, 1つのアプリケーション内で分散のテストができるようになった.
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
65 - Continued based C(CbC)と似た書き方が可能. DataGearという単位でDataの移動ができる.
13
akahori
parents: 12
diff changeset
66 - まだAliceから引き継いでない機能でTopologyManagerというものがある. これは, Topologyを構成するための機能.
akahori
parents: 12
diff changeset
67 - 簡単に言えば, ノード間の配線をしてくれる. 分散環境上で実験を行いたい場合に便利なため, これを実装してからPaxosを実装した.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
68
9627f1774b45 add slide
akahori
parents:
diff changeset
69 # TopologyManagerとは
9627f1774b45 add slide
akahori
parents:
diff changeset
70
9627f1774b45 add slide
akahori
parents:
diff changeset
71 - TopologyManagerは参加を表明したノード(TopologyNode)を元にTopologyを作る.
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
72 - TopologyManagerはdotファイルというものを読み込んで, そのとおりにTopologyを生成する.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
73
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
74 ```
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
75 digraph test {
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
76 node0 -> node1 [label="right"]
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
77 node1 -> node2 [label="right"]
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
78 node2 -> node0 [label="right"]
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
79 }
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
80 ```
10
9627f1774b45 add slide
akahori
parents:
diff changeset
81
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
82 <div style="text-align: center;">
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
83 <img src="./images/ring.svg" alt="blockchain" width="800">
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
84 </div>
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
85
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
86 # Christieによる実装の利点
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
87
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
88 ブロックチェーンの実装に伴ってわかったChristieの利点を述べる.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
89
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
90 - ブロック, トランザクションを送るのが簡単. ChristieはDataGearという単位でデータを保持するため, データ構造に@Messageを付け, putすることでデータの送信ができる.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
91 - TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置について理想のテスト環境を作ることができる.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
92 - ソースコードの機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなった.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
93
9627f1774b45 add slide
akahori
parents:
diff changeset
94
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
95 # PCクラスタ上でのPaxosの実行
10
9627f1774b45 add slide
akahori
parents:
diff changeset
96
16
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
97 - ブロックチェーンにおいて, 分散環境上でテストしなければいけないのはコンセンサスアルゴリズムである. そのため, Paxosを実装し, 実際の分散環境上で動かした.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
98 - 評価は値が一意に決まるかどうかである. 値が一意に決まるならば, リーダーがコンセンサスをとっても良いし, ブロックごとにコンセンサスをとっても良い.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
99 - 今回は単純化のために, 整数でコンセンサスを取る.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
100 - また, ノードはproposerが2つ, acceptorが3つ, learnerが1つという構成で実験した.
22e7e5667b99 update slide
akahori
parents: 13
diff changeset
101 - その結果, 値が一意に決まることがわかった.
10
9627f1774b45 add slide
akahori
parents:
diff changeset
102
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
103 # Paxos実行結果1
1bbebae0635c update slide
akahori
parents: 16
diff changeset
104
1bbebae0635c update slide
akahori
parents: 16
diff changeset
105 <div style="text-align: center;">
1bbebae0635c update slide
akahori
parents: 16
diff changeset
106 <img src="./images/paxos1.svg" alt="blockchain" width="800">
1bbebae0635c update slide
akahori
parents: 16
diff changeset
107 </div>
1bbebae0635c update slide
akahori
parents: 16
diff changeset
108
10
9627f1774b45 add slide
akahori
parents:
diff changeset
109 # まとめ
9627f1774b45 add slide
akahori
parents:
diff changeset
110
19
1bbebae0635c update slide
akahori
parents: 16
diff changeset
111 - Christieを用いてコンセンサスアルゴリズムのPaxos, ブロック, トランザクション, proof of workも実装した.
1bbebae0635c update slide
akahori
parents: 16
diff changeset
112 - これらを繋げてブロックチェーンにできれば, Christieにブロックチェーンが実装できる. パブリックブロックチェーンもプライベートブロックチェーンもどちらも作れる. 2つ作って速度比較も行える.