1. 程式人生 > >區塊鏈技術系列(3)- Fabric基礎架構原理

區塊鏈技術系列(3)- Fabric基礎架構原理

多看 技術分享 發的 size 開源項目 初始 排序。 創建 生成

前言

對於區塊鏈方面多技術,我還是建議大家多看英文文檔,多利用Google來搜索技術文章。
怎麽搭建自己專屬V-P-N來訪問Google,請看我之前發的文章: 新人如何快速搭建自己的個人網站以及自己專屬V-P-N代理

Linux基金會於2015年12月啟動了名為“超級賬本”(Hyperledger)的開源項目,旨在推動各方協作,共同打造基於區塊鏈的企業級分布式賬本底層技術,用於構建支撐業務的行業應用和平臺。

超級賬本裏包括10個項目(project),其中區塊鏈框架類項目5個:Fabric,Sawtooth,Iroha,Burrow和Indy;區塊鏈工具類項目5個:Cello,Composer,Explorer, Caliper 和 Quilt 。

Fabric 於 2017 年 7月發布了1.0 GA版本,並得到社區較廣泛的使用。本文主要介紹Fabric的總體架構。

Fabric基礎架構

Fabric 項目的目標是實現一個通用的權限區塊鏈(Permissioned Chain)的底層基礎框架,為了適用於不同的場合,采用模塊化架構提供可切換和可擴展的組件,包括共識算法、加密安全、數字資產、智能合約和身份鑒權等服務。

Fabric 克服了比特幣等公有鏈項目的缺陷,如吞吐量低、交易公開無隱私性、無最終確定性以及共識算法低效等問題,使得用戶能夠方便地開發商業應用。

另一方面,Fabric 也存在不足之處,如 v1.2 的共識算法尚不支持 BFT 類型,交易過程還有並發控制的局限性,整體性能還有待提高等。

主要組件

Fabric 的組件包括客戶端(Client),網絡節點(Peer),CA(Certificate Authority)節點和排序節點(Orderer)。各個組件的相互關系如圖所示。

技術分享圖片

客戶端(Client)

客戶端的主要作用是和 Fabric 系統交互,實現對區塊鏈系統的操作。這些操作分為管理類和鏈碼類的兩種。管理類包括啟停節點和配置網絡等;鏈碼類操作主要是鏈碼的生命周期管理,如安裝、實例化以及調用鏈碼。最常用的客戶端是命令行客戶端(CLI),此外是用 Fabric SDK 開發的應用客戶端。用戶通過不同的客戶端使用 Fabric 系統的功能。

網絡節點(Peer)

網絡節點(Peer)是區塊鏈去中心化網絡中的對等節點,按照功能主要分為背書節點(Endorser)和確認節點(Committer)。背書節點主要對交易預案進行校驗、模擬執行和背書。確認節點主要負責檢驗交易的合法性,並更新和維護區塊鏈數據和賬本狀態。在實際部署中,背書節點和確認節點既可以部署在同一物理節點上,也可以分開部署。

排序節點(Orderer)

排序節點(Orderer)主要職責是對各個節點發來的交易進行排序。在並發的情況下,各個節點交易的先後時序需要通過排序節點來確定並達成共識。排序節點按照一定規則確定交易順序之後,發給各個節點把交易持久化到區塊鏈的賬本中。排序節點支持互相隔離的多個通道,使得交易只發送給相關的節點(Peer)。

CA 節點

CA 節點主要給Fabric網絡中的成員提供基於數字證書的身份信息,可以生成或取消成員的身-份-證-書(certificate)。在成員身份明確的基礎上,Fabric可以實現權限控制的管理。

Fabric 網絡的組件往往歸屬於不同的組織,在組織之間形成對等的去中心化網絡。每個組織通常擁有自己的客戶端、網絡節點和 CA 節點,並且可以根據需要創建一個或多個不同的類型節點。排序節點不屬於某個組織的實體,屬於組織共同維護的組件。

通道

商業應用的一個重要的需求是私密性-交易,為此 Fabric 設計了通道(Channel)來提供成員之間的隱私保護。通道是部分網絡成員之間擁有獨立的通信渠道,在通道中發送的交易只有屬於通道的成員才可見,因此通道可以看作是Fabric的網絡中部分成員的私有通信“子網”。

通道由排序服務管理。在創建通道的時候,需要定義它的成員和組織、錨節點(anchor peer)和排序服務的節點,一條和通道對應的區塊鏈結構也同時生成,用於記錄賬本的交易,通道的初始配置信息記錄在區塊鏈的創世塊(第一個區塊)中。通道的配置信息可以用增加一個新的配置區塊來更改。

每個組織可有多個節點加入同一個通道,這些節點中可以指定一個錨節點(或多個錨節點做備份)。錨節點代表本組織與其他組織的節點交互,從而發現通道中的所有節點。另外,同一組織的節點會選舉或指定主導節點( leading peer ),主導節點負責接收從排序服務發來的區塊,然後轉發給本組織的其他節點。主導節點可以通過特定的算法選出,因此保證了在節點數量不斷變動的情況下仍能維持整個網絡的穩定性。

在 Fabric 的網絡中,可能同時存在多個彼此隔離的通道,每個通道包含一條私有的區塊鏈和一個私有賬本,通道中可以實例化一個或多個鏈碼,以操作區塊鏈上的數據。由此可見,Fabric 是以通道為基礎的多鏈多賬本系統。

分布式賬本

Fabric 裏的數據以分布式賬本的形式存儲。賬本由一系列有順序和防篡改的記錄組成,記錄包含著數據的全部狀態改變。賬本中的數據項以鍵值對的形式存放,賬本中所有的鍵值對構成了賬本的狀態,也稱為“世界狀態”( World State )。

每個通道中有唯一的賬本,由通道中所有成員共同維護著這個賬本,每個確認節點上都保存了它所屬通道的賬本的一個副本,因而是分布式賬本。對賬本的訪問需要通過鏈碼實現對賬本鍵值對的增加、刪除、更新和查詢等的操作。

賬本由區塊鏈和狀態數據庫兩部分組成。

區塊鏈是一組不可更改的有序的區塊(數據塊),記錄著全部交易的日誌。每個區塊中包含若幹個交易的數據,不同區塊所包含的交易數量可以不同。區塊之間用哈希鏈( Hashed-link )關聯:每個區塊頭包含該區塊所有交易的哈希值,以及上一個區塊頭的哈希值。這樣的鏈式架構可以確保每個區塊的數據不可更改,以及每個區塊之間的順序關系不可更改。這個特點決定了區塊鏈的區塊只可以添加在鏈的尾部。

狀態數據庫記錄了賬本中所有鍵值對的當前值,相當於對當前賬本的交易日誌做了索引。鏈碼執行交易的時候需要讀取賬本的當前狀態,從狀態數據庫可以迅速獲取鍵值的最新狀態。

如果沒有狀態數據庫,要獲得某個鍵值時,需要遍歷整個區塊鏈中和該鍵值相關的交易,效率非常低,因此,讀取狀態數據庫可以認為是快速定位和訪問某個鍵值的方法。另外,當狀態數據庫出現故障的時候,可以通過遍歷賬本重新生成。

當一個區塊附加到區塊鏈尾部的時候,如果區塊中的有效交易修改了鍵值對,則會在狀態數據庫中作相應的更新,這樣區塊鏈和狀態數據庫始終保持一致。

區塊鏈的數據塊以文件形式保存在各個節點中。狀態數據庫原理上可以是各種鍵值數據庫,Fabric 缺省使用的是 LevelDB ,也支持 CouchDB 的選項。CouchDB 除了支持鍵值數據之外,也支持 JSON 格式的文檔模型,能夠做復雜的查詢。

對於區塊鏈方面多技術,我還是建議大家多看英文文檔,多利用Google來搜索技術文章。
怎麽搭建自己專屬V-P-N來訪問Google,請看我之前發的文章: 新人如何快速搭建自己的個人網站以及自己專屬V-P-N代理

區塊鏈技術系列(3)- Fabric基礎架構原理