這篇文章將為大家詳細(xì)講解有關(guān)如何理解HyperLeger Fabric共識機(jī)制,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
按需網(wǎng)站建設(shè)可以根據(jù)自己的需求進(jìn)行定制,成都做網(wǎng)站、成都網(wǎng)站建設(shè)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司成都做網(wǎng)站、成都網(wǎng)站建設(shè)的運(yùn)用實際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實際意義
Fabric區(qū)塊鏈的網(wǎng)絡(luò)節(jié)點(diǎn)本質(zhì)上是互相復(fù)制的狀態(tài)機(jī),節(jié)點(diǎn)之間需要保持相同的賬本狀態(tài)。為了實現(xiàn)分布式節(jié)點(diǎn)的一致性,各個節(jié)點(diǎn)需要通過共識過程,對賬本狀態(tài)的變化達(dá)成一致性的認(rèn)同。
Fabric區(qū)塊鏈的共識過程包括3個階段:背書、排序和校驗。
在背書(endorsement)階段中,背書節(jié)點(diǎn)對客戶端發(fā)來的交易提案進(jìn)行合法性校驗,然后模擬執(zhí)行鏈碼得到交易結(jié)果,最后根據(jù)設(shè)定的背書邏輯判斷是否支持該交易提案。如果背書邏輯決定支持交易提案,會把交易提案簽名后發(fā)回給客戶端。
客戶端通常需要根據(jù)鏈碼的背書策略,向一個或者多個成員的背書節(jié)點(diǎn)發(fā)出背書請求。背書策略會定義需要哪些節(jié)點(diǎn)背書交易才有效,例如需要5個成員的背書節(jié)點(diǎn)中至少3個同意;或者某個特殊身份的成員支持等??蛻舳酥挥性谑占銐蚨嗟谋硶?jié)點(diǎn)的交易提案簽名,交易才能被視為有效。
排序(ordering)階段就是由排序服務(wù)對交易進(jìn)行排序,確定交易之間的時序關(guān)系。排序服務(wù)把一段時間內(nèi)收到的交易進(jìn)行排序,然后把排序后的批量交易打包成數(shù)據(jù)塊(區(qū)塊),再把區(qū)塊廣播給通道中的成員。采用排序共識方式,各個成員收到的是一組發(fā)生順序相同的交易,從而保證了所有節(jié)點(diǎn)的數(shù)據(jù)一致性。
Fabric 1.0中的排序服務(wù)支持可插拔的架構(gòu),除了提供的SOLO和Kafka 模式外,用戶可以添加第三方的排序服務(wù)。SOLO是單機(jī)模式,僅適合開發(fā)測試中使用。Kafka模式是基于Kafka開源的分布式數(shù)據(jù)流平臺,具有高擴(kuò)展性和容錯能力,適合用在生產(chǎn)系統(tǒng)。Kafka模式只提供了CFT類型的容錯能力,即僅可對節(jié)點(diǎn)的一般故障失效容錯,缺乏對節(jié)點(diǎn)故意作惡的行為進(jìn)行容錯的能力。
排序服務(wù)是共識機(jī)制中重要的一環(huán),所有交易都要通過排序服務(wù)的排序才可以達(dá)成全網(wǎng)共識,因此排序服務(wù)要避免成為網(wǎng)絡(luò)上的性能瓶頸。
校驗(Validation)階段是確認(rèn)節(jié)點(diǎn)對排序后的交易進(jìn)行一系列的檢驗,包括交易數(shù)據(jù)的完整性檢查、是否重復(fù)交易、背書簽名是否符合背書策略的要求、交易的讀寫集是否符合多版本并發(fā)控制MVCC(Multiversion Concurrency Control)的校驗等。當(dāng)交易通過了所有校驗后,將被標(biāo)注為合法并寫入賬本中。因為所有的確認(rèn)節(jié)點(diǎn)都按照相同的順序檢驗交易,并且把合法的交易依次寫入賬本中,因此不同確認(rèn)節(jié)點(diǎn)的狀態(tài)能夠始終保持一致。
在所有Peer節(jié)點(diǎn)中,交易信息必須按照一致的順序?qū)懭胭~本(區(qū)塊鏈的一致性基本原則)。例如,比特幣通過POW機(jī)制競爭記賬權(quán),由最先完成數(shù)學(xué)難題的節(jié)點(diǎn)獲取記賬權(quán)并生成區(qū)塊,決定本區(qū)塊中的信息順序,并廣播給全網(wǎng)所有節(jié)點(diǎn),以此來達(dá)成賬本的共識。而Hyperledger Fabric采用了更加靈活、高效的共識算法,以適應(yīng)企業(yè)場景下對高TPS的要求。目前,Hyperledger Fabric有三種交易排序算法:Solo、Kafka、SBFT。
Solo:只有一個排序服務(wù)節(jié)點(diǎn)負(fù)責(zé)接收交易信息并排序,是最簡單的一種排序算法,一般用于開發(fā)測試環(huán)境中。Solo共識模式屬于中心化的處理方式,不支持拜占庭容錯。
Kafka:Kafka是Apache的一個開源項目,主要提供分布式的消息處理/分發(fā)服務(wù),每個Kafka集群由多個服務(wù)節(jié)點(diǎn)組成。Hyperledger Fabric利用Kafka對交易信息進(jìn)行排序處理,提供高吞吐、低延時的處理能力,并且在集群內(nèi)部支持節(jié)點(diǎn)故障容錯,但不支持拜占庭容錯。
SBFT:簡單拜占庭算法,支持拜占庭容錯的可靠排序算法,包括容忍節(jié)點(diǎn)故障以及一定數(shù)量的惡意節(jié)點(diǎn)。目前,Hyperledger Fabric社區(qū)正在開發(fā)SBFT算法。
Solo共識模式指網(wǎng)絡(luò)環(huán)境中只有一個排序節(jié)點(diǎn),從Peer節(jié)點(diǎn)發(fā)送來的消息由一個排序節(jié)點(diǎn)進(jìn)行排序和產(chǎn)生區(qū)塊;由于排序服務(wù)只有一個排序節(jié)點(diǎn)為所有Peer節(jié)點(diǎn)服務(wù),沒有高可用性和可擴(kuò)展性,不適合用于生產(chǎn)環(huán)境,通常用于開發(fā)和測試環(huán)境。Solo共識模式調(diào)用時序圖如下:
Solo共識模式調(diào)用過程說明:
A、Peer節(jié)點(diǎn)通過gPRC連接排序服務(wù),連接成功后,發(fā)送交易信息。
B、排序服務(wù)通過Recv接口,監(jiān)聽Peer節(jié)點(diǎn)發(fā)送過來的信息,收到信息后進(jìn)行數(shù)據(jù)區(qū)塊處理。
C、排序服務(wù)根據(jù)收到的消息生成數(shù)據(jù)區(qū)塊,并將數(shù)據(jù)區(qū)塊寫入賬本(Ledger)中,返回處理信息。
D、Peer節(jié)點(diǎn)通過deliver接口,獲取排序服務(wù)生成的區(qū)塊數(shù)據(jù)。
共識集群由多個排序服務(wù)節(jié)點(diǎn)(OSN)和一個Kafka集群組成。排序節(jié)點(diǎn)之間不直接通信,僅僅與Kafka集群通信。
在排序節(jié)點(diǎn)的實現(xiàn)里,通道(Channel)在Kafka中是以主題topic的形式隔離。
每個排序節(jié)點(diǎn)內(nèi)部,針對每個通道都會建立與Kafka集群對應(yīng)topic的生產(chǎn)者及消費(fèi)者。生產(chǎn)者將排序節(jié)點(diǎn)收到的交易發(fā)送到Kafka集群進(jìn)行排序,在生產(chǎn)的同時,消費(fèi)者也同步消費(fèi)排序后的交易。
關(guān)于如何理解HyperLeger Fabric共識機(jī)制就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。