レゴ

レゴで学ぶコンセンサスアルゴリズム

 昨日当社のイベントがあった。そこでビットフライヤーブロックチェーンのロゴ入りのレゴをノベルティとして配っていたので、それを見ていて思いつた小ネタを披露しようと思う。名付けて「レゴで学ぶコンセンサスアルゴリズム」

 次の3つの種類のレゴブロックを考える。
1、ノード用のブロック
2、投票用のブロック
3、コミット用のブロック

 左下の完成図のようにノード→投票→コミットの順にブロックを重ねるのが目的だ。
 順番に説明しよう。

ノード用のブロック

 L字型のブロックで一つ一つがノードを表す。4つのノード上でのコンセンサスアルゴリズムを想定しているので4つ必要だ。ノードが1台死んでる状態を考えるなら3つ使うことになるだろう。

投票用のブロック

 ここが肝だ。レゴなので色に投票すると考えよう。色付きの横長のブロックでブロックの接合面にある丸いぽっちの形状が色ごとに違うようなものを考える(そんなものが作れるのかどうかは知らない、空想です)
 これを各ノードの上に(実際には隣のノードにまたがって)はめていく。全部同じ色にしてもよいし、全部違う色でもいい。もちろん全部違う色ならコンセンサスは取れない。

コミット用のブロック

 最後はコミットだ。今回はビザンチン障害耐性のあるコンセンサスアルゴリズムを想定しているので3分の2以上、つまり3つ以上の同じ色の投票がある場合のみコミットすることができる。
 ファイナリティのあるコミットを考えるのでコミット用のブロックは輪っかになった一続きのブロックを用意する。このブロックは色ごとに用意される。ブロックの後ろ側の下のブロックとの接合面が各色に応じた凹みになっていると考えよう。

どんな時にコンセンサスブロックが積みあがるか

 さてこの準備の下どんなことが考察できるだろうか?
 まず全ノードが同じ色を投票した場合はその色のコミットブロックをはめることができる、当たり前。
 では1つのノードが違う色を投票したらどうなるか?その場合2段目は2色になるだろう。3つの同じ色と1つの違う色。コミット用のブロックをよく見てほしい。これは一か所だけ凹部分がない。つまり下のブロックのポチ部分がどんな形でもマッチするのだ。だから適当にコミット用のブロックを回転させてはめ込むことができる。
 同じ2色でも2対2だとこんなことはできない。つまり2対2だとコンセンサスは取れないということだ。

 次にノードブロックを一個取り除いてみよう。そうすると安定してはめることのできる投票ブロックが一つ減る。だから投票は3つまでしかできない。この状態で3つの投票がすべて同じ色であればコミット用のブロックをはめることができるはずだ。
 つまりノードが一つ欠けた状態でもコンセンサスをとることが可能である。
 しかしこのノードが欠けた状態で違う色の投票があったらどうなるだろうか?一見コミット用のブロックははまらないように見えるが、違う色の投票のところに凹がない部分を持ってくればはめることはできる。しかしこの状態は安定的ではなく、上から力をかければ壊れてしまうだろう(結合力が弱いのでかけている部分に力を入れれば壊れる)。そういう意味で常に3つ以上の同じ色の投票がなければコンセンサスは取れないといえる。

おちなし

 すみません、落ちはないです。くだらない話にお付き合いいただき申し訳ないです・・・
 でもこれをレゴ社が商品化してくれれば面白いなー

 

この記事が気に入ったらサポートをしてみませんか?