超級(jí)賬本(Hyperledger Fabric)共識(shí)
由于fabric是分布式的系統(tǒng),因此需要共識(shí)機(jī)制來保障各個(gè)節(jié)點(diǎn)以相同的順序狀態(tài)保存賬本,達(dá)成一致性。fabric 廣義的共識(shí)機(jī)制為三個(gè)階段:交易背書,交易排序,交易驗(yàn)證。而有些認(rèn)為“交易排序”是屬于共識(shí),在當(dāng)前fabric1.4版本中,存在三種共識(shí)機(jī)制,分別是solo,kafka,etcdraft。交易排序圖:
排序節(jié)點(diǎn)收到該交易以后會(huì)按照通道進(jìn)行拆分,拆分以后再進(jìn)行排序,也就是說排序并不是全局排序,而是按照每一個(gè)通道單獨(dú)排序,最后分別組裝成區(qū)塊發(fā)往主節(jié)點(diǎn),通道之間是相互隔離的,它們并不會(huì)知道彼此的存在,但是每一個(gè)組織的節(jié)點(diǎn)都可以訂閱多個(gè)通道。
Solo共識(shí)模式:指網(wǎng)絡(luò)環(huán)境中只有一個(gè)排序節(jié)點(diǎn),從Peer節(jié)點(diǎn)發(fā)送來的消息由一個(gè)排序節(jié)點(diǎn)進(jìn)行排序和產(chǎn)生區(qū)塊,由于排序服務(wù)只有一個(gè)排序節(jié)點(diǎn)為所有Peer節(jié)點(diǎn)服務(wù),沒有高可用性和可擴(kuò)展性,不適合用于生產(chǎn)環(huán)境,通常用于開發(fā)和測(cè)試環(huán)境。
Kafka 共識(shí)模式:對(duì)所有交易信息進(jìn)行排序(如果系統(tǒng)存在多個(gè)channel,則對(duì)每個(gè)channel分別排序)。Kafka是一個(gè)分布式的流式信息處理平臺(tái),目標(biāo)是為實(shí)時(shí)數(shù)據(jù)提供統(tǒng)一的、高吞吐、低延遲的性能。
Etcdraft 共識(shí)模式:它是一種基于 etcd 的崩潰容錯(cuò)(CFT)排序服務(wù)。遵循 “領(lǐng)導(dǎo)者和追隨者” 模型,其中領(lǐng)導(dǎo)者在通道中的orderer節(jié)點(diǎn)之間動(dòng)態(tài)選出,該領(lǐng)導(dǎo)者將消息復(fù)制到跟隨者節(jié)點(diǎn)。由于系統(tǒng)可以承受節(jié)點(diǎn)(包括領(lǐng)導(dǎo)節(jié)點(diǎn))的丟失,只要剩下大多數(shù)排序節(jié)點(diǎn)(即所謂的“仲裁”),Raft就被稱為“崩潰容錯(cuò)”(CFT)。換句話說,如果一個(gè)通道中有三個(gè)節(jié)點(diǎn),它可以承受一個(gè)節(jié)點(diǎn)的丟失(剩下兩個(gè)節(jié)點(diǎn))。
