超級賬本Fabric怎么利用Gossip實現(xiàn)區(qū)塊的廣播,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元西雙版納做網(wǎng)站,已為上家服務(wù),為西雙版納各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
Hyperledger Fabric是一個分布式區(qū)塊鏈網(wǎng)絡(luò),每個節(jié)點都存有共享賬本的一個副本,該副本保存了所有交易的確定性歷史記錄。當(dāng)新的交易發(fā)生時,這些交易必須擴(kuò)散到整個Hyperledger Fabric網(wǎng)絡(luò)中,以便使賬本的所有副本保持一致。本文將介紹Gossip協(xié)議機(jī)制的原理并說明Hyperledger Fabric如何使用Gossip機(jī)制來保證所有peer節(jié)點的數(shù)據(jù)同步。
從大的層面講,在Hyperledger Fabric中整個交易處理流程如下:
新交易被提交給排序節(jié)點
排序節(jié)點創(chuàng)建新的區(qū)塊,其中包含了新產(chǎn)生的交易
排序節(jié)點分發(fā)區(qū)塊給所有的對等節(jié)點
最后一步,分發(fā),就是gossip協(xié)議發(fā)揮作用的環(huán)節(jié)。即使在一個僅包含少量成員機(jī)構(gòu)的Hyperledger Fabric網(wǎng)絡(luò)中,也可能會包含大量的對等節(jié)點。例如,一個重度使用IoT設(shè)備的Hyperledger Fabric網(wǎng)絡(luò)可能就需要很多Peer節(jié)點來將這些IoT設(shè)備接入?yún)^(qū)塊鏈網(wǎng)絡(luò)。更進(jìn)一步講,大范圍網(wǎng)絡(luò)中的peer節(jié)點連接可能是間歇性的,有些peer節(jié)點不是總會被排序節(jié)點訪問到。另外也沒必要要求排序節(jié)點將新區(qū)塊 分發(fā)給每個peer節(jié)點,而且這一要求在有些情況下也是不可能滿足的。
Gossip:閑聊; 八卦; 小道消息;
實際上在Hyperledger Fabric的排序節(jié)點分發(fā)區(qū)塊時,它只會把新區(qū)塊分發(fā)給每個機(jī)構(gòu)中的主導(dǎo)peer節(jié)點,然后經(jīng)過gossip過程,這些peer節(jié)點自己完成新區(qū)塊在彼此之間的擴(kuò)散:
某個peer節(jié)點有一個需要散播給其他peer節(jié)點的消息。例如,主導(dǎo)的peer節(jié)點 有一個新的區(qū)塊。
該peer節(jié)點將消息發(fā)送給(隨機(jī)選擇的)預(yù)定數(shù)量的其他peer節(jié)點
收到消息的peer節(jié)點再將消息發(fā)送給(隨機(jī)選擇的)預(yù)定數(shù)量的其他peer節(jié)點
如此不斷反復(fù),直到每個peer節(jié)點都收到消息。
上面的過程被稱為廣播,這一過程被應(yīng)用于Fabric的gossip系統(tǒng)來向全體peer成員分發(fā)各種類型的消息。
Gossip協(xié)議的一個核心組件,就是每個peer都會轉(zhuǎn)發(fā)消息給網(wǎng)絡(luò)中一組隨機(jī)選擇的節(jié)點。這隱含了每個peer節(jié)點都了解網(wǎng)絡(luò)中有哪些peer節(jié)點因此才可以進(jìn)行隨機(jī)選擇。
在Fabric中,每個peer節(jié)點都會周期性的廣播消息來表示自身的存活并且已經(jīng)接入網(wǎng)絡(luò)。每個peer節(jié)點都會維護(hù)一個清單來記錄網(wǎng)絡(luò)上的所有peer節(jié)點 - 哪些peer是存活的,哪些peer是死翹翹的。
當(dāng)Peer A收到來自Peer B的alive消息,它就會將Peer B標(biāo)注為alive。對于Peer A來說,Peer B就是網(wǎng)絡(luò)中的一個成員
如果過了一段時間,Peer SA不在收到來自Peer B的alive消息,它就會 將Peer B標(biāo)注為dead。對于Peer A來說,Peer B就不再是網(wǎng)絡(luò)中的一員了。
假設(shè)Peer B并沒有真的死翹翹,Peer A 會周期性地嘗試連接標(biāo)記為dead的Peer節(jié)點以檢查其是否還存活。例如,有可能是因為網(wǎng)絡(luò)問題或其他Peer節(jié)點的故障導(dǎo)致了Peer B的alive消息無法到達(dá)Peer A,因此當(dāng)Peer A直接聯(lián)系Peer B時,它就可以確定Peer B的真實狀態(tài)。
上面描述的過程僅當(dāng)在peer節(jié)點有一組可供發(fā)送alive消息的peer節(jié)點清單時才可以正常工作。因此每個peer節(jié)點在啟動引導(dǎo)時都有一個啟動引導(dǎo)節(jié)點集來提供初始的peer節(jié)點清單。
每個peer節(jié)點會簽名其發(fā)送的alive消息,這意味著一個壞家伙不能偽造消息來愚弄其他網(wǎng)絡(luò)成員。這個壞家伙能做的也就是不轉(zhuǎn)發(fā)alive消息。只要其他peer節(jié)點繼續(xù)轉(zhuǎn)發(fā)alive消息,這就不是什么大問題。
正如前面所描述的,在Hyperledger Fabric網(wǎng)絡(luò)中數(shù)據(jù)擴(kuò)散的基本原理很簡單。每個peer節(jié)點只需將新的數(shù)據(jù)轉(zhuǎn)發(fā)給一組隨機(jī)選擇的peer節(jié)點,最終就可以完成新數(shù)據(jù)在整個網(wǎng)絡(luò)中的擴(kuò)散。這一過程被稱為廣播,以一種基于推送的信息傳遞方案。
然而,如果一個peer節(jié)點從網(wǎng)絡(luò)斷開并在稍后重連,它可能就會錯過廣播過程。為了跟上網(wǎng)絡(luò)中其他成員的數(shù)據(jù)進(jìn)度,這個節(jié)點需要一種基于拉取的機(jī)制來請求 其缺失的數(shù)據(jù)。在Hyperledger Fabric中,peer節(jié)點間會周期性地交換網(wǎng)絡(luò)成員數(shù)據(jù)和賬本數(shù)據(jù),這是的peer節(jié)點可以保持更新狀態(tài),即使其錯過某個廣播過程。
Hyperledger Fabric在peer節(jié)點之間使用Gossip作為一種可伸縮的容錯機(jī)制來保證所有peer節(jié)點上的賬本副本保持同步。使用gossip有效降低了排序節(jié)點的壓力,因為排序節(jié)點只需要將區(qū)塊分發(fā)給每個機(jī)構(gòu)中的主導(dǎo)節(jié)點,同時這也讓peer節(jié)點即使在斷線重連的情況下也能跟得上整個網(wǎng)絡(luò)的狀態(tài)更新。
關(guān)于超級賬本Fabric怎么利用Gossip實現(xiàn)區(qū)塊的廣播問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。