HyperLedger Fabric 系統架構
title: HyperLedger Fabric 架構
tags: 區塊鏈,HyperLedger Fabric
系統邏輯架構
Hyperledger Fabric是一種模組化的區塊鏈架構,是分散式記賬技術(DLT)的一種獨特的實現,它提供了可供企業運用的網路,具備安全、可伸縮、加密和可執行等特性。
Hyperledger Fabric提供了以下區塊鏈網路功能:
-
身份管理:為了支援被許可的網路, Hyperledger Fabric提供了一個成員身份服務( Membership Identity Service),它管理使用者ID並對網路上的所有參與者進行身份驗證。訪問控制列表可以通過特定網路操作的授權來提供額外的許可權。
-
隱私和機密性:Hyperledger Fabric使得競爭的商業利益和任何需要私人的、機密的交易的團體能夠在同一個被許可的網路上共存。私有頻道是受限制的訊息傳遞路徑,可用於為網路成員的特定子集提供事務隱私和機密性。所有的資料,包括事務、成員和頻道資訊,都是不可見的,任何網路成員都不能訪問該頻道。
-
高效處理能力:Hyperledger Fabric通過節點型別分配網路角色。執行事務的操作從事務排序和提交驗證中分離出來,以便向網路提供併發性控制和並行性操作。在排序之前,執行事務使每個對等節點能夠同時處理多個事務。這種併發執行提高了每個對等點的處理效率,並加速了對排序服務的事務的交付。除了啟用並行處理之外,還可以從事務執行和分類維護的需求中提取節點,而對等節點則從排序(一致的)工作負載中解放出來。角色的這種分支也限制了授權和身份驗證所需的處理;所有的對等節點不需要信任所有的排序節點,反之亦然。因此,在一個節點上的程序可以獨立於另一個節點進行驗證。
-
Chaincode功能:Chaincode應用程式對頻道中特定型別的事務呼叫的邏輯進行編碼。例如,為資產所有權變更定義引數的 Chaincode,確保所有轉移所有權的交易都服從相同的規則和要求。系統Chaincode是一個特殊的 Chaincode,它定義了整個頻道的操作引數。生命週期和配置系統Chaincode定義了頻道的規則,認可和驗證系統 Chaincode定義了支援和驗證事務的需求。
-
模組化設計:Hyperledger Fabric實現了一個模組化的架構,為網路設計師提供功能選擇。例如,特定的識別、排序(一致)和加密的演算法可以被插入到任何一個 Hyperledger Fabric的網路中。其結果是一個通用的區塊鏈架構,任何行業或公共領域都可以採用,並保證其網路將在市場、監管和地理界線之間進行互操作。
從應用層和底層來看
上圖所示的系統邏輯架構圖是從不同角度來劃分的,上層從應用程式的角度,提供了標準的gRPC介面,在AP的基礎之上封裝了不同語言的SDK,包括 golan、 Node. js、Java、 Python等,開發人員可以利用SDK開發基於區塊鏈的應用。區塊鏈強一致性要求,各個節點之間達成共識需要較長的執行時間,也是釆用非同步通訊的模式進行開發的,事件模組可以在觸發區塊事件或者鏈碼事件的時候執行預先定義的回撥函式。下面分別從應用程式和底層的角度分析應該關注的幾個要素
- 應用層
- API:提供了GRPC,RPC框架
- SDK:在API基礎上封裝的SDK,go、java、python、nodejs
- 事件管理:分散式系統中,達成共識需要一定時間,fabric使用非同步通訊模式開發,觸發回撥函式執行
- 身份管理:依託於底層的成員服務,是聯盟鏈的認證功能,例如CA
- 賬本管理:區塊鏈的查詢資料,是賬本中查出來的,區塊高度+交易ID,不重複
- 交易管理: 對區塊鏈資料進行修改,先提交交易到背書節點,簽名認證之後再執行
- 智慧合約:做合約的安裝、例項化和升級
2 .區塊鏈底層
- 成員管理:提供證書,並對身份證書進行管理,用於加密和簽名
- 共識服務:CAP(不能全滿足,只能滿足2個,一致性、可用性和分割槽容忍性),實際上區塊鏈弱化了可用性和分割槽容忍性,所以需要共識演算法保證一致性,fabric的共識大概分為3個階段
1)首先客戶端向背書節點發送一個背書提案,背書節點進行交易模擬,將背書結果和簽名返回給客戶端
2)然後將背書後的交易,交給排序節點進行排序,由排序節點生成區塊,向全網廣播,網路節點接收到廣播後,先驗證區塊交易的正確性
3)驗證通過後,存入本地賬本
PS:排序節點與組織的錨節點使用的是GRPC通訊,組織內使用的是gossip協議通訊
- 鏈碼服務:提供安全的、可隔離的交易環境,所以fabric使用docker,鏈碼直接與docker通訊,目前階段對k8s支援的不好,會出問題。
- 安全及密碼服務:fabric定義了一個BCCSP介面,定義簽名、加密解密等功能,預設實現了一套國際通用的密碼服務,如sha256等
網路節點架構
節點是區塊鏈的通訊主體,是一個邏輯概念。多個不同型別的節點可以執行在同一物理伺服器上。有多種型別的節點:客戶端、Peer節點、排序服務節點和CA節點。
-
客戶端節點
客戶端或者應用程式代表由終端使用者操作的實體,它必須連線到某個Peer節點或者排序服務節點上與區塊鏈網路進行通訊。客戶端向背書節點( Endorser)提交交易提案( Transaction Proposal),當收集到足夠背書後,向排序服務廣播交易,進行排序,生成區塊。 -
Peer節點
所有的Peer節點都是記賬節點( Committer),負責驗證從排序服務節點區塊裡的交易,維護狀態資料和賬本的副本。部分節點會執行交易並對結果進行簽名背書,充當背書節點的角色。背書節點是動態的角色,是與具體鏈碼繫結的。每個鏈碼在例項化的時候都會設定背書策略,指定哪些節點對交易背書後才是有效的。也只有在應用程式向它發起交易背書請求的時候才是背書節點,其他時候就是普通的記賬節點,只負責驗證交易並記賬。
Peer節點還有一種角色是主節點( Leader Peer) , 代表的是和排序服務節點通訊的節點, 負責從排序服務節點處獲取最新的區塊並在組織內部同步。 可以強制設定為主節點, 也可以動態選舉產生。
有的節點同時是背書節點和記賬節點, 也可以同時是背書節點、 主節點和記賬節點, 也可以只是記賬節點。
- 排序服務節點
排序服務節點( Ordering service node或者 Orderer)接收包含背書籤名的交易,對未打包的交易進行排序生成區塊,廣播給Peer節點。排序服務提供的是原子廣播( Atomic broadcast),保證同一個鏈上的節點接收到相同的訊息,並且有相同的邏輯順序。
排序服務的多通道( MultiChannel)實現了多鏈的資料隔離,保證只有同一個鏈的Peer節點才能訪問鏈上的資料,保護使用者資料的隱私。
排序服務可以採用集中式服務,也可以採用分散式協議。可以實現不同級別的容錯處理,目前正式釋出的版本只支援 Apache Kafka叢集,提供交易排序的功能,只實現CFT( Crash fault tolerence,崩潰故障容錯),不支援BFT( Byzantine Fault Tolerance,拜占庭容錯)。
- CA節點
CA節點是 Hyperledger fabric10的證書頒發機構( Certificate Authority),由伺服器和客戶端元件組成。CA節點接收客戶端的註冊申請,返回註冊密碼用於使用者登入,以便獲取身份證書。在區塊鏈網路上所有的操作都會驗證使用者的身份。CA節點是可選的,可以用其他成熟的第三方CA頒發證書。
交易流程圖
從上面的網路節點架構中, 我們已經瞭解到基於Hyperledger Fabric 的區塊鏈應用中涉及幾個節點角色: 應用程式、 背書節點、 排序服務節點和主節點。 在上圖中, 假定各節點已經提前頒發好證書,且已正常啟動, 並加入已經建立好的通道。