最近何かと話題のブロックチェーン。
非常に分かりにくいので、まずは勉強を。
参考とした本は「ブロックチェーンの衝撃」という本です。amazonではとても評価の高い本です。
確かに、面白いというべきか、新しい技術の話で興味深いですが、はっきり言ってこの本は簡単ではありません。
そもそもブロックチェーンをある程度知ってないとイメージが沸かないのでお買い上げはご注意ください。
歴史
細かく書きませんが、こういうことみたいです。
ブロックチェーンとはビットコインの根幹技術に名付けられた名称であり、初めてビットコインによって発明され、その恩恵が実証されたものであるからだ。
従ってビットコインがあってブロックチェーンを作り上げたということらしい。
クライアントサーバ型との違い
雑な絵になりますが、落ちないシステムを作ろうと思ったらサーバなりルータなりをたすきがけにして、どれかが落ちても迂回できる仕組みを作るのが一般的です。
特に勘定系システムの場合、本に書いてありますが
- 全ての処理が1つずつリニアに処理される
- 1つの支払いが完了しなければ次の処理には進まない
- 誰かの支払いとその後の残高の辻褄が合わない不整合は絶対に許さない
というのが基本になります。まぁお金ですからね。
私にとってはこれの方が「フムフム、そりゃそうだ」と思う所です。
P2P方式のブロックチェーン
ここからどうも分かりにくかったです。
ビットコインのブロックチェーンは完全なP2P方式で稼働しており、参加している数千台のコンピュータが全て同時にダウンしない限り、決済ネットワークは止まることがない。すなわち、どれか一台にでも支払いリクエストが到達すれば正しく処理されるのである
と書かれています。
これ自体は一般的なP2Pの話です。イメージは以下の図だろうと。
これが実際にどういう意味を持つのか?実装されたらどう動くのか?の理解が非常に難しいのです。
ブロックチェーンというだけあって、ブロックと呼ばれる複数のトランザクションを1つにまとめたもので処理されるようです。
私なりにざっくりイメージするとこんな感じじゃないかと読み取りました。
ここで大事とされているのが、以下の考えです。
従来は必ず「過去に確定してから次に進むべし」とされていたものが、「近い未来で確定されることを許容して、もう次に進みなさい」というタブーを犯している。
確かにこうすればトランザクションのコストは下げられる気はしますが、これも具体的なイメージが沸きません。
メリット
安全
1つ前のハッシュ値で繋ぐため、整合性を保ったまま改竄するのは確かに難しそうです。
私が全て読んでないので途中なのですが、悪意のある人がウソのトランザクションを流すことは可能なのか?というところです。
入口は複数あるはずで、そこが1つだとゼロタイムダウンは実現できません。
誰もが入り口になれるとするならば、誰もそのチャンスはないとは言えない気がしてしまいました。もう少し調べます。
ゼロタイムダウン
これは複数のクライアントマシンでもなんでも繋ぐことでゼロダウンタイムを実現するというものです。
また、全てのマシンで同じ情報を保持しているということは、バックアップも不要という事になります。
P2Pのネットワークが破綻しない限り大丈夫というのは確かにそうです。
コスト削減
本書で出している例ですが、これは本当ならすごいことです。
1日あたり300マントランザクションであれば、地理的に分散してインターネットで接続された数台のクラウドインスタンスで稼働できる。必要なスペックはメモリが4ギガバイト。CPUは2コアで充分だ。このマシンが物理的に離れた3カ所のリージョンに2台ずつで合計6台。
これだけ聞くとかなり安くできます。
確かにこれだけで動くという事が証明されれば(既にある意味では証明されているが…)、銀行のシステムは大きく変わるでしょう。
銀行などは恐らくこういう仕組みにするでしょうね。
本書でもプライベート、パブリックと分けていましたが、いわゆる「プライベートクラウド」「パブリッククラウド」と同じで、プライベートで数台並べて運用することになると思います。
分散型データベースとの違い
これも分かりにくい1つです。
言っている事はこれに近いと思うんですが、違うらしいです。
本書では
現在の金融システムなどで必要としている処理量であれば、データの整合性を保ったまま、物理的分散によりゼロダウンタイムを実現し、かつそこに同時に劇的なコスト削減をもたらすという事に集約される
とあります。
つまり、ダウンしないことが目的であるという事らしいです。
従って台数を増やしたら性能が上がるものでもなく、必要最低台数は「1台」あれば良いとのこと。
動かさないと何が分からないかと言えば、
- どうやってデータを共有するのか?
- どのタイミングでデータを共有するのか?
- 処理したデータをどうやって承認するのか?
- データを各サーバに持つということは、それなりにリソースが必要ではないか?
ということです。
特に一番下のは気になります。どれほどの量のデータが通信され、どれ程のディスクの空き容量があれば動かせるのか?などがはっきり言って分かりません。勘定系のシステムがヘナチョコディスクで動いている訳ではないので、それなりの量を持っています。
「分散してみんな同じデータを持っているから1台ダウンしても安心」というのは分かります。思想は理解できます。
でも、その1台に求められる最低スペックがこの本から読み取れませんでした。ここは実際に試してみて、見積もろうと思います。
Ethereum
https://www.gitbook.com/book/a-mitani/mastering-ethereum/details
ブロックチェーン技術を用いた次世代分散型アプリケーションプラットフォーム「Ethereum(イーサリアム)」の技術入門書。
ちょっとこれを見てやってみる。