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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: 分散ネットワークChristieによるBlockchainの実装
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Takahiro Ikki, Shinji Kono
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile: 琉球大学
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 code-engine: coderay
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
7 ## 研究目的
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
cd438764f55c add svg
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
12 - 将来的にGearsOSに組み込む予定のある分散フレームワークChristieに分散フレームワークを実装することにした。
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 <!--
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 # OS の拡張性と信頼性の両立
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 -->
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
5676b95c02b6 add svg 2
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
63 <!--
22
e7239fe266f0 Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
64
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
65 ## Christieの言語概念
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 - CGはスレッド, クラスに相当し, javaの継承を用いて記述する.
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 - DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 - CGMはノードであり, DG, CG, DGMを管理する.
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 - DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
70 - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
5676b95c02b6 add svg 2
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
73 -->
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
92 ## Annottation
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 - ChristieではInputDGの指定にはアノテーションを使う。
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 ```
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 ```Code
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 digraph test {
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 node0 -> node1 [label="right"]
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 node1 -> node2 [label="right"]
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 node2 -> node0 [label="right"]
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 }
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 ```
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 </div>
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 <div style="text-align: center;">
19
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
166  <img src="../paper/images/chain.svg" alt="MetaGear" width="600">
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 </div>
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
173 ## Transaction
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 - トランザクションとはデータのやり取りを行なった記録の最小単位である。トランザクションの構造は次のとおりである。
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
175 - TransactionHash
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
176 - トランザクションをハッシュ化したもの。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
177 - data
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
178 - データ
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
179 - sendAddress
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
180 - 送り元のアドレス。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
181 - receiveAddress
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
182 - 送り先のアカウントのアドレス。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
192 ## コンセンサスアルゴリズム
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
193 - fork
24
a263efdfdab5 Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
194 - ブロック生成を行う過程で、異なるブロックを持った二つのブロックチェーンが生成されてしまうことがある。そのうちどちらかを破棄する必要が生じ、この状態をforkと呼ぶ。
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
195 - fork状態を解消するために用いられるのがコンセンサスアルゴリズムである。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
196 - ブロックチェーンはパブリックブロックチェーンとコンソーシアムブロックチェーンの場合によってコンセンサスアルゴリズムが変わる。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
197 - パブリックブロックチェーン
22
e7239fe266f0 Revise 5/29 20:00
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
198 - 不特定多数のノードが参加するブロックチェーンを指す。
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
199 - 不特定多数のノード間、全体のノードの参加数が変わる状況でコンセンサスの変わるアルゴリズムでなければならない。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
200 - コンソーシアムブロックチェーン
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
201 - 許可したノードのみが参加できるブロックチェーンである。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
5676b95c02b6 add svg 2
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
233 - Paxosは3つの役割ノードがある。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
234 - proposer
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
235 - 値を提案するノード。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
236 - accepter
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
237 - 値を決めるノード。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
238 - lerner
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
239 - accepterから値を集計し、過半数以上のaccepterが持っている値を決める。
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
253 - 提案
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
254 - 異なる提案ごとにユニークな提案番号と値からなる。提案番号とは、異なる提案を見分けるための識別子であり、単調増加である。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
255 - 値(提案)がacceptされる
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
256 - accepterによって値(提案)が決まること。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
257 - 値(提案)が選択(chosen)される
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
258 - 過半数以上のacceptorによって、値がacceptされた場合、それを値(提案)が選択されたと言う。
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
259
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
260
18
3e0a1680ae59 wrote ~Experiment
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
261 ## paxosのアルゴリズム
17
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 </div>
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
d1dff3305e0d upgrade
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
281 - (2)acceptorはacceptリクエストが来た場合、Promiseした提案よりもacceptリクエストで提案された番号が低ければ、その提案を拒否する。それ以外の場合、acceptする。
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282
24
a263efdfdab5 Revise last on 5/29
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
283
16
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
2b71bf2c73c9 add slide
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
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
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
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
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
301 - Torqueはjobという単位でプログラムを管理し、リソースを確保できたら実行する。jobはqsubというコマンドを使って複数登録することができる。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
302
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
303 ## Torque
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
304 - Torqueには主に三つのNodeの種類がある。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
305 - Master Node
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
306 - pds.serverを実行しているノード。他のノードの役割とも併用できる。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
307 - Submit/Interactive Nodes
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
308 - クライアントがjobを投入したり監視したりするノード。qsubやqstatのようなクライアントコマンドが実行できる。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
309 - Computer Nodes
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
310 - 投入されたjobを実際に実行するノード。pds.momが実行されており、それによってjobをstart、kill、管理する。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
311
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
312 ## 実際の実験内容
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
313 - KVM上にMaster NOde, Submit/InteractiveNodeの役割を持つVM1台、ComputerNOdesとして15台を用意しjobへ投入。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
314 - 一意の数を決定することが確認できた。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
315 - Lernerが値を選択した後も、提案番号がより大きいものを出力していたが値が覆らなかった。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
316 - 本実験では分かりやすいよう数字で行なったが、タランザクション、ブロックに応用することでブロックチェーンのコンセンサス部分を完成させることができる。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
317
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
318 <div style="text-align: center;">
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
319  <img src="../paper/images/kvm.svg" alt="MetaGear" width="600">
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
320 </div>
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
321
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
322
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
323 ## まとめ
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
324 - Paxosの動作は確認できた。トランザクションの速度がノード数にどのように影響されるか調査する必要がある。
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
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
a3203802637b written finish
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
327 - 以上のものを組み合わせれば簡易的なブロックチェーンが作ることができ、Paxosによるブロックチェーンが分散クラスタ上でファイルやり取りをした際のスケーラビリティを計測することができるようになる。