MOLD
MOLD
Jul 26, 2018 · 25 min read

分散システムは、Tanenbaumらによって”DISTRIBUTED SYSTEMS — Principles and Paradigms”の中で、「分散システムは、その利用者に対して単一で首尾一貫したシステムとして見える独立したコンピュータの集合である」と定義されている。

Andrew S. Tanenbaum and Maaetem an Steen : DISTRIBUTED SYSTEMS — Principles and Paradigms Second Edition, Pearson Pretice Hall (2007

ブロックチェーンは、まさに世界的な分散システムを構築することによって、非中央集権的な新しいデータストアや組織構造の実現を試みたものである。

そもそも、分散システムへの志向理由というのは、スケーラビリティ・局所性・可用性が主に挙げられる。ブロックチェーンも例外ではなく、グローバルな価値保存ネットワークを形成するための地理的なスケーラビリティ・非中央集権的構造下においてデータの改竄不可能性を含む情報保護のための局所性・ゼロダウンタイムでシステムが作動し続ける可用性を実現している分散システムであるといえる。

MOLDでは、独自チェーンの開発を行なっているが、分散システムを構築するにあたり、そもそも分散システムとはどのようなものであり、正常にかつ高性能に作動するために何が必要であるかに関する理解は必要不可欠である。MOLDの目指す非中央集権的な仮想空間の実現に際して、そもそも分散システムとはどのようなものであるのか、述べていきたい。

0.目次

1. はじめに
2. クロック同期
2–1. 物理クロック(クロックとクロックスキュー)
2–2. クロック同期アルゴリズム(ネットワークタイムプロトコル / Berkeleyアルゴリズム)
3. 論理クロック
3–1. Lamportの論理クロック(全順序マルチキャスト)
3–2. ベクトルクロック(因果順序マルチキャスト)
4. 排他制御
4–1. 集中アルゴリズム
4–2. 非集中アルゴリズム
4–3. 分散アルゴリズム
5. 選任アルゴリズム
5–1. ブリーアルゴリズム
5–2. リングアルゴリズム
6. 分散システムとしてのブロックチェーンと同期
6–1. ブロックチェーンとクロック同期(ブロックチェーンと物理クロック / 論理クロック)
6–2. ブロックチェーンと排他制御アルゴリズム(PoW・PoS・BFTにおける排他制御アルゴリズム)
6–3. ブロックチェーンとリーダー選出アルゴリズム(PoW・PoS・BFTとリーダー選出アルゴリズム)

1.はじめに(同期についての概要と全体の流れ)

集中システムと異なり、分散システムにおいて時間についての合意を得るのは容易でなない。
前者であれば、グローバルに共有されるクロックに基づき、明確にその順序関係を決めることができるが、後者においてはクロック値の誤差や通信時間があるため、絶対的な時間を共有することは難しい。

とはいえ、絶対的な時間における順序は必ずしも必要ではなく、相対的な順序が定まっていれば十分であることの方が多い。どのようにすれば、分散システムにおいて全てのクロックを同期できるだろうか。また、分散システム内で整合性を持たせて同期を行うためには、どのようなアルゴリズムが必要となるだろうか。

本章では、ノード間の同期について、以下の順に説明していく。

・そもそもクロック同期はどのように行われるのか
・論理クロックやベクトルクロックによる相対的な順序付けの方法
・分散システム内で整合性を取るための排他制御アルゴリズムについて
・分散システム内におけるリーダー選任アルゴリズムについて

2. クロック同期

2–1. 物理クロック

クロックとクロックスキュー

ほとんどのコンピュータは時間を保持するための回路を持っており、この装置は「クロック」と呼ばれている。これは、精密に機械加工された水晶に対して圧力をかける際に、水晶の種類・切削方法・圧力の大きさを変数として明確に定義できる周波数での振動に基づいている。
この周波数は相当に安定しているが、異なるコンピュータの水晶が全て、全く同じ周波で動作する保証はない。これにより生まれる同期時の時間の相違をクロックスキューという。

この状況下において、ことリアルタイムシステムでは、複数のクロックをどのように実世界の時計と同期させ、クロック同士の同期をどのように行うかが問題となる。

実世界の時間は、もともとは平均太陽秒に基づいていたが、現在はセシウム133が9,192,631,770回遷移する時間を1秒と定義し、国際原子時間UTCが定められている。正確な時間を必要とする人にUTCを提供するため、WWVが用いられ、±10ミリ秒ほどの精度で時間が届けられている。

2–2. クロック同期アルゴリズム

しかし、ほとんどのマシンがWWV受信機を持っている訳ではない。そのため、各マシンは自身で時間を追跡管理しつつ、全てのマシンができる限り時間を合わせられるようなアルゴリズムが求められる。

尚、再同期が必要であるかを判断するための誤差、つまりクロックスキューは以下のようにして測定される。

各マシンが数える水晶の振動による1秒間の割り込み数(ティック数)をH回とし、このクロックの値をCとする。UTC時間が t の時のマシンpのクロック値をCp(t)と表すことにする。
クロックスキューがどの程度許容されるかを規定する最大ドリフト率をρとすると、このクロックは、

1-ρ <= dC/dt <= 1+ρ

の範囲内で動作していることになる。つまり、前の同期からΔt秒経過後には二つのクロックは最大で2ρΔt離れていることになる。

オペレーション実行時にδよりも大きくずれていないことを保証した時、少なくとも δ / 2ρごとにソフトウェアを再同期する必要が生まれるわけである。

ネットワークタイムプロトコル(NTP)

多くのプロトコルで共通しており、最初に [Cristian, 1989] によって提案された方法はクライアントを時間サーバと交信させる方法である。時間サーバはWWV受信機を持っているか正確なクロックを持っているため、現在時刻を提供できる。サーバーと交信する時、メッセージの伝達遅れが報告された時刻を遅らせることが重要となるが、ここで遅れを推定することによって誤差を最小にすることができる。現在、NTPでは、1~50ミリ秒の範囲の精度を達成できることが知られている。

Berkeleyアルゴリズム

NTPのような多くのアルゴリズムでは、時間サーバは受動的であり、問い合わせに答えるのみである。一方で、Berrkeleyアルゴリズムでは、参加している各ノードが保持している時刻を時間サーバが受け取り、その平均に基づいて自分自身の時刻も変更する。時刻の値が実世界との関係を持たなくても良い場合は、同じ現在時刻に同意しやすく有効である。

3. 論理クロック

ここまでは、現実世界の時計に即しながら、絶対的な時刻を基準としてクロック同期を行う方法を述べてきたが、相対的な順序づけだけで十分であることも多い。ここで、相対的な順序を決めるために用いられるのが論理クロックという概念である。

3–1. Lamportの論理クロック

論理クロックを同期させるため、Lamportは事前発生と呼ばれる関係を定義した。式a→bは「aはb以前に発生する」と読み、イベントaがまず発生し、次にイベントbが発生することに全てのプロセスが同意していることを表す。事前発生関係は、次の二つの状況に置いて直接的に観察できる。

  1. もしa及びbが同じプロセスにおけるイベントであり、aがb以前に発生するならば、a→bは真である。
  2. もしaが一つのプロセスによって送信されたメッセージのイベントであり、bが別のプロセスによって受信されたそのメッセージのイベントであるならば、a→bはまた真である。あるメッセージはそれが送信される前に受信されることはありえないし、たとえ同時に近いとしても有限の非ゼロの時間を要する。

事前発生関係は遷移関係にあるのでもしa→bかつb→cならばa→cを証明できる。もし、イベントx,yが、メッセージを交換しない異なるプロセスで発生するならば、x→yもy→xも真にはならず、これらのイベントは並行であるといわれる。(前後関係はわからない)
論理クロックでは、それぞれのイベントaに対し、全てのプロセスが合意する時間C(a)を割り当てることで相対的な時間を測定する。これらの時間値は、a→bならば、C(a) < C(b) となるように時間に正の値を加算することで訂正される。以下の図ように、時間値を割り当てることで、事前発生関係を把握することができる。

http://sergeiturukin.com/2017/06/26/hybrid-logical-clocks.html

Lamportの論理クロックにおいて、a→bならば、C(a) < C(b)となることは証明できるが、C(a) < C(b) ならば a→bは必ずしも成り立たない。言い換えれば、a→bはC(a) < C(b)の必要条件であって十分条件ではない。Lamportの論理クロックに改良を加え、これを必要十分条件としたものがベクトルクロックである。

全順序マルチキャスト

詳細は”分散システムの一貫性”に関する記事で説明しているが、複製されたレプリカ間に置いて、全順序マルチキャスト、すなわち、全てのメッセージが各受信者に同じ順序で渡されることを必要とするケースは多い。Lamportの論理クロックは、完全に分散さてれたシステム下において全順序マルチキャストを実装するために使用することができる。

あるプロセスがあるメッセージを受診するとき、タイムスタンプに従った順序でローカルの待ち行列に置かれる。受信者は他のプロセスに確認通知をマルチキャストする。もしローカルクロックを調整するLamportのアルゴリズムに従っているならば、全てのプロセスが実際にはローカル待ち行列の同じコーピーを持つことになる。ある、プロセスは、メッセージが待ち行列の先頭にあり、他のプロセス全てによって確認通知されている場合に限って、動作中のアプリケーションに待ち行列にあるメッセージを渡すことができ、よって全てのメッセージはどこでも同じ順序で配信される。言い換えると、全順序マルチキャストを確立したことになる。

3–2. ベクトルクロック

ベクトルクロックでは、Lamportの論理クロックで把握できなかった因果性を把握可能である。イベントaのベクトルクロックをVC(a)とすると、a→bがVC(a) < VC(b)の必要十分条件となるように以下のステップが実行される。

  1. ネットワークを通じたメッセージ送信やアプリケーションへのメッセージ、または何か内部的イベントを実行する前に、ノードPiはベクトルクロックVCi[ i ]に1を加える。
  2. プロセスPiがPjにメッセージmを送信する場合には、Piは先行するステップを実行した後に、Piはmのベクトルタイムスタンプts(m)をVCiに等しくなるように設定する。
  3. メッセージmを受信した場合には、プロセスPjはステップ1を実行し、アプリケーションにメッセージを配信後、自己のベクトルクロックの各kに対して、VCj[ k ] ← max{ VCj[ k ], ts(m)[ k ] }となるように更新する。

http://sergeiturukin.com/2017/06/26/hybrid-logical-clocks.html

因果順序マルチキャスト

ベクトルクロックを用いることにより、先に述べた全順序マルチキャストよりも少し弱い、因果的順序マルチキャストを実現できる。

ベクトルクロックの値を比較し事前発生関係を把握することで、あるイベントxに対し、その他のイベントを過去イベント・並行イベント・未来イベントに分けることができる。例えば、先の図において、イベントdを基準とするとき、過去イベントはa,b,c,iであり、並行イベントはj,l,mであり、未来イベントはf,g,h,kとなる。

このとき、因果関係の発生する過去イベントと未来イベントに関しては、全てのプロセスにおいて一貫した順序でなければならないが、並行イベントに関しての順序は問わないとするのが因果的順序マルチキャストである。このように、ベクトルクロックでは因果性を把握できることがLamportの論理クロックとの違いである。

4. 排他制御

分散システムにおいて、複数のプロセス間の並行動作と協調動作は基本となるが、複数のプロセスにより同一のリソースに同時にアクセスした際、不整合な状態とならないよう、リソースに排他的アクセスを保証するために分散アルゴリズムが必要となる。

分散型排他制御アルゴリズムは、以下の2つに分類できる。

  1. トークンベース方式
  2. 許可ベース方式

トークンベース方式では、リソースへのアクセスが非常に長い間許可されないSutarvation(飢餓状態)と、複数のプロセスが互いの進行を待ってしまうDeadlock(デッドロック)を容易に避けることができる。代表的なものに、トークンリングアルゴリズムがある。しかしながら、トークンを保有していたプロセスが異常停止しトークンが喪失されたとき新しいトークンをただ一つだけ生成する必要があり、この煩雑さは欠点として深刻である。

他の多くの分散型排他制御アルゴリズムは許可ベース方式を採用しており、その許可を得る方法には多くの異なる方法があるため、具体的に説明していく。

4–1. 集中アルゴリズム

単一プロセッサシステムでなされることを模擬することで、分散システムにおける排他制御による単独アクセスを端的に達成できる。集中アルゴリズムでは、一つのプロセスをコーディネータとして選任し、あるプロセスが共有リソースにアクセスする場合は許可を求めるためにコーディネータに要求メッセージを送信する。他のプロセスがその共有リソースにアクセスしていないならば、コーディネータは許可の返答を返し、返答を受信後、要求したプロセスは処理を実行する。
このアルゴリズムにおいて、リソースへの排他的アクセスを保証していることは容易にわかるが、故障単一箇所性という重大な欠点がある。このことは、大規模システムにおいて性能上のボトルネックになりかねないが、それでもその単純性からくる利点は欠点を補って余りある。

4–2. 非集中アルゴリズム

各リソースは、n重に複製されているとする。非集中アルゴリズムでは、プロセスがリソースにアクセスする場合には、その過半数であるm > n/2 の賛同が必要となる。過半数の賛同を得られた場合に、プロセスは許可を得たことになり、処理を実行できる。
この方式は、集中アルゴリズムの故障単一箇所性を解決しているが、アクセスを試みるノードが多すぎた場合、どのノードも十分な投票を得られず性能が低下する問題がある。

4–3. 分散アルゴリズム

このアルゴリズムにおいては、システム上で全てのイベントの順序が全順序関係として定義できると仮定する。このベースとして、前章で述べたLamportの論理クロックが用いられる。また、どのメッセージも失われることがないと仮定する。

プロセスが共有リソースにアクセスしようとする場合、リソースの名前、自分のプロセス番号、現在の論理クロックを含むメッセージを作成し、他の全てのプロセスに送信する。この要求メッセージを受信したとき、自身の状態に合わせて以下の動作が行われる。

  1. 受信者がリソースをアクセス中ではなく、アクセスしようともしていない場合には、受信者は送信者にOKメッセージを返送する。
  2. 受信者がすでにリソースにアクセス中ならば、何も返答せず、要求を待ち行列に入れる。
  3. 受信者がリソースにアクセスしようとしており、まだできていない場合、入力メッセージ中のタイムスタンプと自分が他のプロセスに送信したメッセージの中のタイムスタンプとを比較し、低いほうが勝つと扱う。受信メッセージが小さなタイムスタンプを持つ場合には、受信者はOKメッセージを返送する。自メッセージがより小さいタイムスタンプを持っている場合には、受信者は入力メッセージを待ち行列に入れ返送しない。

1,2のように競合しないならば、明らかにこのアルゴリズムは正常に動作する。競合する場合でも、唯一のプロセスのみがアクセス許可を得られる状態が成立している。

このアルゴリズムは、集中アルゴリズムと同様、DeadlockやStarvationなしに排他制御が保証できる。さらに、故障単一箇所性が存在しない。とはいえ、故障単一箇所性は故障n箇所性に置き換わっている。それも受信者が許可、もしくは許可拒否の返答をするようにし、タイムアウトを導入することで対処できるが、マルチキャスト通信プリミティブを要するといった他の問題が生じる。残念ながら現時点では、集中型のアルゴリズムを凌駕するような分散的なアルゴリズムは考案されておらず、未だ研究半ばである。

それぞれのアルゴリズムを比較すると、以下のようになる。

5. 選任アルゴリズム

多くの分散アルゴリズムは、コーディネータやイニシエータとして、リーダーのような役割を持つ特別な一つのプロセスを必要としている。どのプロセスがリーダーとなるか、そして、どのようにすれば被ることなく、唯一のプロセスがリーダーとなれるかは重要な問題であり、研究者が過去数十年間にわたって取り組んできた。

5–1. ブリーアルゴリズム

コーディネータが故障し、どれかのプロセスPが気づくと、Pは以下のような手順で選任(election)を起動する。

  1. Pは自分より高い数値を持つ全てのプロセスに対し、ELECTIONメッセージを送信する。
  2. もし誰からも応答がなければ、Pは選任に勝ちコーディネータになる。
  3. もしPより高い数値のプロセスから答えがあれば、交代する。Pの仕事は終了する。

このアルゴリズムによって、コーディネータを一意に定めることができる。しかしながら、このアルゴリズムは多くのメッセージ数と通信情報量を必要とし、冗長であるといえる。代替案として、リングアルゴリズムがある。

5–2. リングアルゴリズム

こんアルゴリズムでは、一般的なリングアルゴリズムと異なりトークンを使用しない。コーディネータが機能していないと気づくプロセスはどれでも、自分のプロセス番号を含むELECTIONメッセージを構成し、そのメッセージを自分のサクセッサ(リングネットワークにおける次のノード)に送信する。サクセッサがダウンして入ればスキップする。自分より高い数値を持つノードがいなければ、自分のプロセス番号が保持されたまま、自分のところにそのメッセージが戻ってくるため、その時点でコーディネータに選任される。

このアルゴリズムでは、メッセージ数を抑えたリーダー選出を行なっているが、メッセージの送信先を、両隣のノードにすることで、より通信量の少ないアルゴリズムを実現することもできる。

6. 分散システムとしてのブロックチェーンと同期

それでは、分散システムの一つであるブロックチェーンでは、プロセス間の同期をどのように行なっているだろうか。

6–1. ブロックチェーンとクロック同期

ブロックチェーンと物理クロック

まず、ブロックチェーンで物理クロックを利用した絶対的な時間関係を把握可能か考える。2章で前述したように、ネットワークに参加している各ノードが正しい物理クロックを保持しているとは限らず、クロックスキューが存在するはずである。ビットコインブロックチェーンの平均生成時間は10分であることから、ある程度の大きいクロックスキューでも許容されると考えられる。しかしながら、世界にノードが散らばる中で各々の物理クロックを同期することは難しい上に、クロックを偽装するノードがいることも考えられる。ネットワークタイムプロトコル(NTP)を導入するなどして、正しい時刻をノード間で再同期することは至難の技である。

ブロックチェーンと論理クロック

よって、物理クロックではなく論理クロックを用意することが現実的となる。実際に、ブロックにタイムスタンプを取り込むことによって、Lamportの論理クロックと非常に似た仕組みが用意されている。

[Bitcoin: A Peer-to-Peer Electronic Cash System ,Satoshi Nakamoto] で述べられているように、マイナーとしてブロックへの書き込みオペレーションを行う各ノードは、それ自体がそもそもタイムスタンプサーバとしての役割も担っている。各タイムスタンプはそのハッシュの中に直前のタイムスタンプを含んでいくことでチェーンを形成する。しかし、これらのノードが正しい物理クロックを保持している保証はない。タイムスタンプの数値、つまり各トランザクションの順序や時刻は比較的曖昧となっている。

このようなクロックの曖昧さのため、二重支払いが行われてしまう可能性がある。しかし、ビットコインブロックチェーンでは、最長のチェーンのみが正当とされており、不正なトランザクションや順序の整合性が取れないトランザクションはマイナーによる検証の後、破棄される。そのため、時間の経過とともにブロックの順序が一意に定まっていく。タイムスタンプが増えるたびに、以前のタイムスタンプが強化されるのである。

まとめると、ブロックチェーンでは曖昧なタイムスタンプの下、トランザクションの順序整合性は不正確である。しかしながら、チェーン状に繋げるというシンプルな仕組みによって、時間経過とともに各トランザクションの事前発生関係は確立される。さらに、マイナーが善良に動くためのインセンティブ構造があるため、順序等が矛盾するトランザクションは発生しないのである。

トランザクション間の相対的な順序関係、つまり事前発生関係が明確になっていくという点で、Lamportの論理クロックと類似したクロック同期方法が実現されているといえる。

なお、ほとんどのトランザクションに関しては、因果性が存在しないため、ベクトルクロックを導入して因果順序性の考え方を取り入れれば、順序関係に関する制約を大きく緩和できるかもしれない。しかしながらブロックチェーンでは、その構造自体によってデフォルトで全てのブロックの順序関係を共有する仕組みとなっているため、(一定時間が経過したブロックに関しては)全順序性が保たれている。

6–2. ブロックチェーンと排他制御アルゴリズム

分散システムとしてのブロックチェーンにおいても、排他制御は必要となる。ブロックチェーンネットワークにおいて、各ノードは並行して非同期的に動作を行なっている。この時、共有すべきブロックチェーンそれ自体の情報が不整合となってしまってはならない。

PoW・PoSにおける排他制御アルゴリズム

4章で述べたように、分散型排他制御アルゴリズムは、以下の二つに分類できる。

  1. トークンベース方式
  2. 許可ベース方式

PoWやPoSは、許可ベース、その中でも分散アルゴリズムに近い仕組みであるといえる。それでは、どのような時にリソースにアクセスするための許可を得ているだろうか。そう、ナンスを見つけた時である。

PoWでは、ハッシュ値の先頭に0がn桁続くようなナンスを見つけた時にのみ正当な新しいブロックの書き込みオペレーションを行うことができる。書き込みオペレーションを実行したマイナーは、そのことをブロードキャストによって全マイナーに送信して共有する。
通常、マイナーは、自分より先にナンスを見つけてブロックを生成したノードがいた場合、その情報を同期し、また次のナンス値を探すように動く。これは、最長のチェーンのみが正当なものであると見なされるため、新しく次のナンス値を探した方が報酬を得やすくなるためである。PoSはコインの保有量が多いものに優先的にリソースへのアクセス権を与える仕組みだが、こちらも基本的な排他制御アルゴリズムの構造は分散アルゴリズムに近い。

但し、厳密には排他制御が行われているとはいえない。これは、次のブロックを作るまでの10分間という共通の時間で同期を行い、同意形成をするためである。もし同時に二つ以上のノードがナンス値を見つけた場合、排他的でない状態で書き込み操作が行われる。この時、最長のチェーンのみが正当なものであると見なされるため、時間経過と共にブロックチェーンネットワーク内の情報は整合性を持っていく。厳密な排他制御が行われていないためにフォークが起きてしまい、ファイナリティが確定されないことは一つの問題点である。

BFT型のアルゴリズム

一方はBFT型、許可ベースの非集中アルゴリズムによって排他制御を行なっている。このアルゴリズムでは、分散アルゴリズムに類似するPoWで問題となっていたフォークやファイナリティの問題を解決する。

BFT型では、Proposer, Ordererなどと呼ばれる一つのノードだけが新しいブロックを生成する権利を持っている。ブロックを生成する際には、全ての参加ノードから投票を集め、2/3以上の同意がえられた時のみ、新たにブロックを生成する許可を得られる。この時、過半数ではなく2/3以上の同意が必要な理由は、ビザンチン故障に対処するためのものだが、これについての詳細は”分散システムにおけるフォールトトレラント性”についての記事で詳しく述べる。

BFT型のアルゴリズムでは、PoWなどと異なり、一つのノードだけがブロックチェーンへの排他的なアクセス権を得られるため、フォークせずファイナリティは直ちに確定する。但し、誰でもマイナーとしてネットワークに参加できるという性質が失われがちである。

6–3. ブロックチェーンとリーダー選出アルゴリズム

PoW, PoSとリーダー選出アルゴリズム

ブロックチェーン上におけるリーダー選出アルゴリズムは、排他制御アルゴリズムの仕組みと似ている。ビットコインにおいて、リーダー、つまりブロックを新しく生成するようなノードを選出するためのアルゴリズムはPoWである。

PoWでは、計算量を持ちナンスを見つけられたノードに対し、ビットコインネットワークに貢献するような善良なリーダーとしてブロックを付け加える許可を与える。リーダーとなるような各マイナーは、最初にナンスを見つけたノードにいち早く同期し、次のブロックのナンス値を探し始めた方が報酬を得やすいので、ビットコインネットワークに貢献しようとする。ハードフォークにより完全にチェーンが分岐してしまっているという問題点もあるものの、ゲーム理論に基づく非常にシンプルなインセンティブ構造を用意することによって、分散システムとしてのブロックチェーンネットワークにおける同期を実現しているのである。

イーサリアムの場合、ブロック生成までの時間が短いため、よりフォークが起きやすい。その点に関しては、アンクルブロックという概念を取り入れることで、正当でないチェーンを作ってしまっていてもある程度の報酬が得られるような構造を実現しているのである。

PoSは今後イーサリアムに導入される予定であるが、コインの保有量が多いノードに優先的にリーダーとしてブロックを生成する許可を与える。これは、PoWにおける必要な電気量が膨大となる、51%攻撃に弱い、といった問題点を解決・改善するアルゴリズムである。コインの保有量が多いノードならば、ネットワークを破壊するような悪意のある行動をとらないという、ゲーム理論に基づいた選出アルゴリズムである。

BFTとリーダー選出アルゴリズム

BFT型のアルゴリズムで問題となるのは、ProposerやOrdererとなってブロック生成のための投票を行うようなリーダーをどのように選出するかである。

PBFTを採用しているHyperLedgerでは、信頼のおける機関がOrdererとして元々登録される。しかしながら、これは中央集権的な方法によるリーダー選出であり、分散システムとは一線を画するものである。

Tendermintプロトコルにおいては、異なるバリデータによって交代交代で提案が行われるようにラウンドロビン方式でリーダーが選出されている。この時リーダーの候補はPoSに基づいており、分散システムにおいてリーダー選出を実現できるアルゴリズムの一つであるといえる。

DISTRIBUTED SYSTEMS “Principles and Paradigms” Andrew S.Tanenbaum, Maarten Van Steen

MOLD project

MOLD blog/MOLD is a fair and secure distributed gaming platform which supports the development of new games and simplifies the trading of items, weapons, armors, and other valuable data.

MOLD

Written by

MOLD

MOLD は、新たなゲームの開発を支援し、またゲーム内のアイテムや武器、防具など価値あるデータの取引をより簡単にする公平でセキュアな分散型ゲームプラットフォームです。

MOLD project

MOLD blog/MOLD is a fair and secure distributed gaming platform which supports the development of new games and simplifies the trading of items, weapons, armors, and other valuable data.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade