淺析Hyperledger Fabric共識算法

鏈客,專爲開發者而生,有問必答!node

此文章來自鏈客區塊鏈技術問答社區,未經容許拒絕轉載。算法

在這裏插入圖片描述

區塊鏈系統是一個分佈式架構,交易帳本信息由各個節點管理,組成一個龐大的分佈式帳本。在分佈式系統中,各個節點收到的交易信息的順序可能存在差別(例如,網絡延遲、主機處理性能),這會致使帳本信息的狀態不一致,例如,小王帳戶只有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集羣,對交易信息統一排序。性能

什麼是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並接收處理後的消息。

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節點。

總結

Hyperledger Fabric做爲企業級的區塊鏈項目,更加註重TPS吞吐量和部署成本,因此,採用的Kafka共識算法。相比於POW共識算法,Kafka更加高效,節能環保,並且提供容錯機制,保證系統穩定運行。

相關文章
相關標籤/搜索