annotate midterm/midterm.tex @ 3:690b2e6a1713

mindmap
author akahori
date Sun, 11 Nov 2018 22:17:17 +0900
parents 76397fc5bc2a
children e8b8a3fdf5e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76397fc5bc2a first commit
akahori
parents:
diff changeset
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
76397fc5bc2a first commit
akahori
parents:
diff changeset
2 \usepackage[dvipdfmx]{graphicx}
76397fc5bc2a first commit
akahori
parents:
diff changeset
3 \usepackage{picins}
76397fc5bc2a first commit
akahori
parents:
diff changeset
4 \usepackage{fancyhdr}
76397fc5bc2a first commit
akahori
parents:
diff changeset
5 \usepackage{url}
76397fc5bc2a first commit
akahori
parents:
diff changeset
6 \usepackage{bussproofs}
76397fc5bc2a first commit
akahori
parents:
diff changeset
7 \usepackage{listings,jlisting}
76397fc5bc2a first commit
akahori
parents:
diff changeset
8 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{./images/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
76397fc5bc2a first commit
akahori
parents:
diff changeset
9 \rhead{}
76397fc5bc2a first commit
akahori
parents:
diff changeset
10 \cfoot{}
76397fc5bc2a first commit
akahori
parents:
diff changeset
11
76397fc5bc2a first commit
akahori
parents:
diff changeset
12 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
76397fc5bc2a first commit
akahori
parents:
diff changeset
13 \setlength{\headheight}{0mm}
76397fc5bc2a first commit
akahori
parents:
diff changeset
14 \setlength{\headsep}{5mm}
76397fc5bc2a first commit
akahori
parents:
diff changeset
15 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
76397fc5bc2a first commit
akahori
parents:
diff changeset
16 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
76397fc5bc2a first commit
akahori
parents:
diff changeset
17 \setlength{\textwidth}{181mm}
76397fc5bc2a first commit
akahori
parents:
diff changeset
18 \setlength{\textheight}{261mm}
76397fc5bc2a first commit
akahori
parents:
diff changeset
19 \setlength{\footskip}{0mm}
76397fc5bc2a first commit
akahori
parents:
diff changeset
20 \pagestyle{empty}
76397fc5bc2a first commit
akahori
parents:
diff changeset
21
76397fc5bc2a first commit
akahori
parents:
diff changeset
22 \lstset{
76397fc5bc2a first commit
akahori
parents:
diff changeset
23 frame=single,
76397fc5bc2a first commit
akahori
parents:
diff changeset
24 keepspaces=true,
76397fc5bc2a first commit
akahori
parents:
diff changeset
25 breaklines=true,
76397fc5bc2a first commit
akahori
parents:
diff changeset
26 xleftmargin=0zw,
76397fc5bc2a first commit
akahori
parents:
diff changeset
27 xrightmargin=0zw,
76397fc5bc2a first commit
akahori
parents:
diff changeset
28 framerule=.2pt,
76397fc5bc2a first commit
akahori
parents:
diff changeset
29 columns=[l]{fullflexible},
76397fc5bc2a first commit
akahori
parents:
diff changeset
30 language={},
76397fc5bc2a first commit
akahori
parents:
diff changeset
31 tabsize=4,
76397fc5bc2a first commit
akahori
parents:
diff changeset
32 lineskip=-0.5zw,
76397fc5bc2a first commit
akahori
parents:
diff changeset
33 escapechar={@},
76397fc5bc2a first commit
akahori
parents:
diff changeset
34 }
76397fc5bc2a first commit
akahori
parents:
diff changeset
35
76397fc5bc2a first commit
akahori
parents:
diff changeset
36
76397fc5bc2a first commit
akahori
parents:
diff changeset
37
76397fc5bc2a first commit
akahori
parents:
diff changeset
38
76397fc5bc2a first commit
akahori
parents:
diff changeset
39 \begin{document}
76397fc5bc2a first commit
akahori
parents:
diff changeset
40 \title{Christieによるブロックチェーンの実装}
76397fc5bc2a first commit
akahori
parents:
diff changeset
41 \author{155753A 氏名: 赤堀 貴一 指導教員: 河野 真治}
76397fc5bc2a first commit
akahori
parents:
diff changeset
42 \date{}
76397fc5bc2a first commit
akahori
parents:
diff changeset
43 \maketitle
76397fc5bc2a first commit
akahori
parents:
diff changeset
44
76397fc5bc2a first commit
akahori
parents:
diff changeset
45 \thispagestyle{fancy}
76397fc5bc2a first commit
akahori
parents:
diff changeset
46
76397fc5bc2a first commit
akahori
parents:
diff changeset
47 \section{研究目的}
76397fc5bc2a first commit
akahori
parents:
diff changeset
48 %% 分散OSを作りたい.
76397fc5bc2a first commit
akahori
parents:
diff changeset
49
76397fc5bc2a first commit
akahori
parents:
diff changeset
50 コンピュータにおいてデータの破損や不整合は深刻な異常を引き起こす原因となる. そのため, 破損, 不整合を検知するために, 近年注目されたブロックチェーン技術を用いる. ブロックチェーンは分散システムとして注目されており, データの破損や不整合をハッシュ値によって比較できる. そして, 誤操作や改ざんがあった場合でも, ブロックチェーンを用いることで簡単にデータの追跡が行える.
76397fc5bc2a first commit
akahori
parents:
diff changeset
51
76397fc5bc2a first commit
akahori
parents:
diff changeset
52 当研究室では分散フレームワークとしてChristieを開発しており, これはGearsOSにファイルシステムとして組み込む予定がある. そのため, Christieにブロックチェーンを実装し, GearsOSに組み込むことにより, GearsOSのファイルシステムにおいてデータの破損, 不整合を検知できる. また, GearsOS同士による分散ファイルシステムを構成することができ, 非中央的にデータの検証ができるようになる. もし分散システムを構成しない場合でもデータの整合性保持は行え, 上記の目的は達成できる.
76397fc5bc2a first commit
akahori
parents:
diff changeset
53
76397fc5bc2a first commit
akahori
parents:
diff changeset
54 よって, Christieにブロックチェーンを実装し, 分散環境でのデータの整合性保持, 追跡を行う.
76397fc5bc2a first commit
akahori
parents:
diff changeset
55
76397fc5bc2a first commit
akahori
parents:
diff changeset
56
76397fc5bc2a first commit
akahori
parents:
diff changeset
57
76397fc5bc2a first commit
akahori
parents:
diff changeset
58 %%しかし分散されたデータにおいては, データが保存された単一, またはいくつかのサーバーがダウンしたり, 不正アクセス, 誤ったデータの変更により, これらの障害が起こり得る. それらを解決するのが分散ファイルシステムだが, HDFSやGlusterFSなど, 結局は特定のサーバー上にファイルが置かれるため, サーバーのダウン,
76397fc5bc2a first commit
akahori
parents:
diff changeset
59
76397fc5bc2a first commit
akahori
parents:
diff changeset
60
76397fc5bc2a first commit
akahori
parents:
diff changeset
61 %% 整合性保持のproof of workでは, OSのcpu使用率に応じて, ファイルの同期が早くなるようにする.
76397fc5bc2a first commit
akahori
parents:
diff changeset
62
76397fc5bc2a first commit
akahori
parents:
diff changeset
63 \section{ブロックチェーン}
76397fc5bc2a first commit
akahori
parents:
diff changeset
64 ブロックチェーンとは分散型台帳技術とも呼ばれ, 複数のトランザクションをまとめたブロックをつなげたものを, システムに参加しているすべてのノードが参照できる技術である.
76397fc5bc2a first commit
akahori
parents:
diff changeset
65
76397fc5bc2a first commit
akahori
parents:
diff changeset
66 ブロックは前のブロックと暗号化ハッシュでつながっており, 現在のブロックのハッシュは前のブロックのハッシュに依存して作られる. そのため, もしブロックを改ざんしたいとしたら, そのブロックにつながるすべてのブロックを改ざんしなければならない. しかし, その仕組みだけだと簡単に改ざんができてしまう. そのため, ブロックに付け加える場合にはある作業を行わせ, それによってある条件に収まるHashを作らせる. 例えば, ビットコインだとProof of Workという計算問題を解かせ, Hashを生成する. これは単純には
76397fc5bc2a first commit
akahori
parents:
diff changeset
67
76397fc5bc2a first commit
akahori
parents:
diff changeset
68 \begin{lstlisting}
76397fc5bc2a first commit
akahori
parents:
diff changeset
69 while(1){
76397fc5bc2a first commit
akahori
parents:
diff changeset
70 randomSeed(前のHash + nonce)
76397fc5bc2a first commit
akahori
parents:
diff changeset
71 // 0 < rand() < 10000
76397fc5bc2a first commit
akahori
parents:
diff changeset
72 このブロックのHash = rand() \% 10000
76397fc5bc2a first commit
akahori
parents:
diff changeset
73 if (このブロックのHash < 100){
76397fc5bc2a first commit
akahori
parents:
diff changeset
74 break
76397fc5bc2a first commit
akahori
parents:
diff changeset
75 }
76397fc5bc2a first commit
akahori
parents:
diff changeset
76 nonce ++
76397fc5bc2a first commit
akahori
parents:
diff changeset
77 }
76397fc5bc2a first commit
akahori
parents:
diff changeset
78 \end{lstlisting}
76397fc5bc2a first commit
akahori
parents:
diff changeset
79
76397fc5bc2a first commit
akahori
parents:
diff changeset
80
76397fc5bc2a first commit
akahori
parents:
diff changeset
81 と言う問題を解くのと同義である. 実際には $0 < rand() < 10000$はもっと大きな値である.
76397fc5bc2a first commit
akahori
parents:
diff changeset
82
76397fc5bc2a first commit
akahori
parents:
diff changeset
83 もし至るところでブロックが作られ, 競合すると, 競合したブロック同士で, つながっているブロックが多いものを正しいブロックとする.
76397fc5bc2a first commit
akahori
parents:
diff changeset
84
76397fc5bc2a first commit
akahori
parents:
diff changeset
85 通信はp2pで行われ, ブロックが承認された場合, 他のノードにブロードキャストされる.
76397fc5bc2a first commit
akahori
parents:
diff changeset
86
76397fc5bc2a first commit
akahori
parents:
diff changeset
87
76397fc5bc2a first commit
akahori
parents:
diff changeset
88
76397fc5bc2a first commit
akahori
parents:
diff changeset
89 \section{Christie}
76397fc5bc2a first commit
akahori
parents:
diff changeset
90
76397fc5bc2a first commit
akahori
parents:
diff changeset
91 Christieは当研究室で開発している分散フレームワークである. ChristieはJavaで書かれているが, 当研究室で開発しているGearsOSに組み込まれる予定がある. そのため, GearsOSを構成する言語Continuation based Cと似たCodeGear(以下CG)とDataGear(以下DG)という概念がある. CGはメソッドであり, DGは変数データに相当する. また, ChristieにはCodeGearManager(以下CGM)とDataGearManager(以下DGM)という概念もある. CGMはノードに当たり, DGM, CG, DGを管理する. DGMはDGを管理するものであり, putという操作により変数データ, つまりDGを格納できる.
76397fc5bc2a first commit
akahori
parents:
diff changeset
92
76397fc5bc2a first commit
akahori
parents:
diff changeset
93 DGMにはLocalとRemoteと2つの種類があり, Localであれば, そのCGMにDGを格納していき, Remoteであれば接続したRemote先のCGMにDGを格納できる. DGを取り出す際にはアノテーションを付けることで, データの取り出し方も指定できる. Take, Peekという操作があり, Takeは読み込んだDGが消えるが, PeekはDGを消さずにそのまま残す.
76397fc5bc2a first commit
akahori
parents:
diff changeset
94
76397fc5bc2a first commit
akahori
parents:
diff changeset
95 CGはCGMによって実行されるが, 実行するにはDGが全て揃う必要がある. もしDGが全て揃わない場合, CGMはずっとlistenする.
76397fc5bc2a first commit
akahori
parents:
diff changeset
96
76397fc5bc2a first commit
akahori
parents:
diff changeset
97
76397fc5bc2a first commit
akahori
parents:
diff changeset
98
76397fc5bc2a first commit
akahori
parents:
diff changeset
99 \nocite{*}
76397fc5bc2a first commit
akahori
parents:
diff changeset
100 \bibliographystyle{junsrt}
76397fc5bc2a first commit
akahori
parents:
diff changeset
101 \bibliography{reference}
76397fc5bc2a first commit
akahori
parents:
diff changeset
102 \end{document}