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

-
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、源碼目錄

- 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ù)