1. 程式人生 > >HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制

HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制

HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制

一、Fabric共識過程

1、Fabric共識過程

Fabric區塊鏈的網路節點本質上是互相複製的狀態機,節點之間需要保持相同的賬本狀態。為了實現分散式節點的一致性,各個節點需要通過共識過程,對賬本狀態的變化達成一致性的認同。
Fabric區塊鏈的共識過程包括3個階段:背書、排序和校驗。

2、背書

在背書(endorsement)階段中,背書節點對客戶端發來的交易提案進行合法性校驗,然後模擬執行鏈碼得到交易結果,最後根據設定的背書邏輯判斷是否支援該交易提案。如果背書邏輯決定支援交易提案,會把交易提案簽名後發回給客戶端。
客戶端通常需要根據鏈碼的背書策略,向一個或者多個成員的背書節點發出背書請求。背書策略會定義需要哪些節點背書交易才有效,例如需要5個成員的背書節點中至少3個同意;或者某個特殊身份的成員支援等。客戶端只有在收集足夠多的背書節點的交易提案簽名,交易才能被視為有效。

3、排序

排序(ordering)階段就是由排序服務對交易進行排序,確定交易之間的時序關係。排序服務把一段時間內收到的交易進行排序,然後把排序後的批量交易打包成資料塊(區塊),再把區塊廣播給通道中的成員。採用排序共識方式,各個成員收到的是一組發生順序相同的交易,從而保證了所有節點的資料一致性。
Fabric 1.0中的排序服務支援可插拔的架構,除了提供的SOLO和Kafka 模式外,使用者可以新增第三方的排序服務。SOLO是單機模式,僅適合開發測試中使用。Kafka模式是基於Kafka開源的分散式資料流平臺,具有高擴充套件性和容錯能力,適合用在生產系統。Kafka模式只提供了CFT型別的容錯能力,即僅可對節點的一般故障失效容錯,缺乏對節點故意作惡的行為進行容錯的能力。
排序服務是共識機制中重要的一環,所有交易都要通過排序服務的排序才可以達成全網共識,因此排序服務要避免成為網路上的效能瓶頸。

4、校驗

校驗(Validation)階段是確認節點對排序後的交易進行一系列的檢驗,包括交易資料的完整性檢查、是否重複交易、背書籤名是否符合背書策略的要求、交易的讀寫集是否符合多版本併發控制MVCC(Multiversion Concurrency Control)的校驗等。當交易通過了所有校驗後,將被標註為合法並寫入賬本中。因為所有的確認節點都按照相同的順序檢驗交易,並且把合法的交易依次寫入賬本中,因此不同確認節點的狀態能夠始終保持一致。

二、Fabric共識機制

1、Fabric共識模式

在所有Peer節點中,交易資訊必須按照一致的順序寫入賬本(區塊鏈的一致性基本原則)。例如,比特幣通過POW機制競爭記賬權,由最先完成數學難題的節點獲取記賬權並生成區塊,決定本區塊中的資訊順序,並廣播給全網所有節點,以此來達成賬本的共識。而Hyperledger Fabric採用了更加靈活、高效的共識演算法,以適應企業場景下對高TPS的要求。目前,Hyperledger Fabric有三種交易排序演算法:Solo、Kafka、SBFT。
Solo:只有一個排序服務節點負責接收交易資訊並排序,是最簡單的一種排序演算法,一般用於開發測試環境中。Solo共識模式屬於中心化的處理方式,不支援拜占庭容錯。
Kafka:Kafka是Apache的一個開源專案,主要提供分散式的訊息處理/分發服務,每個Kafka叢集由多個服務節點組成。Hyperledger Fabric利用Kafka對交易資訊進行排序處理,提供高吞吐、低延時的處理能力,並且在叢集內部支援節點故障容錯,但不支援拜占庭容錯。
SBFT:簡單拜占庭演算法,支援拜占庭容錯的可靠排序演算法,包括容忍節點故障以及一定數量的惡意節點。目前,Hyperledger Fabric社群正在開發SBFT演算法。

2、Solo共識模式

Solo共識模式指網路環境中只有一個排序節點,從Peer節點發送來的訊息由一個排序節點進行排序和產生區塊;由於排序服務只有一個排序節點為所有Peer節點服務,沒有高可用性和可擴充套件性,不適合用於生產環境,通常用於開發和測試環境。Solo共識模式呼叫時序圖如下:
HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制
Solo共識模式呼叫過程說明:
   A、Peer節點通過gPRC連線排序服務,連線成功後,傳送交易資訊。
   B、排序服務通過Recv介面,監聽Peer節點發送過來的資訊,收到資訊後進行資料區塊處理。
   C、排序服務根據收到的訊息生成資料區塊,並將資料區塊寫入賬本(Ledger)中,返回處理資訊。
   D、Peer節點通過deliver介面,獲取排序服務生成的區塊資料。

3、Kafka共識模式

HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制
共識叢集由多個排序服務節點(OSN)和一個Kafka叢集組成。排序節點之間不直接通訊,僅僅與Kafka叢集通訊。
在排序節點的實現裡,通道(Channel)在Kafka中是以主題topic的形式隔離。
每個排序節點內部,針對每個通道都會建立與Kafka叢集對應topic的生產者及消費者。生產者將排序節點收到的交易傳送到Kafka叢集進行排序,在生產的同時,消費者也同步消費排序後的交易。