エンタープライズ用途のブロックチェーンプロダクトについて、
最近の事情を元に頭を整理したメモを記事にしました。所感を加えた個人的な内容です。
前提
エンタープライズ用途のブロックチェーンでは、パブリックチェーンを避ける
※中央管理者がいないブロックチェーンがパブリックチェーン。
パブリックチェーンを使えない理由は、
・秘匿したいデータが存在する
・マイニング報酬を作らないため、承認の責任を負う人がいない
・コントラクトは変更されやすいため、管理・責任の主体が必要
・スケーラビティが必要なので、参加者に全ブロックを保持させられない
必然的にコンソーシアム型ブロックチェーン・プライベートチェーンを使うことになる。
こちらでは、上記の問題を解決できる。
その基盤としては、hyperLedger fabricが一番実績と勢いがある。
ただ、それとともに課題も見つかってきている感じ。
先行者(HLF)の課題
- ステートDBにファントムリードが起こり得て、トランザクションの独立性を保てない
- 複数のチャネルをまたがってトランザクションの一貫性を保てない
- orderedがトランザクションのブロックをまとめているため、処理が遅くなる
- orderedは単一障害点で、冗長化が必要
色々ありますね…。
ブロックチェーン技術のトリレンマ
- 分散性(非中央集権性含む)
- スケーラビリティ
- セキュリティ
現状、この3つを同時に満たす・高めることができないことが
定理のようになっている。
一度ブロックチェーンに書き込んだ情報って
修正手順も複雑になるだろうから、障害・不整合が困るのは想像できる。
上記の3つの内では、分散性を抑制せざるを得ない。
しかし、ブロックチェーン技術において分散性がもっとも売り物なので、
抑えすぎると既存のシステムと差別化できなくなっていく。
また現状は、特長の一つである標準での冗長化にも課題がある。
改ざん耐性のあるフレームワークとしての価値は残るが、大掛かり。
そんな印象。
当初、自分がエンタープライズ用途のブロックチェーンに魅力を感じた点はp2pの技術による同期を行うことで、分散したDBの整合性を既存にあるような苦労(xaトランザクションの使用・不整合データの保守など)をせず、もっと楽に確保できるのでないかというところだった。
これについては、ブロックチェーンにRDBのようなロック機構はないものの、管理者(hyperLedger fabricだとorderer)がブロックの順序付けを行う際に、ノード間のトランザクションを同期し、一貫性・独立性を保ってくれると分かった。(秘密保持範囲が同じノード間のみ)
ただノード間のデータが伝播途中の時や、いずれかのノードが書き込みに失敗した場合では、次回トランザクション発行で全体のデータが同期される前に、各ノードで古いデータを読み出すため、ネットワーク全体で見たときのリピータブルリード・ファントムリードは常に起こり得るものと認識した方が良さそう。
これらのブロックチェーン共通の特性に加えて、HyperLedgerFabricでは前述したような課題があるが、こちらのスライドによると、
https://oracle-code-tokyo-dev.connpass.com/event/141642/presentation/
Kubernetesの活用で解決しようとされているとのこと。
今後の検証・実績に期待です。
1対1なcorda
また個人的にはcordaに注目している。
ステートDBのデフォルトがRDBだし、
データモデルでトランザクションとブロックが1対1になっていることがキモ。
そうすることでどうなるか。
- 1回のトランザクションで配信するべき対象が少なく、コミット(ファイナリティ付与)までの処理が速い。
- ブロック生成処理を並列実行できる(エンタープライズ版)
- ブロックが分割されているので、他のネットワークへの移し替えも楽。インターオペラビリティと呼ばれるもの。
日頃オブジェクト指向の考え方に慣れているプログラマ的な直感では、この設計が正しいんじゃないかと思えている。読んでwktkした。
ただあまり人気がないのは、R3社による基盤のため中央集権的な色彩がより強いからかもしれない。
ブロックチェーンの魅力を端的に語る言葉としては、やはり非中央集権性なわけで。
あとエンタープライズ版は有料ですね。。
cordaの商用実績がもっと出てきてほしい。
1対1でやるならCordaだろう(ドン!)
すみません、言いたかっただけです。
## 参考資料 https://www.slideshare.net/oracle4engineer/ochacafe-4-hyperledger-fabric https://medium.com/corda-japan/corda%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E7%89%B9%E5%BE%B4-701d49f02cd