Hyperledger Fabric 學(xué)習(xí)三:共識(shí)機(jī)制

共識(shí):在Fabric中,共識(shí)過程意味著多個(gè)Peer節(jié)點(diǎn)對(duì)于某一批交易的發(fā)生順序、合法性以及它們對(duì)賬本狀態(tài)的更新達(dá)成一致的觀點(diǎn)。

1、Fabric共識(shí)

Fabric中的共識(shí)達(dá)成過程為以下三個(gè)步驟:

image.png
  • Endorsement背書:在背書( endorsement )階段中,背書節(jié)點(diǎn)對(duì)客戶端發(fā)來的交易預(yù)案進(jìn)行合法性檢驗(yàn),然后模擬執(zhí)行鏈碼得到交易結(jié)果,最后根據(jù)設(shè)定的背書邏輯判斷是否支持該交易預(yù)案。如果背書邏輯決定支持交易預(yù)案,它將把預(yù)案簽名后發(fā)回給客戶端。

    客戶端通常需要根據(jù)鏈碼的背書策略,向一個(gè)或者多個(gè)成員的背書節(jié)點(diǎn)發(fā)出背書請(qǐng)求。背書策略會(huì)定義需要哪些節(jié)點(diǎn)背書交易才有效,例如需要5個(gè)成員的背書節(jié)點(diǎn)中至少3個(gè)同意;或者某個(gè)特殊身份的成員支持等。客戶端只有在收集滿足背書策略的支持之后,廣播出去的交易才能被視為有效。
    這些背書策略可以由鏈碼在實(shí)例化之前來指定。

  • Ordering排序:排序( ordering )階段就是由排序服務(wù)對(duì)交易進(jìn)行排序,確定交易之間的時(shí)序關(guān)系。排序服務(wù)把一段時(shí)間內(nèi)收到的交易進(jìn)行排序,然后把排序后的交易打包成數(shù)據(jù)塊(區(qū)塊),再把區(qū)塊廣播給通道中的成員。采用這種方式,各個(gè)成員收到的是一組發(fā)生順序相同的交易,從而保證了所有節(jié)點(diǎn)的數(shù)據(jù)一致性。

    Fabric 1.0 中的排序服務(wù)支持可插拔的架構(gòu),solo模式(測(cè)試使用)、Kafka在內(nèi)的CFT類型后端、BFT類型后端。

    排序服務(wù)是共識(shí)機(jī)制中最重要的一環(huán),所有交易都要通過排序服務(wù)的排序才可以達(dá)成全網(wǎng)共識(shí),因此排序服務(wù)要避免成為網(wǎng)絡(luò)上的性能瓶頸。

  • Validation驗(yàn)證:validation階段是確認(rèn)節(jié)點(diǎn)對(duì)排序后的交易進(jìn)行一系列的檢驗(yàn),包括交易數(shù)據(jù)的完整性檢查、是否重復(fù)交易、背書簽名是否符合背書策略的要求、交易的讀寫集是否符合多版本并發(fā)控制 MVCC ( Multiversion Concurrency Control )的校驗(yàn)等等。

    當(dāng)交易通過了所有校驗(yàn)之后,將被標(biāo)注為合法并寫入賬本中。因?yàn)樗械拇_認(rèn)節(jié)點(diǎn)都按照相同的順序檢驗(yàn)交易,并且把合法的交易依次寫入賬本中,因此它們的狀態(tài)能夠始終保持一致。

Fabric建立共識(shí)的三個(gè)階段都支持可配置,用戶可以實(shí)現(xiàn)自己的endorsement、ordering、validation過程。

2、Fabric共識(shí)插件

Solo:?jiǎn)喂?jié)點(diǎn)的排序功能,僅適合開發(fā)測(cè)試中使用。

Kafka: 基于 Kafka 開源的分布式數(shù)據(jù)流平臺(tái),具有高擴(kuò)展性和容錯(cuò)能力,適合用在生產(chǎn)系統(tǒng)。需要注意的是,Kafka 只提供了 CFT 類型的容錯(cuò)能力,即僅可對(duì)節(jié)點(diǎn)的一般故障失效容錯(cuò),缺乏對(duì)節(jié)點(diǎn)故意作惡的行為進(jìn)行容錯(cuò)的能力。

SBFT: 支持BFT容錯(cuò)的排序?qū)崿F(xiàn),開發(fā)中。

3、源碼目錄

image.png
  • bccsp : 密碼學(xué):加密、簽名以及證書
  • bddtests:行為驅(qū)動(dòng)開發(fā)
  • common:公共庫(kù),包括 錯(cuò)誤處理,日志處理,賬本存儲(chǔ),等等
  • core:核心庫(kù),組件核心邏輯
  • devenv:開發(fā)環(huán)境,Vagrant
  • docs:相關(guān)文檔
  • events:事件監(jiān)聽機(jī)制
  • examples:例子
  • gossip:最終一致性共識(shí)算法,用于組織內(nèi)部區(qū)塊同步
  • images:docker鏡像打包
  • msp:成員服務(wù)管理 member service provider
  • orderer:排序節(jié)點(diǎn)入口
  • peer:peer節(jié)點(diǎn)入口
  • proposals : 新功能提案
  • protos:grpc(protobuffer + rpc);jsonrpc(json + rpc)

4、共識(shí)插件源碼(待補(bǔ)充)

  • 排序接口
  • 基于solo的排序服務(wù)
  • 基于kafka的排序服務(wù)
  • 自由實(shí)現(xiàn)排序服務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對(duì)官方的原文進(jìn)行了簡(jiǎn)單的翻譯:arch-deep-dive感覺原文有一點(diǎn)點(diǎn)啰嗦(更可能是本人英文有點(diǎn)搓),翻譯的更...
    wydnpu閱讀 2,740評(píng)論 1 4
  • 作者:TopJohn,原文公眾號(hào)首發(fā):AwesomeBlockchain Fabric架構(gòu)演變之路 Hyperle...
    磨鏈社區(qū)閱讀 608評(píng)論 0 0
  • 我要的是什么?不是你這樣彷徨的試探 ,如果你懂我,請(qǐng)?zhí)崞鹗澜缟献钌莩薜牟椒韺の?。因?yàn)?,我一直在這里一直都在原地...
    曦虞_閱讀 387評(píng)論 9 1
  • 當(dāng)飛機(jī)下降掠過北海海邊灘涂時(shí),下面一塊塊連成片像稻田樣的長(zhǎng)方格,是大家在海邊種稻子嗎? 專車司機(jī)直接拉我去銀灘,因...
    凌波貓步閱讀 1,376評(píng)論 0 1
  • 服務(wù)分享經(jīng)濟(jì) (企鵝:617771701) 目錄 以下所示: 《1》:金銀鋪APP介紹;https://www....
    云露森林閱讀 4,329評(píng)論 0 1

友情鏈接更多精彩內(nèi)容