comparison slide/prosym.html @ 17:d1dff3305e0d

upgrade
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sat, 25 May 2019 15:44:23 +0900
parents 2b71bf2c73c9
children 3e0a1680ae59
comparison
equal deleted inserted replaced
16:2b71bf2c73c9 17:d1dff3305e0d
89 89
90 90
91 <div class='slide'> 91 <div class='slide'>
92 92
93 <!-- _S9SLIDE_ --> 93 <!-- _S9SLIDE_ -->
94 <h1 id="研究目的">研究目的</h1> 94 <h2 id="研究目的">研究目的</h2>
95 95
96 <ul> 96 <ul>
97 <li>コンピュータのデータの不整合は, 誤作動や複数人によるデータの同時書き込みによって発生し, 特に分散環境下で問題となる.</li> 97 <li>コンピュータのデータの不整合は, 誤作動や複数人によるデータの同時書き込みによって発生し, 特に分散環境下で問題となる.</li>
98 <li>ブロックチェーンはデータの分散ができ, 不整合の検知が可能な仕組みとなっている.</li> 98 <li>ブロックチェーンはデータの分散ができ, 不整合の検知が可能な仕組みとなっている.</li>
99 <li>当研究室で開発中のGearsOSの分散システムの技術として, ブロックチェーンが使用できるか調査中である.</li> 99 <li>当研究室で開発中のGearsOSの分散システムの技術として, ブロックチェーンが使用できるか調査中である.</li>
109 109
110 </div> 110 </div>
111 111
112 <div class='slide'> 112 <div class='slide'>
113 <!-- _S9SLIDE_ --> 113 <!-- _S9SLIDE_ -->
114 <h1 id="christie">Christie</h1> 114 <h2 id="christie">Christie</h2>
115 <ul> 115 <ul>
116 <li>Christieは当研究室で開発している分散フレームワークである.</li> 116 <li>Christieは当研究室で開発している分散フレームワークである.</li>
117 <li>現在はjava上で開発されているが, GearsOSに組み込む予定があるため, 言語Continuation based Cへ書き換え可能な構成となっている. (?GeasOSの解説がより欲しい?)</li> 117 <li>現在はjava上で開発されているが, GearsOSに組み込む予定があるため, 言語Continuation based Cへ書き換え可能な構成となっている. (?GeasOSの解説がより欲しい?)</li>
118 <li>言語CbCと近い概念としてCodeGear(以下CG), CodeGearManager(以下CGM), DataGear(以下DG), DataGearManager(以下DGM)という概念が存在する.</li> 118 <li>言語CbCと近い概念として以下の概念が存在する。
119 </ul> 119 <ul>
120 120 <li>CodeGear(以下CG)</li>
121 121 <li>CodeGearManager(以下CGM)</li>
122 122 <li>DataGear(以下DG)</li>
123 </div> 123 <li>DataGearManager(以下DGM)</li>
124 124 </ul>
125 <div class='slide'> 125 </li>
126 <!-- _S9SLIDE_ --> 126 </ul>
127 <h1 id="christieの言語概念">Christieの言語概念</h1> 127
128
129
130 </div>
131
132 <div class='slide'>
133 <!-- _S9SLIDE_ -->
134 <h2 id="christieの言語概念">Christieの言語概念</h2>
128 <ul> 135 <ul>
129 <li>CGはスレッド, クラスに相当し, javaの継承を用いて記述する.</li> 136 <li>CGはスレッド, クラスに相当し, javaの継承を用いて記述する.</li>
130 <li>DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.</li> 137 <li>DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.</li>
131 <li>CGMはノードであり, DG, CG, DGMを管理する.</li> 138 <li>CGMはノードであり, DG, CG, DGMを管理する.</li>
132 <li>DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.</li> 139 <li>DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
133 <li>DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。</li> 140 <ul>
134 <li>DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.</li> 141 <li>DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。</li>
135 </ul> 142 <li>DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.</li>
136 143 </ul>
137 144 </li>
138 145 </ul>
139 </div> 146
140 147
141 <div class='slide'> 148
142 <!-- _S9SLIDE_ --> 149 </div>
143 <h1 id="dgm">DGM</h1> 150
151 <div class='slide'>
152 <!-- _S9SLIDE_ -->
153 <h2 id="dgm">DGM</h2>
144 <ul> 154 <ul>
145 <li>RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。</li> 155 <li>RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。</li>
146 <li>立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。</li> 156 <li>立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。</li>
147 </ul> 157 </ul>
148 158
150 160
151 </div> 161 </div>
152 162
153 <div class='slide'> 163 <div class='slide'>
154 <!-- _S9SLIDE_ --> 164 <!-- _S9SLIDE_ -->
155 <h1 id="dgのアノテーション">DGのアノテーション</h1> 165 <h2 id="dgのアノテーション">DGのアノテーション</h2>
156 <ul> 166 <ul>
157 <li>DGを取り出す際にはCG内で宣言した変数データにアノテーションをつける。DGアノテーションには 167 <li>DGを取り出す際にはCG内で宣言した変数データにアノテーションをつける。DGアノテーションには
158 Take、Peek、TakeFrom、PeekFrom、の4つがある。</li> 168 Take、Peek、TakeFrom、PeekFrom、の4つがある。
159 <li>Take 先頭のDGを読み込み、そのDGを削除する。</li> 169 <ul>
160 <li>Peek 先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。</li> 170 <li>Take
161 <li>TakeFrom Takeと似ているが、Remote DGM nameをしているすることで、その接続先のDGM からTake操作をおこえる。</li> 171 <ul>
162 <li>PeekFrom Peekと似ているが、 Remote DGM nameをしているすることで、その接続先のDGM からPeek操作をおこえる。</li> 172 <li>先頭のDGを読み込み、そのDGを削除する。</li>
163 </ul> 173 </ul>
164 174 </li>
165 175 <li>Peek
166 176 <ul>
167 </div> 177 <li>先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。</li>
168 178 </ul>
169 <div class='slide'> 179 </li>
170 <!-- _S9SLIDE_ --> 180 <li>TakeFrom
171 <h1 id="christieのコード例">Christieのコード例</h1> 181 <ul>
182 <li>Takeと似ているが、Remote DGM nameをしているすることで、その接続先のDGM からTake操作をおこえる。</li>
183 </ul>
184 </li>
185 <li>PeekFrom
186 <ul>
187 <li>Peekと似ているが、 Remote DGM nameをしているすることで、その接続先のDGM からPeek操作をおこえる。</li>
188 </ul>
189 </li>
190 </ul>
191 </li>
192 </ul>
193
194
195
196 </div>
197
198 <div class='slide'>
199 <!-- _S9SLIDE_ -->
200 <h2 id="christieのコード例">Christieのコード例</h2>
172 <pre><code class="language-code">package christie.example.HelloWorld; 201 <pre><code class="language-code">package christie.example.HelloWorld;
173 202
174 import christie.codegear.CodeGearManager; 203 import christie.codegear.CodeGearManager;
175 import christie.codegear.StartCodeGear; 204 import christie.codegear.StartCodeGear;
176 205
194 223
195 </div> 224 </div>
196 225
197 <div class='slide'> 226 <div class='slide'>
198 <!-- _S9SLIDE_ --> 227 <!-- _S9SLIDE_ -->
199 <h1 id="annottation">Annottation</h1> 228 <h2 id="annottation">Annottation</h2>
200 <ul> 229 <ul>
201 <li>ChristieではInputDGの指定にはアノテーションを使う。</li> 230 <li>ChristieではInputDGの指定にはアノテーションを使う。</li>
202 <li>アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。</li> 231 <li>アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。</li>
203 <li>先頭に@をつけることで記述し、オリジナルのアノテーションを定義することもできるInput 232 <li>先頭に@をつけることで記述し、オリジナルのアノテーションを定義することもできるInput
204 となる型の変するを直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。 233 となる型の変するを直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。
205 -
206 <pre><code class="language-code">@Take 234 <pre><code class="language-code">@Take
207 public String name; 235 public String name;
208 </code></pre> 236 </code></pre>
209 <pre><code class="language-code">@TakeFrom("remote") 237 <pre><code class="language-code">@TakeFrom("remote")
210 public String name; 238 public String name;
216 244
217 </div> 245 </div>
218 246
219 <div class='slide'> 247 <div class='slide'>
220 <!-- _S9SLIDE_ --> 248 <!-- _S9SLIDE_ -->
221 <h1 id="topologymanager">TopologyManager</h1> 249 <h2 id="topologymanager">TopologyManager</h2>
222 <ul> 250 <ul>
223 <li>TopologyManagerとはTopologyを形成するために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。</li> 251 <li>TopologyManagerとはTopologyを形成するために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。</li>
224 <li>TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。</li> 252 <li>TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。</li>
225 <li>動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。</li> 253 <li>動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。</li>
226 </ul> 254 </ul>
229 257
230 </div> 258 </div>
231 259
232 <div class='slide'> 260 <div class='slide'>
233 <!-- _S9SLIDE_ --> 261 <!-- _S9SLIDE_ -->
234 <h1 id="静的topology">静的Topology</h1> 262 <h2 id="静的topology">静的Topology</h2>
235 <ul> 263 <ul>
236 <li>静的Toopologyはdotファイルを与えることでノード関係を下の図のようにする。</li> 264 <li>静的Toopologyはdotファイルを与えることでノード関係を下の図のようにする。</li>
237 <li>静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて、CodeGearが実行される。 265 <li>静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて、CodeGearが実行される。
238 <pre><code class="language-Code">digraph test { 266 <pre><code class="language-Code">digraph test {
239 node0 -&gt; node1 [label="right"] 267 node0 -&gt; node1 [label="right"]
252 280
253 </div> 281 </div>
254 282
255 <div class='slide'> 283 <div class='slide'>
256 <!-- _S9SLIDE_ --> 284 <!-- _S9SLIDE_ -->
257 <h1 id="ブロックチェーンのトランザクション">ブロックチェーンのトランザクション</h1> 285 <h2 id="ブロックチェーンのトランザクション">ブロックチェーンのトランザクション</h2>
258 <ul> 286 <ul>
259 <li>ブロックチェーンはP2Pにてネットワーク間が動作している。つまり、ブロックチェーンにはサーバー、クライアントの区別がなく全てのノードが平等である。</li> 287 <li>ブロックチェーンはP2Pにてネットワーク間が動作している。つまり、ブロックチェーンにはサーバー、クライアントの区別がなく全てのノードが平等である。</li>
260 <li>ブロックチェーンにおけるブロックは複数のトランザクションをまとめたものである。ブロックの構造は使用するコンセンサスにより変わるが基本的には、previous block hash, merkle root hash, timeが含まれるBlockHeaderとTransactionListにより構成される。</li> 288 <li>ブロックチェーンにおけるブロックは複数のトランザクションをまとめたものである。ブロックの構造は使用するコンセンサスにより変わるが基本的には、previous block hash, merkle root hash, timeが含まれるBlockHeaderとTransactionListにより構成される。</li>
261 </ul> 289 </ul>
262 290
264 292
265 </div> 293 </div>
266 294
267 <div class='slide'> 295 <div class='slide'>
268 <!-- _S9SLIDE_ --> 296 <!-- _S9SLIDE_ -->
269 <h1 id="blockheader">BlockHeader</h1> 297 <h2 id="blockheader">BlockHeader</h2>
270 <ul> 298 <ul>
271 <li>BlockHeaderには、前のブロックをハッシュ化したもの、トランザクションをまとめたmarkle treeのrootのhash、そのブロックを生成したtimeとなっている。</li> 299 <li>BlockHeaderには、前のブロックをハッシュ化したもの、トランザクションをまとめたmarkle treeのrootのhash、そのブロックを生成したtimeとなっている。</li>
272 <li>previous block hashは、前のブロックのパラメータを並べてhash化したものである。</li> 300 <li>previous block hashは、前のブロックのパラメータを並べてhash化したものである。</li>
273 <li>上記のものがそれぞれ連なっていることによって下の図のようなブロック繋がっている。そのため一つが更新されたらそのあとにつながるブロック全てを更新しなければならなくなる。</li> 301 <li>上記のものがそれぞれ連なっていることによって下の図のようなブロック繋がっている。そのため一つが更新されたらそのあとにつながるブロック全てを更新しなければならなくなる。</li>
274 </ul> 302 </ul>
280 308
281 </div> 309 </div>
282 310
283 <div class='slide'> 311 <div class='slide'>
284 <!-- _S9SLIDE_ --> 312 <!-- _S9SLIDE_ -->
285 <h1 id="blockの動作">Blockの動作</h1> 313 <h2 id="blockの動作">Blockの動作</h2>
286 <ul> 314 <ul>
287 <li>ブロックが生成された場合、知っているノードにそのブロックをブロードキャストする。通信量を抑えるためにブロックを送ったあと、ブロックをシリアライズして送信する場合もある。</li> 315 <li>ブロックが生成された場合、知っているノードにそのブロックをブロードキャストする。通信量を抑えるためにブロックを送ったあと、ブロックをシリアライズして送信する場合もある。</li>
288 <li>誤りがあればさらにそのノードがブロックをブロードキャストする。そしてTransaction PoolというTransactionをためておく場所から、そのブロックに含まれるTransactionを削除し、新しいブロックを生成する。</li> 316 <li>誤りがあればさらにそのノードがブロックをブロードキャストする。そしてTransaction PoolというTransactionをためておく場所から、そのブロックに含まれるTransactionを削除し、新しいブロックを生成する。</li>
289 </ul> 317 </ul>
290 318
292 320
293 </div> 321 </div>
294 322
295 <div class='slide'> 323 <div class='slide'>
296 <!-- _S9SLIDE_ --> 324 <!-- _S9SLIDE_ -->
297 <h1 id="transaction">Transaction</h1> 325 <h2 id="transaction">Transaction</h2>
298 <ul> 326 <ul>
299 <li>トランザクションとはデータのやり取りを行なった記録の最小単位である。トランザクションの構造は次のとおりである。</li> 327 <li>トランザクションとはデータのやり取りを行なった記録の最小単位である。トランザクションの構造は次のとおりである。</li>
300 <li>TransactionHash トランザクションをハッシュ化したもの。</li> 328 <li>TransactionHash
301 <li>data データ</li> 329 <ul>
302 <li>sendAddress 送り元のアドレス。</li> 330 <li>トランザクションをハッシュ化したもの。</li>
303 <li>receiveAddress 送り先のアカウントのアドレス。</li> 331 </ul>
304 <li>signature トランザクションの一部と秘密鍵をSHA256でハッシュ化したもの。ECDSAで署名している。</li> 332 </li>
333 <li>data
334 <ul>
335 <li>データ</li>
336 </ul>
337 </li>
338 <li>sendAddress
339 <ul>
340 <li>送り元のアドレス。</li>
341 </ul>
342 </li>
343 <li>receiveAddress
344 <ul>
345 <li>送り先のアカウントのアドレス。</li>
346 </ul>
347 </li>
348 <li>signature
349 <ul>
350 <li>トランザクションの一部と秘密鍵をSHA256でハッシュ化したもの。ECDSAで署名している。</li>
351 </ul>
352 </li>
305 <li>トランザクションはノード間で伝搬され、ノードごとに検証される。そして検証を終え、不正なトランザクションであればそれを破棄し、検証に通った場合はTransaction Poolに取り込まれ、また検証したノードからトランザクションがブロードキャストする。</li> 353 <li>トランザクションはノード間で伝搬され、ノードごとに検証される。そして検証を終え、不正なトランザクションであればそれを破棄し、検証に通った場合はTransaction Poolに取り込まれ、また検証したノードからトランザクションがブロードキャストする。</li>
306 </ul> 354 </ul>
307 355
308 356
309 357
310 </div> 358 </div>
311 359
312 <div class='slide'> 360 <div class='slide'>
313 <!-- _S9SLIDE_ --> 361 <!-- _S9SLIDE_ -->
314 <h1 id="data-gear">Data Gear</h1> 362 <h2 id="コンセンサスアルゴリズム">コンセンサスアルゴリズム</h2>
315 <ul> 363 <ul>
316 <li>Data Gear は データの単位であり、int や文字列などの Primitive Type を持っている。</li> 364 <li>fork
317 <li>Code Gear は任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。</li> 365 <ul>
318 <li>Code Gear は接続された Data Gear 以外には参照を行わない。</li> 366 <li>ブロック生成後にブロードキャストを行うと、ブロック高の同じもしくは高いブロックチェーンにたどり着く状態があり、異なるブロックを持った二つのブロックチェーンのうちどちらかを破棄する必要がある。</li>
319 </ul> 367 </ul>
320 368 </li>
321 369 <li>fork状態を解消するために用いられるのがコンセンサスアルゴリズムである。</li>
322 370 <li>ブロックチェーンはパブリックブロックチェーンとコンソーシアムブロックチェーンの場合によってコンセンサスアルゴリズムが変わる。
323 </div> 371 <ul>
324 372 <li>パブリックブロックチェーン
325 <div class='slide'>
326 <!-- _S9SLIDE_ -->
327 <h1 id="gears-でのメタ計算">Gears でのメタ計算</h1>
328 <ul>
329 <li>Gears OS ではメタ計算を Meta Code Gear、Meta Data Gear で表現する。</li>
330 <li>Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する。</li>
331 <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。</li>
332 </ul>
333
334 <div style="text-align: center;">
335  <img src="./fig/meta.pdf" alt="MetaGear" width="600" />
336 </div>
337
338
339
340 </div>
341
342 <div class='slide'>
343 <!-- _S9SLIDE_ -->
344 <h1 id="gears-でのメタ計算の記述">Gears でのメタ計算の記述</h1>
345
346 <ul>
347 <li>各 Code Gear の引数は Data Gear である。</li>
348 <li>code1, node2 は ノーマルな Code Gear であり、meta は Meta Code Gear である。</li>
349 </ul>
350
351 <pre><code class="language-code">__code code1 (struct Array* array) {
352 ...
353 goto code2(array);
354 }
355
356 __code meta(struct Context* context, enum Code next) {
357 goto (context-&gt;code[next])(context);
358 }
359
360 __code code2(struct Array* array) {
361 ...
362 }
363 </code></pre>
364
365
366
367 </div>
368
369 <div class='slide'>
370 <!-- _S9SLIDE_ -->
371 <h1 id="gears-os-の構成">Gears OS の構成</h1>
372 <ul>
373 <li>Gears OS は以下の要素で構成される。
374 <ul>
375 <li>Context
376 <ul> 373 <ul>
377 <li>使用されるCode/Data Gear のリストを持っておりTaskでもある。</li> 374 <li>不特定たすのノードが参加するブロックチェーンを指す。</li>
375 <li>不特定多数のノード間、全体のノードの参加数が変わる状況でコンセンサスの変わるアルゴリズムでなければならない。</li>
378 </ul> 376 </ul>
379 </li> 377 </li>
380 <li>TaskQueue 378 <li>コンソーシアムブロックチェーン
381 <ul> 379 <ul>
382 <li>Task のリストを扱う</li> 380 <li>許可したノードのみが参加できるブロックチェーンである。</li>
383 </ul> 381 </ul>
384 </li> 382 </li>
385 <li>TaskManager 383 </ul>
384 </li>
385 </ul>
386
387
388
389 </div>
390
391 <div class='slide'>
392 <!-- _S9SLIDE_ -->
393 <h1 id="paxos">Paxos</h1>
394 <ul>
395 <li>Paxosはノードの多数決によってコンセンサスをとるアルゴリズムである。</li>
396 <li>Paxosは以下のような問題があっても値を一意に決めることができる。
397 <ul>
398 <li>1,プロセス毎に処理の速度が違う。つまりメッセージの返信が遅い可能性がある。</li>
399 <li>2,通信にどれだけの時間がかかるかわからず、その途中でメッセージが失われる可能性がある。</li>
400 <li>3,プロセスは停止する可能性もある。</li>
401 </ul>
402 </li>
403 </ul>
404
405
406
407 </div>
408
409 <div class='slide'>
410 <!-- _S9SLIDE_ -->
411 <h1 id="paxosの役割ノード">Paxosの役割ノード</h1>
412 <ul>
413 <li>Paxosは3つの役割ノードがある。
414 <ul>
415 <li>proposer
386 <ul> 416 <ul>
387 <li>Task の依存関係の解決、作成や停止を行います。</li> 417 <li>値を提案するノード。</li>
388 </ul> 418 </ul>
389 </li> 419 </li>
390 <li>Worker 420 <li>accepter
391 <ul> 421 <ul>
392 <li>Task の実行を行う</li> 422 <li>値を決めるノード。</li>
393 </ul> 423 </ul>
394 </li> 424 </li>
395 </ul> 425 <li>lerner
396 </li> 426 <ul>
427 <li>accepterから値を集計し、過半数以上のaccepterが持っている値を決める。</li>
428 </ul>
429 </li>
430 </ul>
431 </li>
432 </ul>
433
434
435
436 </div>
437
438 <div class='slide'>
439 <!-- _S9SLIDE_ -->
440 <h1 id="paxosの役割定義">Paxosの役割定義</h1>
441 <ul>
442 <li>提案
443 <ul>
444 <li>異なる提案ごとにユニークな提案番号と値からなる。提案番号とは、異なる提案を見分けるための識別子であり、単調増加である。</li>
445 </ul>
446 </li>
447 <li>値(提案)がacceptされる
448 <ul>
449 <li>accepterによって値(提案)が決まること。</li>
450 </ul>
451 </li>
452 <li>値(提案)が選択(chosen)される
453 <ul>
454 <li>過半数以上のacceptorによって、値がacceptされた場合、それを値(提案)が選択されたと言う。</li>
455 </ul>
456 </li>
457 </ul>
458
459
460
461 </div>
462
463 <div class='slide'>
464 <!-- _S9SLIDE_ -->
465 <h1 id="paxosのアルゴリズム">paxosのアルゴリズム</h1>
466 <ul>
467 <li>paxosのアルゴリズムは2フューズあり、一つ目のフェーズprepare-promiseと二つ目のフェーズaccept-acceptedの二つに区分される。</li>
468 </ul>
469
470
471
472 </div>
473
474 <div class='slide'>
475 <!-- _S9SLIDE_ -->
476 <h1 id="paxosのアルゴリズム-prepare-promise">paxosのアルゴリズム prepare-promise</h1>
477 <ul>
478 <li>(言葉での説明記入?)</li>
479 </ul>
480 <div style="text-align: center;">
481  <img src="../paper/images/prepare-promise.pdf" alt="MetaGear" width="600" />
482 </div>
483
484
485
486 </div>
487
488 <div class='slide'>
489 <!-- _S9SLIDE_ -->
490 <h1 id="paxosのアルゴリズム-accept-accepted">paxosのアルゴリズム accept-accepted</h1>
491 <ul>
492 <li>(1)proposerは過半数のacceptorから返事が来たのなら、次の提案をaccepterに送る。これをacceptリクエストという。
493 <ul>
494 <li>(a)もし、約束のみ帰って来ているのならば、任意の値vをprepareリクエストで送った提案に設定する。</li>
495 <li>(b)もし、acceptされた提案が帰って来たら、その中で最大の提案番号v’をprepareリクエストで送った提案の値として設定する。</li>
496 </ul>
497 </li>
498 <li>(2)acceptorはacceptリクエストが来た場合、Promiseした提案よりもacceptリクエストで提案された番号が低ければ、その提案を拒否する。それ以外の場合、acceptする。</li>
499 </ul>
500 <div style="text-align: center;">
501  <img src="../paper/images/accept-accepted.pdf" alt="MetaGear" width="600" />
502 </div>
503
504
505
506 </div>
507
508 <div class='slide'>
509 <!-- _S9SLIDE_ -->
510 <h1 id="paxos-1">Paxos</h1>
511 <ul>
512 <li>Proof of Workと比較しメッセージ通信量と耐障害性のトレードオフになっている。</li>
513 <li>Paxosでコンセンサスを取る際、Proof of Workと比較して次のようなメリットがある。
514 <ul>
515 <li>CPUにリソースを消費しない。</li>
516 <li>Transactionの確定に時間がかからない。</li>
517 </ul>
518 </li>
519 <li>Paxos自体がリーダー選出に向いているアルゴリズムである。そのため、リーダーを決定し、そのノードのブロックチェーンの一貫性のみをかんがえることができる。</li>
397 </ul> 520 </ul>
398 521
399 522
400 523
401 </div> 524 </div>