1. 程式人生 > >淺析Hyperledger Fabric共識演算法

淺析Hyperledger Fabric共識演算法

Hyperledger Fabric共識演算法

區塊鏈系統是一個分散式架構,交易賬本資訊由各個節點管理,組成一個龐大的分散式賬本。在分散式系統中,各個節點收到的交易資訊的順序可能存在差異(例如,網路延遲、主機處理效能),這會導致賬本資訊的狀態不一致,例如,小王賬戶只有10元,但是他同時轉賬給小李和小張各10元,並且將這兩條交易資訊分別傳送到兩個分散式節點上,如果不對這兩條交易進行排序校驗,那麼,小王實際消費了20元(所謂的雙花問題)。所以,在區塊鏈系統中,我們需要一套機制,來保證交易的先後順序,這套機制就是人們常說的“共識演算法”。

 

在比特幣中,採用POW演算法來解決上述雙花問題,例如,小王還是將兩條轉賬交易分別發給兩組節點,這兩組節點分別對其中一條交易打包後寫入區塊鏈,然後整個系統中產生了兩條區塊鏈,一條包含了小王轉10元給小李的交易資訊,另外一條包含了小王轉10元給小張的交易資訊(所謂的分叉)。隨後,兩組節點繼續分別打包並生成各自的區塊鏈,兩條區塊鏈繼續增長。但是,這兩組節點的算力各有差異,最後總會出現一組節點的區塊鏈更長一些,那麼,另一組節點就會將更長的區塊鏈同步到本地,作為有效鏈。最終,小王的其中一筆重複的交易被丟棄。

Hyperledger Fabric的共識演算法和比特幣有很大不同,首先,前者是由permissioned節點組成的分散式系統,所有記賬節點都是可信的(不會惡意偽造交易資訊),所以,不需要POW算力證明。同時,Hyperledger Fabric的各個節點的交易資訊統一由排序服務節點(orderer service node)處理,保證每個節點上的交易順序一致,天然避免了分叉問題。目前,Hyperledger Fabric提供兩種排序演算法,SOLO和Kafka,其中SOLO模式只有一個order服務節點負責接收交易資訊並排序,這是最簡單的一種排序演算法,不適合大規模的實際生產環境,一般用在實驗室測試環境中。下面重點介紹Kafka演算法。

 

排序服務原理

排序服務是由一組orderer節點(Ordering Service Node,簡稱OSN)組成,OSN在網路中的角色是代理節點,多個OSN會對接到Kafka叢集,利用Kafka完成共識功能。

 

客戶端APP通過SDK將驗證後的交易資訊傳送給OSN,然後,OSN對訊息做初步校驗後,封裝成Kafka訊息格式,傳送到Kafka叢集,對交易資訊統一排序。

1

 

 

什麼是kafka

Hyperledger Fabric的核心共識演算法通過Kafka叢集實現,簡單來說,就是通過Kafka對所有交易資訊進行排序(如果系統存在多個channel,則對每個channel分別排序)。Kafka最初由Linkedin公司開發,後來成為Apache的一個開源專案。

 

Kafka是一個分散式的流式資訊處理平臺,目標是為實時資料提供統一的、高吞吐、低延遲的效能。Kafka由以下幾類角色構成:

Broker:訊息處理節點,主要任務是接收producers傳送的訊息,然後寫入對應的topic的partition中,並將排序後的訊息傳送給訂閱該topic的consumers。 大量的Broker節點提高了資料吞吐量,並互相對partition資料做冗餘備份(類似RAID技術)。

Zookeeper:為Brokers提供叢集管理服務和共識演算法服務(paxos演算法),例如,選舉leader節點處理訊息並將結果同步給其它followers節點,移除故障節點以及加入新節點並將最新的網路拓撲圖同步傳送給所有Brokers。

Producer:訊息生產者,應用程式通過呼叫Producer API將訊息傳送給Brokers。

Consumer:訊息消費者,應用程式通過Consumer API訂閱topic並接收處理後的訊息。

2

Broker上的訊息佈局

Kafka將訊息分類儲存為多個topic,每個topic中包含多個partition,訊息被連續追加寫入partition中,形成目錄式的結構。一個topic可以被多個consumers訂閱。簡單來說,partition就是一個FIFO的訊息管道,一端由producer寫入訊息,另一端由consumer取走訊息(注意,這裡的取走並不會移除訊息,而是移動consumer的位置指標)。

 

Hyperledger Fabric中的每個channel對應一個topic(topic名稱就是channelID),每個topic只有一個partition(0號分割槽),沒有利用到多分割槽的負載均衡特性。每條交易資訊對應partition中的一個record訊息記錄,形成一條有序的交易資訊鏈,最後,經過分割打包後,形成區塊鏈,寫入committing peer節點。

 

3

 

4

 

總結

Hyperledger Fabric作為企業級的區塊鏈專案,更加註重TPS吞吐量和部署成本,所以,採用的Kafka共識演算法。相比於POW共識演算法,Kafka更加高效,節能環保,而且提供容錯機制,保證系統穩定執行。