1. 程式人生 > >深度探索Hyperledger技術與應用之超級賬本的系統架構

深度探索Hyperledger技術與應用之超級賬本的系統架構

image

區塊鏈的業務需求多種多樣,一些要求在快速達成網路共識及快速確認區塊後,才可以將區塊加入區塊鏈中。有一些可以接受相對緩慢的處理時間,以換取較低級別的信任。各行各業在擴充套件性、可信度、合法性、工作流複雜度以及安全性等方面的需求和用途都不盡相同。我們先來看一下在企業級區塊鏈系統中常見的模組構成,如圖3-1所示。

image

從圖中可以看到一些常用的功能模組有:應用程式、成員管理、智慧合約、賬本、共識機制、事件機制、系統管理等。縱軸代表使用者或者開發者更關心的內容,越往上代表使用者更關注,比如應用程式和錢包等,越靠下是開發者更關注的模組,比如事件機制。而橫軸則是從時間的維度來看的,左邊是一開始關注的功能,直到完成所有的功能。

Hyperledger Fabric 1.0是一種通用的區塊鏈技術,其設計目標是利用一些成熟的技術實現分散式賬本技術(Distributed Ledger Technology,DLT)。超級賬本採用模組化架構設計,複用通用的功能模組和介面。模組化的方法帶來了可擴充套件性、靈活性等優勢,會減少模組修改、升級帶來的影響,能很好地利用微服務實現區塊鏈應用系統的開發和部署。Hyperledger Fabric 1.0設計有幾個特點:

1)模組外掛化:很多的功能模組(如CA模組、共識演算法、狀態資料庫儲存、ESCC、VSCC、BCCSP等)都是可插拔的,系統提供了通用的介面和預設的實現,這滿足了大多數的業務需求。這些模組也可以根據需求進行擴充套件,整合到系統中。

2)充分利用容器技術:不僅節點使用容器作為執行環境,鏈碼也預設執行在安全的容器中。應用程式或者外部系統不能直接操作鏈碼,必須通過背書節點提供的介面轉發給鏈碼來執行。容器給鏈碼執行提供的是安全沙箱環境,把鏈碼的環境和背書節點的環境隔離開,鏈碼存在安全問題也不會影響到背書節點。

**3)可擴充套件性:**Hyperledger Fabric 1.0在0.6版本的基礎上,對Peer節點的角色進行了拆分,有背書節點(Endorser)、排序服務節點(Orderer)、記賬節點(Committer)等,不同角色的節點有不同的功能。節點可以加入到不同的通道(Channel)中,鏈碼可以執行在不同的節點上,這樣可以更好地提升並行執行的效率和吞吐量。

**4)安全性:**Hyperledger Fabric 1.0提供的是授權訪問的區塊鏈網路,節點共同維護成員資訊,MSP(Membership Service Provider)模組驗證、授權了終端使用者後才能使用區塊鏈網路的功能。多鏈和多通道的設計容易實現資料隔離,也提供了應用程式和鏈碼之間的安全通道,實現了隱私保護。

1

系統邏輯架構

下圖所示為Hyperledger Fabric 1.0設計的系統邏輯架構圖。

image

上圖所示的系統邏輯架構圖是從不同角度來劃分的,上層從應用程式的角度,提供了標準的gRPC介面,在API的基礎之上封裝了不同語言的SDK,包括Golang、Node.js、Java、Python等,開發人員可以利用SDK開發基於區塊鏈的應用。區塊鏈強一致性要求,各個節點之間達成共識需要較長的執行時間,也是採用非同步通訊的模式進行開發的,事件模組可以在觸發區塊事件或者鏈碼事件的時候執行預先定義的回撥函式。下面分別從應用程式和底層的角度分析應該關注的幾個要素。

1、應用程式角度

(1)身份管理

使用者註冊和登入系統後,獲取到使用者註冊證書(ECert),其他所有的操作都需要與使用者證書關聯的私鑰進行簽名,訊息接收方首先會進行簽名驗證,才進行後續的訊息處理。網路節點同樣會用到頒發的證書,比如系統啟動和網路節點管理等都會對使用者身份進行認證和授權。

(2)賬本管理

授權的使用者是可以查詢賬本資料(ledger)的,這可以通過多種方式查詢,包括根據區塊號查詢區塊、根據區塊雜湊查詢區塊、根據交易號查詢區塊、根據交易號查詢交易,還可以根據通道名稱獲取查詢到的區塊鏈資訊。

(3)交易管理

賬本資料只能通過交易執行才能更新,應用程式通過交易管理提交交易提案(Proposal)並獲取到交易背書(Endorsement)以後,再給排序服務節點提交交易,然後打包生成區塊。SDK提供介面,利用使用者證書本地生成交易號,背書節點和記賬節點都會校驗是否存在重複交易。

(4)智慧合約

實現“可程式設計的賬本”(Programmable Ledger),通過鏈碼執行提交的交易,實現基於區塊鏈的智慧合約業務邏輯。只有智慧合約才能更新賬本資料,其他模組是不能直接修改狀態資料(World State)的。

2.底層角度

下面的內容是從Hyperledger Fabric 1.0底層的角度來看,如何實現分散式賬本技術,給應用程式提供區塊鏈服務。

(1)成員管理

MSP(Membership Service Provider)對成員管理進行了抽象,每個MSP都會建立一套根信任證書(Root of Trust Certificate)體系,利用PKI(Public Key Infrastructure)對成員身份進行認證,驗證成員使用者提交請求的簽名。結合Fabric-CA或者第三方CA系統,提供成員註冊功能,並對成員身份證書進行管理,例如證書新增和撤銷。註冊的證書分為註冊證書(ECert)、交易證書(TCert)和TLS證書(TLS Cert),它們分別用於使用者身份、交易簽名和TLS傳輸。

(2)共識服務

在分散式節點環境下,要實現同一個鏈上不同節點區塊的一致性,同時要確保區塊裡的交易有效和有序。共識機制由3個階段完成:客戶端向背書節點提交提案進行簽名背書,客戶端將背書後的交易提交給排序服務節點進行交易排序,生成區塊和排序服務,之後廣播給記賬節點驗證交易後寫入本地賬本。網路節點的P2P協議採用的是基於Gossip的資料分發,以同一組織為傳播範圍來同步資料,提升網路傳輸的效率。

(3)鏈碼服務

智慧合約的實現依賴於安全的執行環境,確保安全的執行過程和使用者資料的隔離。Hyperledger Fabric採用Docker管理普通的鏈碼,提供安全的沙箱環境和映象檔案倉庫。其好處是容易支援多種語言的鏈碼,擴充套件性很好。Docker的方案也有自身的問題,比如對環境要求較高,佔用資源較多,效能不高等,實現過程中也存在與Kubernetes、Rancher等平臺的相容性問題。

(4)安全和密碼服務

安全問題是企業級區塊鏈關心的問題,尤其在關注國家安全的專案中。其中底層的密碼學支援尤其重要,Hyperledger Fabric 1.0專門定義了一個BCCSP(BlockChain Cryptographic Service Provider),使其實現金鑰生成、雜湊運算、簽名驗籤、加密解密等基礎功能。BCCSP是一個抽象的介面,預設是軟實現的國標演算法,目前社群和較多的廠家都在實現國密的演算法和HSM(Hardware Security Module)。

Hyperledger Fabric 1.0在架構上的設計具有很好的可擴充套件性,目前是眾多可見的區塊鏈技術中最為活躍的,值得區塊鏈技術愛好者深入研究。

2

網路節點架構

節點是區塊鏈的通訊主體,是一個邏輯概念。多個不同型別的節點可以執行在同一物理伺服器上。有多種型別的節點:客戶端、Peer節點、排序服務節點和CA節點。下圖所示為網路節點架構圖。

image

接下來詳細地解釋圖3-3所示的不同節點的型別。

1.客戶端節點

客戶端或者應用程式代表由終端使用者操作的實體,它必須連線到某一個Peer節點或者排序服務節點上與區塊鏈網路進行通訊。客戶端向背書節點(Endorser)提交交易提案(Transaction Proposal),當收集到足夠背書後,向排序服務廣播交易,進行排序,生成區塊。

2. Peer節點

所有的Peer節點都是記賬節點(Committer),負責驗證從排序服務節點區塊裡的交易,維護狀態資料和賬本的副本。部分節點會執行交易並對結果進行簽名背書,充當背書節點的角色。背書節點是動態的角色,是與具體鏈碼繫結的。每個鏈碼在例項化的時候都會設定背書策略,指定哪些節點對交易背書後才是有效的。也只有在應用程式向它發起交易背書請求的時候才是背書節點,其他時候就是普通的記賬節點,只負責驗證交易並記賬。

圖3-2所示的Peer節點還有一種角色是主節點(Leader Peer),代表的是和排序服務節點通訊的節點,負責從排序服務節點處獲取最新的區塊並在組織內部同步。可以強制設定為主節點,也可以動態選舉產生。

在圖3-2 中還可以看到,有的節點同時是背書節點和記賬節點,也可以同時是背書節點、主節點和記賬節點,也可以只是記賬節點。在後面的章節中,有的地方會用記賬節點代表普通的Peer節點。

3.排序服務節點

排序服務節點(Ordering Service Node或者Orderer)接收包含背書籤名的交易,對未打包的交易進行排序生成區塊,廣播給Peer節點。排序服務提供的是原子廣播(Atomic Broadcast),保證同一個鏈上的節點接收到相同的訊息,並且有相同的邏輯順序。

排序服務的多通道(MultiChannel)實現了多鏈的資料隔離,保證只有同一個鏈的Peer節點才能訪問鏈上的資料,保護使用者資料的隱私。

排序服務可以採用集中式服務,也可以採用分散式協議。可以實現不同級別的容錯處理,目前正式釋出的版本只支援Apache Kafka叢集,提供交易排序的功能,只實現CFT(Crash Fault Tolerence,崩潰故障容錯),不支援BFT(Byzantine Fault Tolerance,拜占庭容錯)。

4. CA節點

CA節點是Hyperledger Fabric 1.0的證書頒發機構(Certificate Authority),由伺服器和客戶端元件組成。CA節點接收客戶端的註冊申請,返回註冊密碼用於使用者登入,以便獲取身份證書。在區塊鏈網路上所有的操作都會驗證使用者的身份。CA節點是可選的,可以用其他成熟的第三方CA頒發證書。

下期預告:深度探索Hyperledger技術與應用之超級賬本的典型交易流程

image

深度探索區塊鏈

Hyperledger技術與應用

區塊鏈

張增駿,董寧,朱軒彤,陳劍雄  著

本書由超級賬本執行董事Brian Behlendorf領銜推薦,區塊鏈一線落地實踐團隊、Hyperleger會員智鏈骨幹團對撰寫。深入講解Hyperledger Fabric 1.0的架構、執行邏輯、核心功能實現、從零部署,並以票據案例為例,講解具體開發實踐,穿插開發所需的最佳實踐和遇到的問題解決。

機械工業

出版社

image

 華章科技是機械出版社的旗下品牌,出版了“電腦科學叢書”等近30個經典套系,在各個細分領域均處於領導地位,其中《Java程式設計思想》、《演算法導論》、《編譯原理》、《資料探勘:概念與技術》、《深入理解計算機系統》、《深入理解Java虛擬機器》等著作猶如計算機圖書領域的璀璨明珠,長銷不衰!

本文內容節選自《深度探索區塊鏈:Hyperledger技術與應用》一書的第2章《超級賬本初體驗》。

本書作者:張增駿,董寧,朱軒彤,陳劍雄

感謝機械工業出版社華章分社的支援和分享。

以下是我們的社群介紹,歡迎各種合作、交流、學習:)

image