Mercurial > hg > Papers > 2019 > ikki-sigos
annotate slide/prosym.md @ 24:a263efdfdab5 default tip
Revise last on 5/29
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 29 May 2019 23:22:31 +0900 |
parents | 8a3b1147329e |
children |
rev | line source |
---|---|
16 | 1 title: 分散ネットワークChristieによるBlockchainの実装 |
2 author: Takahiro Ikki, Shinji Kono | |
3 profile: 琉球大学 | |
4 lang: Japanese | |
5 code-engine: coderay | |
6 | |
17 | 7 ## 研究目的 |
16 | 8 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
9 - コンピュータのデータの不整合の主な原因は、誤作動や複数人によるデータの同時書き込みによって発生し、特に分散環境下で問題となる。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
10 - 分散ネットワークシステムであるブロックチェーンでは、データの分散に伴うデータ不整合の検知が可能な仕組みとなっている。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
11 - 当研究室で開発中のGearsOSの分散システムの技術として, ブロックチェーンが使用できるか調査したい. |
20 | 12 - 将来的にGearsOSに組み込む予定のある分散フレームワークChristieに分散フレームワークを実装することにした。 |
16 | 13 |
14 <!-- | |
15 # OS の拡張性と信頼性の両立 | |
16 | |
17 --> | |
18 | |
17 | 19 ## Christie |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
20 - Christieは当研究室で開発している、信頼性を重視した分散フレームワークである. |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
21 - 現在はjava上で開発されているが、別言語で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
22 - ChristieではデータをGearという単位で分割して記述を行う。 |
17 | 23 - CodeGear(以下CG) |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
24 - スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
25 - DataGear(以下DG) |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
26 - DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。 |
17 | 27 - CodeGearManager(以下CGM) |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
28 - ノードに相当し, DG, CG, DataGearManagerの管理をする. |
17 | 29 - DataGearManager(以下DGM) |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
30 - DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
31 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
32 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
33 ## Christieのコード例 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
34 ```code |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
35 package christie.example.HelloWorld; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
36 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
37 import christie.codegear.CodeGearManager; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
38 import christie.codegear.StartCodeGear; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
39 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
40 public class StartHelloWorld extends StartCodeGear { |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
41 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
42 public StartHelloWorld(CodeGearManager cgm) { |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
43 super(cgm); |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
44 } |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
45 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
46 public static void main(String[] args){ |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
47 CodeGearManager cgm = createCGM(10000); #ポート番号を指定してCGMを立ち上げ。 |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
48 cgm.setup(new HelloWorldCodeGear()); #立ち上げたCGMへCGを待ちあわせる。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
49 cgm.getLocalDGM().put("helloWorld","hello"); #key "helloWorld"にhelloをput |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
50 cgm.getLocalDGM().put("helloWorld","world"); |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
51 } |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
52 } |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
53 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
54 ``` |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
55 ``` |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
56 ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
57 hello world |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
58 ``` |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
59 <!-- |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
60 - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
61 --> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
62 |
21 | 63 <!-- |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
64 |
17 | 65 ## Christieの言語概念 |
16 | 66 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する. |
67 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる. | |
68 - CGMはノードであり, DG, CG, DGMを管理する. | |
69 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる. | |
17 | 70 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。 |
71 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する. | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
72 |
21 | 73 --> |
16 | 74 |
17 | 75 ## DGM |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
76 - DGMは分散システムの肝となる他のノード間とのデータのやり取りの際に重要となる。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
77 - DGMにはLocalDGMとRemoteDGMが存在する。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
78 - LocalDGM |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
79 - LocalなDGMのプールのkeyにデータの書き込みを行う。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
80 - RemoteDSM |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
81 - Localに存在する、他のノードのLocalDGMに対応するプールのkeyにデータを書き込みする。接続しているノードの数だけ存在する。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
82 - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMへ、 Remoteの場合は接続したRemote先のCGMのDGMにDGを格納する. |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
83 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
84 <div style="text-align: center;"> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
85 <img src="../paper/images/remote_datasegment.svg" alt="MetaGear" width="400"> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
86 </div> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
87 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
88 <!-- |
16 | 89 - RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
90 --> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
91 |
17 | 92 ## Annottation |
16 | 93 - ChristieではInputDGの指定にはアノテーションを使う。 |
94 - アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。 | |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
95 - 先頭に@をつけることで記述する。オリジナルのアノテーションを定義することもでき、Input |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
96 される型の変数を直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
97 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
98 ```cc |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
99 package christie.example.HelloWorld; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
100 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
101 import christie.annotation.Take; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
102 import christie.codegear.CodeGear; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
103 import christie.codegear.CodeGearManager; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
104 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
105 public class HelloWorldCodeGear extends CodeGear { |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
106 @Take |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
107 String helloWorld; |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
108 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
109 @Override |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
110 protected void run(CodeGearManager cgm) { |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
111 System.out.print(helloWorld + " "); |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
112 cgm.setup(new HelloWorldCodeGear()); |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
113 } |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
114 } |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
115 |
16 | 116 ``` |
117 | |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
118 ## DGのアノテーション |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
119 - DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
120 Take、Peek、TakeFrom、PeekFrom、の4つがある。 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
121 - Take |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
122 - 先頭のDGを読み込み、そのDGを削除する。 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
123 - Peek |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
124 - 先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
125 - TakeFrom |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
126 - Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
127 - PeekFrom |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
128 - Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
129 |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
130 |
17 | 131 ## TopologyManager |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
132 - TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。 |
16 | 133 - TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
134 - 動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
135 - 静的Toopologyはdotファイルを与えることノード関係の構築を行う。 |
16 | 136 |
137 ```Code | |
138 digraph test { | |
139 node0 -> node1 [label="right"] | |
140 node1 -> node2 [label="right"] | |
141 node2 -> node0 [label="right"] | |
142 } | |
143 ``` | |
144 | |
145 <div style="text-align: center;"> | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
146 <img src="../paper/images/ring.svg" alt="MetaGear" width="250"> |
16 | 147 </div> |
148 | |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
149 ## ブロックチェーン |
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
150 - ネットワーク構築方式の一つである。データ情報をまとめたものをブロックと呼び、ブロックが連鎖的につながるっている形となる。 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
151 - ノードがそれぞれブロックを持つ、その間でデータの差異が生じた際に他のノードの総意によって選択し、差異の解消を行う。 |
23
8a3b1147329e
Revise 5/29 20:25
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
22
diff
changeset
|
152 - ブロックチェーンはP2P(Peer to Peer)の形にてネットワーク間が動作している。つまり、ブロックチェーンにはサーバー、クライアントの区別がなく全てのノードが対等な関係にある。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
153 |
17 | 154 ## ブロックチェーンのトランザクション |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
155 - ブロックは基本的に以下の要素によって構成される。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
156 - BlockHeader |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
157 - previous block |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
158 - 前のブロックのパラメータをハッシュ化したもの |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
159 - hashmerkle root hash |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
160 - トランザションをまとめたハッシュ木のrootのハッシュ |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
161 - time |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
162 - そのブロックが生成されたtime |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
163 - TransactionList |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
164 - 上記のものがそれぞれ連なっていることによって下の図のようなブロック繋がっている。 |
16 | 165 <div style="text-align: center;"> |
19 | 166 <img src="../paper/images/chain.svg" alt="MetaGear" width="600"> |
16 | 167 </div> |
168 | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
169 <!-- |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
170 - しっかり調査する |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
171 --> |
16 | 172 |
17 | 173 ## Transaction |
16 | 174 - トランザクションとはデータのやり取りを行なった記録の最小単位である。トランザクションの構造は次のとおりである。 |
17 | 175 - TransactionHash |
176 - トランザクションをハッシュ化したもの。 | |
177 - data | |
178 - データ | |
179 - sendAddress | |
180 - 送り元のアドレス。 | |
181 - receiveAddress | |
182 - 送り先のアカウントのアドレス。 | |
183 - signature | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
184 - トランザクションの全体を秘密鍵でハッシュ化したもの。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
185 - トランザクションはノード間で伝搬され、ノードごとに検証される。そして検証を終え、不正なトランザクションであればそれを破棄し、検証に通った場合はTransaction Poolに取り込まれる。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
186 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
187 ## Blockの動作 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
188 - ブロックが生成された場合、知っているノードにそのブロックをマルチキャストする。通信量を抑えるためにブロックを送ったあと、ブロックをシリアライズして送信する場合もある。 |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
189 - Transactionが失敗したならばそのノードがブロックをブロードキャストする。そしてTransaction PoolというTransactionをためておく場所から、そのブロックに含まれるTransactionを削除する。 |
16 | 190 |
191 | |
17 | 192 ## コンセンサスアルゴリズム |
193 - fork | |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
194 - ブロック生成を行う過程で、異なるブロックを持った二つのブロックチェーンが生成されてしまうことがある。そのうちどちらかを破棄する必要が生じ、この状態をforkと呼ぶ。 |
17 | 195 - fork状態を解消するために用いられるのがコンセンサスアルゴリズムである。 |
196 - ブロックチェーンはパブリックブロックチェーンとコンソーシアムブロックチェーンの場合によってコンセンサスアルゴリズムが変わる。 | |
197 - パブリックブロックチェーン | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
198 - 不特定多数のノードが参加するブロックチェーンを指す。 |
17 | 199 - 不特定多数のノード間、全体のノードの参加数が変わる状況でコンセンサスの変わるアルゴリズムでなければならない。 |
200 - コンソーシアムブロックチェーン | |
201 - 許可したノードのみが参加できるブロックチェーンである。 | |
202 | |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
203 <!-- |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
204 ## Proof of Work |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
205 - Proof of Workは次のような問題が生じている場合にもコンセンサスを取ることができる。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
206 - プロセス毎の処理速度が違う。つまりメッセージの返信が遅い場合がある。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
207 - 通信にどれだけの時間がかかるか分からず、その途中でメッセージが途切れる場合がある |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
208 - プロセスは停止する可能性がある。また復旧する場合もある。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
209 - 悪意ある情報を他のノードが送信する可能性がある。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
210 - Proof of Workに必要なパラメーターは次のとおりである。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
211 - nonce |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
212 - ブロックのパラメータに含まれる。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
213 - dificulty |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
214 - Proof of Workの難しさ、正確には一つのブロックを生成する時間の調整。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
215 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
216 ## Proof of Workのブロック生成手順 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
217 - 1, ブロックとnonceを加えたものをハッシュ化する。この際、nonceによって、ブロックのハッシュは全く異なるものとなる。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
218 - 2, ハッシュ化したブロックの先頭から数えた0ビットの数がdifficultyより多ければ、そのブロックにnonceを埋め込み、ブロックを作る。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
219 - 3, 2の条件に当てはまらなければnonceに1を足して1からやり直す。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
220 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
221 <div style="text-align: center;"> |
21 | 222 <img src="../paper/images/proof-of-work.svg" alt="MetaGear" width="600"> |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
223 </div> |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
224 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
225 ## Proof of workの欠点 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
226 - CPUのリソースを使用する |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
227 - Transactionが確定するのに時間がかかる。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
228 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
229 --> |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
230 |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
231 ## Paxos |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
232 - Paxosはノードの多数決によってコンセンサスをとる分散合意アルゴリズムである。 |
17 | 233 - Paxosは3つの役割ノードがある。 |
234 - proposer | |
235 - 値を提案するノード。 | |
236 - accepter | |
237 - 値を決めるノード。 | |
238 - lerner | |
239 - accepterから値を集計し、過半数以上のaccepterが持っている値を決める。 | |
16 | 240 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
241 ## Paxosの利点、特徴 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
242 - Paxosは以下のような問題があっても値を一意に決めることができる。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
243 - 1,プロセス毎に処理の速度が違う。つまりメッセージの返信が遅い可能性がある。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
244 - 2,通信にどれだけの時間がかかるかわからず、その途中でメッセージが失われる可能性がある。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
245 - 3,プロセスは停止する可能性もある。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
246 - 従来のコンセンサスアルゴリズム(Proof of Workなど)と比較し、 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
247 - CPUにリソースを消費しない。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
248 - Transactionの確定に時間がかからない。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
249 - アルゴリズムの形式上、リーダーのノードの一貫性のみを考えることで構成しやすい。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
250 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
251 |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
252 ## Paxosの役割定義 |
17 | 253 - 提案 |
254 - 異なる提案ごとにユニークな提案番号と値からなる。提案番号とは、異なる提案を見分けるための識別子であり、単調増加である。 | |
255 - 値(提案)がacceptされる | |
256 - accepterによって値(提案)が決まること。 | |
257 - 値(提案)が選択(chosen)される | |
258 - 過半数以上のacceptorによって、値がacceptされた場合、それを値(提案)が選択されたと言う。 | |
259 | |
260 | |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
261 ## paxosのアルゴリズム |
17 | 262 - paxosのアルゴリズムは2フューズあり、一つ目のフェーズprepare-promiseと二つ目のフェーズaccept-acceptedの二つに区分される。 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
263 - 単純化としてproposerの数を2、accepterの数を3、lernerの数を1とする。 |
16 | 264 <div style="text-align: center;"> |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
265 <img src="../paper/images/paxos2.svg" alt="MetaGear" width="900"> |
16 | 266 </div> |
267 | |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
268 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
269 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
270 ## paxosのアルゴリズム prepare-promise |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
271 - paxosのアルゴリズムはprepare-promiseとaccepter-acceptedの2フェーズに分けられる。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
272 - (1)proposerは提案番号nを設定した提案を過半数以上のaccepterに送る。これをprepareリクエストと呼ぶ。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
273 - (2)それぞれのaccepterは各proposerからprepareリクエストが来たら |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
274 - (a)もし、以前に送られたprepareリクエストの提案番号より、今送られて来たprepareリクエストの方が大きければ、それ以下の提案番号の提案を拒否するという約束を返す。この状態をpromiseしたという。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
275 - (b)もし値がすでにacceptされていたら、すでにacceptされているという報告を返す。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
276 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
277 ## paxosのアルゴリズム accepter-accepted |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
278 - (1))proposerは過半数のacceptorから返事が来たのなら、次の提案をaccepterに送る。これをacceptリクエストという。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
279 - (a)もし、accepterがpromiseされた状態のままであるならaccepterは提案を(acceptリクエストと同様)を選択し、lernerへacceptされた提案を報告する。 |
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
280 - (b)もし、acceptされた提案が帰って来たなら、その中で最大の提案番号を持つ提案をprepareリクエストで送った提案とする。 |
17 | 281 - (2)acceptorはacceptリクエストが来た場合、Promiseした提案よりもacceptリクエストで提案された番号が低ければ、その提案を拒否する。それ以外の場合、acceptする。 |
16 | 282 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
283 |
16 | 284 |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
285 ## Christieにおけるブロックチェーンの実装の利点 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
286 - データの取り出しが簡単。ChristieはDataGearという単位でデータを保持する。そのためブロックやトランザクションはDataGearに包めばいいため、どう送るか考えなくて済む。 |
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
287 - TopologyManagerでのテストが便利。dotファイルがあれば、TopologyManagerが任意の形でTopologyを作れる。そのため、ノードの配置については理想の環境を作れるため、理想のテスト環境を作ることができる。 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
288 - 機能ごとにファイルが実装できるため、見通しが良い。Christieは関数が終わるとsetupによって別の関数に移動するため分かりやすい実装が行える。 |
16 | 289 |
18
3e0a1680ae59
wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
290 ## Christieにおけるブロックチェーンの実装の欠点 |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
291 - デバックが難しい。cgm.setupでCodeGearが実行されるが、keyの待ち合わせで止まり、どこのCGで止まっているのか判断できなくなりやすい。例として、putするkeyのスペルミスでコードの待ち合わせが起こり、CGが実行されず、エラーなども表示されずにwaitすることがあり、誤っている部分が見つけづらい。 |
19 | 292 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
293 <!-- |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
294 - Takeの待ち合わせでCGが実行されない。2つのCGで同じ変数をTakeしようとすると、setupされた時点で変数がロックされる。この時、片方のCGはDGがもう全て揃っているのに、全ての変数が揃っていないもう片方のCGに同名の変数がロックされ、実行されない場合がある。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
295 (ロックはおかしい) |
24
a263efdfdab5
Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
296 - Takefrom,PeekFromの使い方が難しい。TakeFrom,PeekFromは引数でDGMnameを指定する。しかし、DGMの名前を静的に与えるよりも、動的に与えたい場合が多かった。 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
297 --> |
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
298 |
19 | 299 ## 実験 |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
300 - 実際にコンセンサスアルゴリズムPaxosをPC上に分散環境を実装した。分散環境場で動かすため、JobScheduleの一種であるTorque Resource Manager(Torque)を使用した。 |
19 | 301 - Torqueはjobという単位でプログラムを管理し、リソースを確保できたら実行する。jobはqsubというコマンドを使って複数登録することができる。 |
302 | |
303 ## Torque | |
304 - Torqueには主に三つのNodeの種類がある。 | |
305 - Master Node | |
306 - pds.serverを実行しているノード。他のノードの役割とも併用できる。 | |
307 - Submit/Interactive Nodes | |
308 - クライアントがjobを投入したり監視したりするノード。qsubやqstatのようなクライアントコマンドが実行できる。 | |
309 - Computer Nodes | |
310 - 投入されたjobを実際に実行するノード。pds.momが実行されており、それによってjobをstart、kill、管理する。 | |
311 | |
312 ## 実際の実験内容 | |
313 - KVM上にMaster NOde, Submit/InteractiveNodeの役割を持つVM1台、ComputerNOdesとして15台を用意しjobへ投入。 | |
314 - 一意の数を決定することが確認できた。 | |
315 - Lernerが値を選択した後も、提案番号がより大きいものを出力していたが値が覆らなかった。 | |
316 - 本実験では分かりやすいよう数字で行なったが、タランザクション、ブロックに応用することでブロックチェーンのコンセンサス部分を完成させることができる。 | |
317 | |
318 <div style="text-align: center;"> | |
319 <img src="../paper/images/kvm.svg" alt="MetaGear" width="600"> | |
320 </div> | |
321 | |
322 | |
323 ## まとめ | |
324 - Paxosの動作は確認できた。トランザクションの速度がノード数にどのように影響されるか調査する必要がある。 | |
325 - ChristieのTopology Managerは実験するノードの設定を行う集中制度ノードであり、ブロックチェーンとの相性は良くないが、分散ファイルシステムなどの用途の場合、このような手法の方がノードの管理が可能な利点がある。 | |
22
e7239fe266f0
Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
326 - 現在、ChristieではBlock,Transaction,Hashの生成、署名、Proof of Workのためのクラスは作られている。しかし、Transactionに置いてまだファイルのデータを入れる機能がない。 |
19 | 327 - 以上のものを組み合わせれば簡易的なブロックチェーンが作ることができ、Paxosによるブロックチェーンが分散クラスタ上でファイルやり取りをした際のスケーラビリティを計測することができるようになる。 |