尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
一、區塊鏈的介紹和商品溯源的應用場景
區塊鏈簡介
區塊鏈是一種創建信任的技術機制,通過區塊鏈可以跨機構執行可信的交易。
區塊鏈包括三個基本概念:
交易:一次對帳本的操作,導致帳本狀態的一次改變,如添加一條轉帳記錄;
區塊:記錄一段時間內發生的所有交易和狀態結果,是對當前帳本狀態的一次共識;
鏈:由區塊按照發生順序串聯而成,是整個帳本狀態變化的日志記錄。
帳本底層的基本結構是一個線性的鏈表,這也是其名字「區塊鏈」的來源。鏈表有一個個「區塊」串聯組成,後續區塊記錄前導區塊的哈希值。新的數據要加入,必須放到一個新的區塊中。而這個塊是否合法,可以通過計算哈希值的方式快速檢驗出來。
商品溯源業務結合
作為零售行業的主管者,蘇寧致力於不斷為顧客提供更好的購物體驗。區塊鏈技術為商品深度溯源提供了一種解決方案,各個節點作為參與方接入聯盟鏈,可以方便的上傳自己的信息和獲取其他節點信息。聯盟內的成員可以方便的獲取商品的狀態和流向,共同為商品的信息做背書。作為消費者,可以獲取更多所購買商品的流轉信息,借以判斷商品的質量和真偽(比如生鮮食品是否過期;銷售終端是否為聯盟授權的節點)。
二、超級帳本項目的體系結構
Fabric調用邏輯
超級帳本(Hyperledger)是Linux基金會旗下的區塊鏈開發平台項目,致力於發展跨行業的商用區塊鏈平台技術。超級帳本項目中提出和做到了許多創新的設計和理念,包括完備的權限和審查管理,細粒度隱私保護,以及可拔插,可擴展的做到架構。
Fabric作為超級帳本的頂級項目,創新地引入權限管理支持,設計上支持可插拔,可擴展,是首個面向聯盟鏈場景的開源項目。
Fabric網路中存在以下4中不同種類的服務節點,彼此協作完成整個區塊鏈系統的功能。
背書節點(Endorser):負責對交易的提案(proposal)進行檢查和背書,計算交易執行結果;
確認節點(Committer):負責在接受交易結果前再次進行檢查合法性,接受合法交易對帳本的修改,並寫入區塊鏈解構;
排序節點(Orderer):對所有發往網路中的交易進行排序,將排序後的交易按照配置中的約定整理為區塊,之後提交給確認節點進行處理;
證書節點(CA):負責對網路中所有的證書進行管理,提供標準的PKI服務。
客戶端(Client):客戶端應用使用SDK來跟Fabric網路打交道。客戶端是用戶和應用跟區塊鏈網路打交道的橋梁。客戶端主要包括兩大職能:
·操作Fabric網路:包括更新網路配置、啟停節點等;
·操作運行在網路中的鏈碼:包括安裝、實例化、發起交易調用鏈碼等。
共識來自於分布式系統領域,在fabric中,共識過程意味著多個peer節點對於某一批交易的發送順、合法性以及它們對帳本狀態的更新結果達成一致的觀點。Fabric中共識包括背書,排序和驗證三個環節的保障。
1、背書過程
背書(endorsement)是指背書節點對收到的來自客戶端的請求(交易提案)按照自身的邏輯進行檢查,以決策是否予以支持的過程。通常情況下,背書過程意味著背書節點對請求提案和造成的狀態變更(讀寫集)添加數字簽名。對於調用某個鏈碼的交易來講,它需要獲得一定條件的背書才被認為合法。例如必須是來自某些特定身份成員的一致同意;或者某個組織中超過一定數目的部分成員的支持;或者指定的某個成員個體的支持。這些規則由鏈碼的背書策略來指定。背書策略內容是比較靈活的,可以使用多種規則自由組合,並在鏈碼進行實例化(instantiate)的時候指定。
2、排序服務
排序服務(orderingservice)通常是由排序節點組成的集群來提供。排序,意味著對一段時間內的一批交易達成一個網路內全局一致的順序。目前,排序服務採用了可拔插的架構,除了用於測試的solo模式,後端還可以接入包括Kafka在內的CFT類型後端,或者支持第三方做到的BFT類型後端。排序服務除了負責達成一致順序外,並不執行其他操作,這就避免了它成為整個網路的處理瓶頸。同時,排序服務節點很容易進行橫向橫向擴展,以提高整個網路的吞吐率。
3、驗證過程
驗證(validation)是對排序後的一批交易進行提交到帳本之前最終檢查的過程。驗證過程包括檢查交易結構自身完整性,交易所帶背書簽名是否滿足預設的背書策略,並且交易的讀寫集是否滿足多版本並發控制(Multi-VersionConcurrencyControl,MVCC)的相關要求等。交易在驗證環節如果進行了狀態寫操作,則對應讀集合中所有狀態的當前版本必須要跟執行背書時一致。否則該交易會被標記為不合法(invalid),對應交易不會被執行,也不影響世界狀態。
超級帳本Fabric的系統結構
整體架構圖
Fabric為應用提供了gRPCAPI,以及封裝API的SDK供應用調用。應用可以通過SDK訪問Fabric網路中的多種資源,包括帳本、交易、鏈碼、事件、權限管理等。應用開發者只需要跟這些資源打交道即可,無需關心如何做到。其中,帳本是最核心的結構,負責記錄應用信息,應用則通過發起交易來向帳本中記錄數據。交易執行的邏輯通過鏈碼來承載。整個網路運行中發生的事件可以被應用訪問,以觸發外部流程甚至其他系統。權限管理則負責整個過程中的訪問控制。
帳本和交易進一步地依賴核心的區塊鏈結構、數據庫、共識機制等技術;鏈碼則依賴容器、狀態機等技術;權限管理利用了已有的PKI體系、數字證書、加解密算法等諸多安全技術。
底層由多個節點組成P2P網路,通過gRPC通道進行交互,利用Gossip協議進行同步。
鏈碼(chaincode)
目前超級帳本Fabric項目中提供了用戶鏈碼和系統鏈碼。前者運行在單獨的容器中,提供對上層應用的支持,後者則嵌入在系統內,提供對系統進行配置、管理的支持。
通道(channel)
通道與綁定到該通道上的配置和數據(包括交易、帳本、鏈碼實例、實例、成員身份等),一起構成了一條完整的區塊鏈(Chain)。這些數據只會被加入到通道內的組織成員所感知和訪問到,通道外的成員無法訪問到通道內數據。由於通道與鏈結構是一一對應的,有時候兩者概念可以混用。
目前,通道包括應用通道(ApplicationChannel)和系統通道(SystemChannel)兩種類型,前者供用戶應用使用,負責承載各種交易;後者則負責對應用通道進行管理。
Gossip協議
在Fabric網路中,節點會定期地利用Gossip協議發送它看到的帳本的最新數據,並對發送消息進行簽名認證。通過使用該協議,主要做到如下功能:
·通道內成員的探測:新加入通道的節點可以獲知其他節點的信息,並發送Alive信息宣布在線;離線節點經過一段時間後可以被其他節點感知。
·節點之間同步數據:多個節點之間彼此同步數據,保持一致性。另外,Leader節點從Orderer拉取區塊數據後,也可以通過Gossip傳播給通道內其他節點。
gRPC消息協議
Fabric中大量採用了gRPC消息在不同組件之間進行通信交互,主要包括如下幾種情況:客戶端訪問Peer節點,客戶端和Peer訪問Orderer節點,鏈碼容器跟Peer節點之間,以及多個Peer節點之間的通信。簡單理解,接口之間的調用都是通過gRPC協議。
Fabric帳本結構
帳本包括區塊鏈(blockchain)結構,以及多個數據庫結構。
·StateDatabase:狀態數據庫,由區塊鏈結構中交易執行推演而成,記錄最新的世界狀態;
·HistoryDatabase:歷史數據庫,存放各個狀態的歷史變化記錄;
·IndexDatabase:索引數據庫,存放索引信息,例如從Hash、編號索引到區塊,從ID索引到交易等。
從數據庫的角度看,區塊鏈結構記錄的是狀態變更的歷史,狀態數據庫記錄的是變更的最終結果。每一次對帳本狀態的變更通過交易導致的讀寫集合來進行表達。因此,發生交易實際上就是對一個讀寫集合進行接受的過程。
三、Fabric在蘇寧中的應用
聯盟接入方式
蘇寧作為聯盟鏈的發起方,負責聯盟鏈的基礎服務的搭建。其他參與方,根據自身情況,可以自主選擇接入聯盟鏈的方式:
1)通過API平台和蘇寧系統交互,由蘇寧節點負責入鏈;
2)通過手機APP進行數據的上傳,後台由蘇寧節點負責入鏈;
3)通過蘇寧商品溯源門戶網站,註冊為供應商,進行溯源操作;
4)獨立部署節點,申請加入聯盟,通過自身幾點進行入鏈;
5)租用蘇寧的baas平台,申請加入聯盟,通過自身幾點進行入鏈。
業務系統架構
系統架構如下(其中baas平台還在搭建中):
目前整體的應用架構如下:
實踐中優化點
Fabric做到中的優化處理:
1、針對fabric-sdk進行封裝,並開發圖形界面,進行可視化操作
2、通過集群化部署水平擴展和並行化處理,提升TPS,提高處理速度
3、針對docker容器進行數據映射,保證重啟後,數據無影響
4、K8進行容器的自動化部署
5、權限的進一步完善,根據業務場景定制角色權限