Hyperledger Fabric Architecture(1) ~ システム構成
これから数回にわたって、Hyperledger Fabric(以下Fabric)のアーキテクチャーを公式ドキュメントを基にご説明します。
今回はFabricのシステム構成について説明します。
1.システム構成
Fabricは状態データと元帳データという2つのデータ構造を有します。これらはトランザクションを実行することで変化します。
1.1 トランザクション
Fabricのトランザクションには2つのタイプがあります。
Deploy Transactions
新しいチェーンコードを作成し、プログラムをパラメータとして取得するトランザクションです。Deploy Transactionsが正常に実行されると、そのチェーンコードはブロックチェーン上にインストールされます。
※チェンコード:トランザクションを実行するプログラム。スマートコントラクトと同義。
Invoke Transactions
既にdeployされたチェーンコードのコンテキスト上で実行されるトランザクションです。Invoke Transactionsは、チェーンコード、および提供された機能の1つを参照します。成功するとチェーンコードは指定された関数を実行します。それにより、対応する状態を変更し、出力を返します。
1.2 データ構造
続いてFabricのデータ構造を説明します。
1.2.1 State(状態)
状態は、KVS(key value store)方式で実装されています。 状態はブロックチェーン上で実行されるチェーンコードによって操作されます。 状態は永続的に保存され、状態の更新はログに記録されます。 状態を操作するノードはPeerのみです。OrdererやClientによっては操作されません。(ノードについての説明は後述)
1.2.2 Ledger(台帳)
台帳は、システムの稼働中に発生する正常な状態変更(有効なトランザクション)、または失敗に終わった状態変更(無効なトランザクション)の履歴を有します。
台帳は、ordering serviceによって順序付けされたトランザクションの、ブロックのハッシュチェーンとして構築されます。ハッシュチェーンは台帳上のブロックの順序を規定し、各ブロックは順序付けされた取引の配列を有します。これにより、全てのトランザクションが適切な順序で保存されることになります。
台帳はすべてのPeerに保存されます。またOrdererの一部に保管されることもあります。Peer側の台帳をPeerLedger
と呼び、Orderer側の台帳をOrdererLedger
と呼びます。 PeerLedgerとOrdererLedgerの違いは、前者のみ、有効なトランザクションと無効なトランザクションを区別する機能を有している点です。
台帳はすべてのトランザクションの履歴を再生しすることで、状態を再構築できます。
1.3 ノード
Fabricのノードには3つのタイプがあります。各々、以下の役割を担います。
- Client(クライアント):トランザクションを提出する。
- Peer:トランザクションのシミュレーション、承認を行う。
- Ordering-service-node or orderer:トランザクションを整列する。
1つ注意点として、ノードは論理機能であり物理機能ではありません。そのため、異なるタイプの複数のノードを同じ物理サーバー上で実行することも可能です。
1.3.1 Client(クライアント)
クライアントはエンドユーザーの役割を担います。クライアントがブロックチェーンと通信するにはPeerに接続する必要があります。クライアントが担う役割はtransactionsの作成と呼び出しです。クライアントはPeerとOrdering Serviceの両方と通信します。
1.3.2 Peer
Peerはクライアントから受け取ったチェインコードをシミュレーションする役割を担います。 Peerはまたendorser(承認者)の役割も担います。endorserの仕事はコミットされる前のトランザクションを承認することです。endorserは各々、承認ポリシーを有しており、このポリシーは有効なトランザクション承認のために必要かつ十分な条件を定義します。 更に、PeerはOrdering Serviceから、ブロックの形で順序付けられた状態更新を受け取り、状態と台帳を更新する役割も担います。
1.3.3 Ordering-service-node or Orderer
OrdererはOrdering service(トランザクションの整列)を提供するノードです。 各peerに整列されたトランザクション群を伝える役割を担います。
まとめ
今回はFabricのシステム構成についての概略を説明しました。次回は、peer承認プロセスについての詳細をご説明致します。