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