1. 程式人生 > >淺析Hyperledger Fabric架構原理

淺析Hyperledger Fabric架構原理

Hyperledger Fabric概述

Hyperledger Fabric是由IBM公司主導開發的一個面向企業級客戶的開源專案。與比特幣和以太坊這類公有鏈不同,Hyperledger Fabric網路中的節點必須經過授權認證後才能加入,從而避免了POW資源開銷,大幅提高了交易處理效率,滿足企業級應用對處理效能的訴求。同時,為了滿足靈活多變的應用場景,Hyperledger Fabric採用了高度模組化的系統設計理念,將許可權認證模組(MSP)、共識服務模組(Ordering Service)、背書模組(Endorsing peers)、區塊提交模組(committing peers)等進行分離部署,使開發者可以根據具體的業務場景替換模組,實現了模組的外掛式管理(plug-in/plug-out)。所以,Hyperledger Fabric是一個私有鏈/聯盟鏈的開發框架,而且系統的執行不需要token支援。

 

 

關鍵元件:

Channel:是一種資料隔離機制,保證交易資訊只有交易參與方可見,每個channel是一個獨立的區塊鏈,這使得多個使用者可以共用同一個區塊鏈系統而不用擔心資訊洩露問題。

 

Chaincode:也叫智慧合約,將資產定義和資產處理邏輯封裝成介面,當其被使用者呼叫的時候,改變賬本的狀態。

Ledger:區塊鏈賬本,儲存交易資訊和智慧合約程式碼。

Network:交易處理節點之間的P2P網路,用於維持區塊鏈賬本的一致性。

Ordering service:利用kafka、SBTF等共識演算法對所有交易資訊進行排序並打包成區塊,發給committing peers節點,寫入區塊鏈中。

World state:顯示當前資產資料的狀態,底層通過LevelDB和CouchDB資料庫將區塊鏈中的資產資訊組織起來,提供高效的資料訪問介面。

Membership service provider(MSP):管理認證資訊,為client和peers提供授權服務。

hyperledger_architecture

 

Hyperledger Fabric Network中的角色

在Hyperledger中,由三種類型的角色:

 

Client:應用客戶端,用於將終端使用者的交易請求傳送到區塊鏈網路;

Peers:負責維護區塊鏈賬本,分為endoring peers和committing peers,其中,endorser為交易做背書(驗證交易並對交易簽名),committer接收打包好的區塊,然後寫入區塊鏈中。Peers節點是一個邏輯的概念,endorser和committer可以同時部署在一臺物理機上。

Ordering Service:接收交易資訊,並將其排序後打包成區塊,放入區塊鏈,最後將結果返回給committer peers。

 

Hyperledger交易流程

1、客戶端通過SDK介面,向endorsing peer節點發送交易資訊:

 

1

2、每個endorsing peer節點模擬處理交易,此時並不會將交易資訊寫入賬本。然後,endorser peer會驗證交易資訊的合法性,並對交易資訊簽名後,返回給client。此時的交易資訊只是在client和單個endorser peer之間達成共識,並沒有完成全網共識,各個client的交易順序沒有確定,可能存在雙花問題,所以還不能算是一個“有效的交易”。同時,client需要收到“大多數”endorser peer的驗證回覆後,才算驗證成功,具體的背書策略由智慧合約程式碼控制,可以由開發者自由配置。

2

3、client將簽名後的交易資訊傳送給order service叢集進行交易排序和打包。Order service叢集通過共識演算法,對所有交易資訊進行排序,然後打包成區塊。Order service的共識演算法是以元件化形態插入Hyperledger系統的,也就是說開發者可以自由選擇合適的共識演算法。

3

4、ordering service將排序打包後的區塊廣播發送給committing peers,由其做最後的交易驗證,並寫入區塊鏈。ordering service只是決定交易處理的順序,並不對交易的合法性進行校驗,也不負責維護賬本資訊。只有committing peers才有賬本寫入許可權。

4

 

 

Hyperledger Fabric Network的共識演算法

在所有peers中,交易資訊必須按照一致的順序寫入賬本(區塊鏈的基本原則)。例如,比特幣通過POW機制,由最先完成數學難題的節點決定本次區塊中的資訊順序,並廣播給全網所有節點,以此來達成賬本的共識。而Hyperledger Fabric採用了更加靈活、高效的共識演算法,以適應企業場景下,對高TPS的要求。目前,Hyperledger Fabric有三種交易排序演算法可以選擇。

 

SOLO:只有一個order服務節點負責接收交易資訊並排序,這是最簡單的一種排序演算法,一般用在實驗室測試環境中。Sole屬於中心化的處理方式。

Kafka:是Apache的一個開源專案,主要提供分散式的訊息處理/分發服務,每個kafka叢集由多個服務節點組成。Hyperledger Fabric利用kafka對交易資訊進行排序處理,提供高吞吐、低延時的處理能力,並且在叢集內部支援節點故障容錯。

SBFT:簡單拜占庭演算法,相比於kafka,提供更加可靠的排序演算法,包括容忍節點故障以及一定數量的惡意節點。目前,Hyperledger Fabric社群正在開發該演算法。

 

交易流程總結

區塊鏈的賬本由peer節點維護,並不是由ordering service叢集維護,所以,只有peer節點上可以找到完整的區塊鏈資訊,而order service叢集只負責對交易進行排序,只保留處理過程中的一部分割槽塊鏈資訊。Hyperledger Fabric系統中的節點是一個邏輯的概念,並不一定是一個臺物理裝置,但是對於生產環境的設計者來說,peer節點不能和order節點部署在一臺機器上,而enduring peers和committing peers可以部署在同一臺機器上,這種設計主要是為了系統架構的解耦,提高擴充套件性,以及通過主機隔離提高安全性。 Endorsing peer校驗客戶端的簽名,然後執行智慧合約程式碼模擬交易。交易處理完成後,對交易資訊簽名,返回給客戶端。客戶端收到簽名後的交易資訊後,發給order節點排序。Order節點將交易資訊排序打包成區塊後,廣播發給committing peers,寫入區塊鏈中。一個完整的交易處理流程如下圖所示:

 

9

 

Channel的概念

Channels能夠讓上層不同的使用者業務共享同一個區塊鏈系統資源,主要包括網路、計算、儲存資源。從本質上來說,channels是通過不同的區塊鏈賬本來為上層業務服務,而且,這些區塊鏈統一部署在peers節點上,統一通過ordering service進行交易排序和打包區塊。Channels之間通過許可權隔離控制,不同channel內的成員,無法訪問對方的交易資訊,只能訪問所屬channel的交易資訊。

 

6

channel可以理解為系統資源的邏輯單元,每個channel都包含peers資源、order資源、網路資源等等,而且這些資源有可能是和其它channel所共享。

 

State Database

狀態資料庫儲存了賬本所有資產的最新狀態(例如,賬戶A擁有某種資產的總量),同時,為智慧合約提供了豐富的資產查詢語義。所有的資產資訊最終以檔案形式記錄在區塊鏈賬本中,而資料庫是區塊鏈賬本的視圖表現形式,能夠讓智慧合約更加高效的和賬本資訊進行互動。資料庫自動從底層區塊鏈賬本中更新或者恢復資料,預設的狀態資料庫是LevelDB,也可以替換為CouchDB。

 

LevelDB:Hyperledger Fabric的預設資料庫,簡單的儲存鍵值對資訊;

CouchDB:提供更加豐富的查詢語義,可以儲存JSON物件,以及範圍key的查詢。

7

Smart Contract

智慧合約就是一段部署在區塊鏈賬本中的計算機程式,用於執行交易以及修改資產的狀態。在Hyperledger Fabric中,智慧合約被稱作chaincode,使用Go語言編寫。

 

 

Membership Service Provider(MSP)

Hyperledger Fabric是一種permissioned blockchain,所有的節點都是必須經過授權後才能訪問區塊鏈網路(比特幣屬於permissionless blockchain)。MSP是Hyperledger Fabric中的身份認證模組,用於對使用者身份的校驗、授權以及網路訪問許可權控制。預設的MSP介面是Fabric-CA API,同時,開發者可以根據自身的業務需要,實現自己的身份認證介面,對接MSP。Hyperledger Fabric網路可以被多個MSP控制,用以滿足各個組織的需要。

 

8

 

 

Hyperledger Fabric的商業價值

隨著比特幣、以太坊等一系列虛擬貨幣的瘋漲,區塊鏈一度被認為是可以顛覆網際網路的下一代革命性技術。但是,我們需要清楚的意識到,虛擬貨幣的價格並不能代表區塊鏈技術能夠為人類創造的實際價值,而且,大多數區塊鏈應用本身並不需要token激勵機制。所以,區塊鏈未來的發展取決於能否廣泛應用在商業領域,為人類的生活生產降低成本、提高效率。

 

Hyperledger Fabric的意義在於,邁出了區塊鏈向商業領域進軍的第一步,未來會有更多的區塊鏈專案在各個行業中創造價值。