超级账本(Hyperledger Fabric):基本架构及运作机制
區(qū)塊鏈大致可分為公有鏈(典型代表為比特幣和以太坊)和聯(lián)盟鏈(私有鏈)。聯(lián)盟鏈是現有中心化商業(yè)團體聯(lián)盟之間(或團體內部)進行商業(yè)活動的手段和渠道。
HyperledgerFabric是由IBM 牽頭發(fā)起的一個代表性的聯(lián)盟鏈項目,于 15 年底移交給Linux 基金會維護,成為開源項目。Hyperledger 基金會的成員包括IBM,Intel,思科等。
Fabric 架構演變
Fabric 的架構目前經歷了兩個版本的演進,最初的 0.6 版本只能被用來做商業(yè)驗證,無法被應用于真實場景中。主要原因就是結構簡單,基本所有的功能都集中在 peer 節(jié)點,在擴展性、安全性和隔離性方面有著天然的不足,如圖1所示。在后來推出的 1.0 正式版中,將 peer 節(jié)點的功能進行分拆,把共識服務從 peer 節(jié)點剝離,獨立為 Orderer 節(jié)點提供可插拔共識服務。更為重要的一個變化就是加入了多通道(multi-channel)功能,可實現多業(yè)務隔離,因此在 0.6 版本的基礎上有了質的飛躍。
?
圖1 Fabric v0.6 架構
概念術語
Auditability(審計性):在一定權限和許可下,可以對鏈上的交易進行審計和檢查。
Certificate Authority(CA):負責身份權限管理,又叫 MemberService 或 Identity Service。
Chaincode(鏈碼):區(qū)塊鏈上的應用代碼,擴展自“智能合約”的概念,支持Go、Node.js 等編程語言,運行在隔離的容器環(huán)境中(Docker)。
Orderer(排序節(jié)點):Fabric 1.0 架構中的共識服務角色,可以對交易進行排序,批量打包,生成區(qū)塊,發(fā)給Peer節(jié)點。一個區(qū)塊鏈網絡中有多個Orderer節(jié)點,它們共同提供排序服務。排序服務可以通過不同的方式實現,從一個中心化的服務(被用于開發(fā)和測試,如Solo),到分布式協(xié)議(如Kafka)。
Endorser(背書節(jié)點):Fabric 1.0 架構中的一類 peer 節(jié)點角色,負責檢驗某個交易是否合法,是否愿意為之簽名背書。
Committer(提交節(jié)點):Fabric 1.0 架構中的另一類peer 節(jié)點角色,負責對 orderer 排序后的交易進行檢查,選擇合法的交易執(zhí)行并寫入存儲。
Enrollment Certificate Authority(ECA,注冊 CA):負責成員身份相關證書管理的 CA。
Transaction Certificate Authority(TCA,交易 CA):負責維護交易相關證書管理的 CA。
World State(世界狀態(tài)):一個鍵值(K-V)數據庫,用于存放鏈碼(Chaincode)執(zhí)行過程中涉及到的狀態(tài)變量。
Fabric v1.0 架構
Fabric v1.0 的架構如圖2所示。
?
?
圖2 Fabric v1.0 架構
Fabric聯(lián)盟鏈中有兩種類型的節(jié)點:Peer節(jié)點和Orderer節(jié)點。Chaincode部署在Peer節(jié)點上,它對賬本進行讀寫操作。一個Peer節(jié)點可以充當多種角色,如背書者endorser,提交者committer。一個區(qū)塊鏈網絡中會有多個Peer節(jié)點。
Orderer提供了通向客戶端和Peer節(jié)點的共享通信通道。提供了包含交易的消息廣播服務(broadcast和deliver)??蛻舳丝梢酝ㄟ^這個通道向所有的節(jié)點廣播(broadcast)消息。通道可以向連接到該通道的節(jié)點投遞(deliver)消息。
Orderer服務支持多通道(multi-channel)??蛻舳撕蚉eer節(jié)點可以連接到一個給定的通道,并通過給定的通道發(fā)送和接收消息。多通道使得給定的peer集合接收包含相關交易的區(qū)塊,從而與其他交易完全隔離,實現數據隔離和保密。如圖3所示,peer 1, peer 2和peerN訂閱紅色通道,共同維護紅色賬本; peer 1和peer N訂閱藍色通道并維護藍色賬本; peer 2和peer 訂閱黑色通道上,共同維護黑色賬本。
?
圖3 多通道
鏈碼(Chaincode)
鏈碼可以認為是 Fabric 提供的智能合約,是上層應用與底層區(qū)塊鏈平臺交互的媒介。
所有的鏈碼都繼承兩個接口,init和 invoke。init 接口用于初始化合約,在整個鏈碼的生命周期里,該接口僅僅執(zhí)行一次。invoke 接口是編寫業(yè)務邏輯的唯一入口,雖然只有一個入口,但是可以根據參數傳遞的不同自由區(qū)分不同業(yè)務邏輯。合約接口能獲得數據分為三類:合約輸入參數;與狀態(tài)數據庫和歷史數據庫交互(區(qū)塊鏈底層可以看做一個鍵值對數據庫,合約就是對數據庫中鍵值的增刪改查);與其他合約的交互。
Fabric 1.0交易流程
Fabric上的交易(transction)交易分兩種:部署交易和調用交易。
部署交易:把Chaincode部署到peer節(jié)點上并準備好被調用,當一個部署交易成功執(zhí)行時,Chaincode就被部署到peer節(jié)點上。
調用交易:客戶端應用程序通過Fabric提供的API調用先前已部署好的某個chaincode中的函數執(zhí)行交易,并相應地讀取和寫入K-V數據庫,返回成功或者失敗。
如下圖所示,開發(fā)者創(chuàng)建客戶端應用和Chaincode,Chaincode被部署到區(qū)塊鏈網絡的Peer節(jié)點上面。通過Chaincode來操作賬本,當調用一個交易時,實際上是在調用Chaincode中的一個函數方法,令它實現業(yè)務邏輯,并對賬本進行get, put,delete操作??蛻舳藨锰峁┯脩艚换ソ缑?#xff0c;并提交交易到區(qū)塊鏈網絡上。Fabric 1.0交易流程如下圖所示:
?
?
圖4 交易流程
(1)客戶端構造交易提案
客戶端應用程序利用任意SDK構造交易提案propose。該提案是一個調用智能合約功能函數的請求,用來確認哪些數據可以讀取或寫入賬本??蛻舳税呀灰滋岚赴l(fā)送給一個或多個Peer節(jié)點,交易提案中包含本次交易要調用的合約標識、合約方法和參數信息以及客戶端簽名等。
(2)背書節(jié)點(Endorser)模擬執(zhí)行交易
背書節(jié)點endorser收到交易提案后,驗證簽名并確定提交者是否有權執(zhí)行操作。背書節(jié)點將交易提案的參數作為輸入,在當前狀態(tài)K-V數據庫上執(zhí)行交易,生成包含執(zhí)行返回值、讀操作集合和寫操作集合的交易結果(此時不會更新賬本),這些值的集合、背書節(jié)點的簽名和背書結果(YES / NO)作為提案的結果返回給客戶端SDK,SDK解析這些信息判斷是否應用于后續(xù)的交易。
(3)客戶端把交易發(fā)送到共識服務節(jié)點(Orderers)
應用程序(SDK)驗證背書節(jié)點簽名,并比較各節(jié)點返回的提案結果,判斷提案結果是否一致以及是否參照指定的背書策略執(zhí)行??蛻舳耸盏礁鱾€背書節(jié)點的應答后,打包到一起組成一個交易并簽名,發(fā)送給Orderers。
(4)共識排序,生成新區(qū)塊,提交交易
Orderers對接收到的交易進行共識排序,然后按照區(qū)塊生成策略,將一批交易打包到一起,生成新的區(qū)塊,調用deliver API投遞消息,發(fā)送給提交節(jié)點(Committer)。Committer收到區(qū)塊后,會對區(qū)塊中的每筆交易進行校驗,檢查交易依賴的輸入輸出是否符合當前區(qū)塊鏈的狀態(tài),完成后將區(qū)塊追加到本地的區(qū)塊鏈,并修改K-V狀態(tài)數據庫。
補充說明
超級賬本V1.0將執(zhí)行鏈碼(chaincode,即智能合約)的節(jié)點(這些節(jié)點稱作peers)與決定出塊順序(即consensus)的節(jié)點(這些節(jié)點稱作orderers)相分離。每個peer維護分布式賬本的一個copy,orderers則僅提供共識排序服務,而不必維護賬本的copy。
clients首先要將交易提交給peers的一個子集(稱為背書者,endorsers)執(zhí)行chaincode。必須有足夠多(sufficient)的endorsers背書一致后(比如N個endorsers必須有K個一致),clients才將更新后的狀態(tài)以及背書簽名等提交給orderers。orderers通過共識協(xié)議輸出block的排序。最后,所有的peers再對背書進行驗證(主要是驗證交易狀態(tài)的更新的確已經得 到足夠多的endorsers背書)。從而:(1)鏈碼的執(zhí)行可以在共識排序前完成(好處是peers的多個子集可以并行處理多筆交易,提高效率);(2)不需要所有的peers都執(zhí)行所有的鏈碼(不同鏈碼可以指定不同的endorsers,從而允許平行執(zhí)行;作為對比,公有鏈比如以太坊,交易是串行執(zhí)行sequentialexecution的)。
clients判斷提案結果是否一致主要是為了消除非確定性的影響(eliminate the effects of non-determinism)。這主要是因為交易的執(zhí)行可能因為種種原因而分叉,如果client發(fā)現大 多數endorsers的執(zhí)行結果不一致時,它就會認為該交易的結果是非確定性的,這筆交易也就作廢了。
Fabric的優(yōu)勢
Fabric采用模塊化架構把交易處理劃分為3個階段:通過Chaincode進行分布式業(yè)務邏輯處理和協(xié)商(endorsers);交易排序(orderders);交易的驗證和提交(committers)。這樣劃分帶來的好處:不同的階段由不同的節(jié)點(角色endorsers, orderders, committers)參與,不需要全網的節(jié)點都參與。網絡的性能和擴展性得到優(yōu)化。Peer節(jié)點和Orderder節(jié)點可以獨立擴展,并可以動態(tài)增加。此外,Fabric提供可插拔架構,其共識機制和加密算法均是可插拔的,可以根據實際情況選擇替換。
參考:
1.????HyperledgerFabric 1.0架構及原理https://blog.csdn.net/xcjing/article/details/78883642
2.????HyperledgerFabric 架構設計整理 https://www.jianshu.com/p/ac3362c97eaa
3.????http://www.infoq.com/cn/articles/hyperledger-fabric-architecture-trap
4.????https://github.com/hyperledger/fabric
5.????https://blog.csdn.net/q48S71bCzBeYLOu9T0n/article/details/77988161
作者簡介
王帥,中國科學院自動化研究所復雜系統(tǒng)管理與控制國家重點實驗室,平行區(qū)塊鏈特邀作者,研究方向為社會計算與平行管理,區(qū)塊鏈。
總結
以上是生活随笔為你收集整理的超级账本(Hyperledger Fabric):基本架构及运作机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fabric入门之架构
- 下一篇: 区块链技术之Fabric逻辑架构详解