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

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

1、Fabric共識過程

一、Fabric共識過程

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

二、背書

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

三、排序

排序(ordering)階段就是由排序服務對交易進行排序,肯定交易之間的時序關係。排序服務把一段時間內收到的交易進行排序,而後把排序後的批量交易打包成數據塊(區塊),再把區塊廣播給通道中的成員。採用排序共識方式,各個成員收到的是一組發生順序相同的交易,從而保證了全部節點的數據一致性。
Fabric 1.0中的排序服務支持可插拔的架構,除了提供的SOLO和Kafka 模式外,用戶能夠添加第三方的排序服務。SOLO是單機模式,僅適合開發測試中使用。Kafka模式是基於Kafka開源的分佈式數據流平臺,具備高擴展性和容錯能力,適合用在生產系統。Kafka模式只提供了CFT類型的容錯能力,即僅可對節點的通常故障失效容錯,缺少對節點故意做惡的行爲進行容錯的能力。
排序服務是共識機制中重要的一環,全部交易都要經過排序服務的排序才能夠達成全網共識,所以排序服務要避免成爲網絡上的性能瓶頸。架構

四、校驗

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

2、Fabric共識機制

一、Fabric共識模式

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

二、Solo共識模式

Solo共識模式指網絡環境中只有一個排序節點,從Peer節點發送來的消息由一個排序節點進行排序和產生區塊;因爲排序服務只有一個排序節點爲全部Peer節點服務,沒有高可用性和可擴展性,不適合用於生產環境,一般用於開發和測試環境。Solo共識模式調用時序圖以下:
HyperLeger Fabric開發(四)——HyperLeger Fabric共識機制
Solo共識模式調用過程說明:
   A、Peer節點經過gPRC鏈接排序服務,鏈接成功後,發送交易信息。
   B、排序服務經過Recv接口,監聽Peer節點發送過來的信息,收到信息後進行數據區塊處理。
   C、排序服務根據收到的消息生成數據區塊,並將數據區塊寫入帳本(Ledger)中,返回處理信息。
   D、Peer節點經過deliver接口,獲取排序服務生成的區塊數據。ide

三、Kafka共識模式

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

相關文章
相關標籤/搜索