Mercurial > hg > Papers > 2019 > ikki-sigos
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 -> node1 [label="right"] | 267 node0 -> 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->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> |