こんにちは。デプロイ王子こと廣瀬一海です。今回は「ブロックチェーン」を取り上げ、構成する技術、どのような分野に使うことができるのかについて解説します。
ブロックチェーンという仕組みは、当初、暗号通貨を流通させる分散データストアとして始まり、その後、世界中からのネットワーク参加者と共にこの技術のアイデアと仕組みが検討されるようになりました。そして、数年間運用されるうちに、分散システム運用が実際に可能で、データ記録の連続性やブロックの一貫性が保持され、P2Pであるためにダウンタイムがほとんど無い、といった特徴を持つシステムが実現可能であることがわかりました。
現在、これらブロックチェーンの特徴を、通貨価値流通以外の分野にも応用しようとする試みがスタートアップや大手企業で始まっています。
そもそもブロックチェーンって?
さまざまな可能性が期待されているブロックチェーン技術ですが、そもそもどうやって動作するのか?ということについて、少しだけ整理しておきましょう。
ブロックチェーンの動作の仕組み
ブロックチェーンは、発生したデータをある容量や時間などの区切りで応じてひとまとめにし(ブロックの生成)、ネットワーク参加者(ノード)の間で記録する、分散データ保存の仕組みです。
各ノードは、ネットワーク的に切り離されており、もっとも長くブロックがつながっているデータを正しいものとして、それぞれが保持するブロックチェーンを非同期に差分同期していきます。
この仕組みによって、遅延こそありますが、ネットワーク参加者すべてが最終的には同じデータを持つことになり、同じデータを閲覧できるようになります。
ブロックチェーンでは、一度発行して確定したブロックは修正ができません(どうしても修正が必要な場合は、その情報を相殺するトランザクションを投入する手段があります。これは、クレジットカード決済ミスなどの場合の返金処理、簿記の訂正仕訳と似たようなものと思ってよいでしょう)。
CAP定理から見たブロックチェーン
ブロックチェーンは、P2Pで各ノード同士がデータを交換し合う、分散データストアです。しかし、分散データストアを構成するコンピュータ同士でデータを交換して記録しようとしたら、下記の3つの保証事項のうち2つしか選べないトレードオフな関係になる、という話があるのです。
これを「ブリュワーの定理」、または3つ保証事項の頭文字を取って「CAP定理」と呼びます。3つの保証とは、具体的にデータを記録した瞬間に起こり得る下記の事象を指します。
- Consistency(一貫性):すべてのクライアントは同じデータを直後に読み取れる、全てのノードで最新のデータを同時に保持し、各ノードによる読み出しは直前の書き込みの内容を返す状態となっている。
- Availability(可用性):ノードの障害により、ほかのノードが影響を受けない状態であること、必ず有限時間内にクライアントへ応答する状態にあること。
- Partition-tolerance(分断耐性):ネットワークに障害などがあっても継続して動作すること、各ノード同士が分断されても動作する状態にあること。
CAP定理
RDBMS、Key Value Store、NoSQLなど、これまでよく知られた分散データストアは、このCAPのうちのいずれか2つを取捨選択しています。
ブロックチェーンはAP型の分散データストアであり、C(一貫性)を捨てることにより実現されています。各ノードが持っているデータを遅延して同期し、最終的に整合性が確保可能であるように考えられているのです。
このことからブロック生成にも時間がかかり、データを投入した直後は手元のノードでは確認できたとしても、ほかのノードからは確認できません。
よってブロックチェーンの運用にあたっては、「ブロックチェーンが100ブロック進行した際に、100ブロック前のブロックのデータ箇所の同期が収束し、確定したとみなす」などの工夫が必要になります。
一般的なデータベースのように書き込んだらすぐに反映しているわけでは無いという点を、ブロックチェーンを用いたアプリケーションを実装する際にはしっかりと認識をしておいてください。